Nginx+uwsgi。在本地主机上工作正常,但在远程机器上不工作。为什么
Nginx+uwsgi. Works fine on localhost, but not on remote machine. WHY
案例:
在 docker 网络中创建:
docker network create --attachable --subnet 1.1.1.0/29 some-network
第一个容器是 Flask+uwsgi,启动方式如下:
docker run -d --rm --net some-network --ip 1.1.1.4 \
-p 8080:8080 --name my-flask my-flask-image
uwsgi ini 看起来像:
[uwsgi]
module = app:app
master = true
processes = 2
socket = :8080
第二个容器是 nginx,启动方式如下:
docker run -d --rm --net some-network --ip 1.1.1.2 \
-p 80:80 --name my-nginx my-nginx-image
config 仅添加下一个服务器配置
upstream app_dev {
server 1.1.1.4:8080;
}
server {
listen 80;
server_name develop.localhost;
location / {
include uwsgi_params;
uwsgi_pass app_dev;
}
}
我 运行 个容器,我访问 develop.localhost 没有任何问题。
然而,当我 运行 远程机器上的容器 domain_name(肯定有添加的 A 记录,我可以通过 domain_name 通过 ssh 访问服务器)我不能访问 nginx,不是 uwsgi:docker 日志显示没有请求。
我只能通过 ip 地址访问(从浏览器),然后 nginx 以 502 响应。
nginx 配置与仅本地 ssl 内容(和 ssl)略有不同,添加了 domain_name
server {
listen 80;
listen 443 ssl;
server_name develop.domainname.com;
ssl_certificate /etc/nginx/ssl/CERTIFICATE.crt;
ssl_certificate_key /etc/nginx/ssl/KEY.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
include uwsgi_params;
uwsgi_pass app_dev;
}
}
我不知道如何诊断问题 - 我不明白为什么日志是空的。
当我输入这个案例时,我意识到了问题。
我没有为 nginx 暴露 443 端口。
我在 运行 命令中添加了端口,它有点管用。
-p 443:443
“有点”- 因为在那之后 firefox 开始尖叫说我的 ssl 证书不好。显然 godaddy 给了我 www.domain.com 和 domain.com 的 ssl 证书,但没有给通配符域。
案例: 在 docker 网络中创建:
docker network create --attachable --subnet 1.1.1.0/29 some-network
第一个容器是 Flask+uwsgi,启动方式如下:
docker run -d --rm --net some-network --ip 1.1.1.4 \
-p 8080:8080 --name my-flask my-flask-image
uwsgi ini 看起来像:
[uwsgi]
module = app:app
master = true
processes = 2
socket = :8080
第二个容器是 nginx,启动方式如下:
docker run -d --rm --net some-network --ip 1.1.1.2 \
-p 80:80 --name my-nginx my-nginx-image
config 仅添加下一个服务器配置
upstream app_dev {
server 1.1.1.4:8080;
}
server {
listen 80;
server_name develop.localhost;
location / {
include uwsgi_params;
uwsgi_pass app_dev;
}
}
我 运行 个容器,我访问 develop.localhost 没有任何问题。
然而,当我 运行 远程机器上的容器 domain_name(肯定有添加的 A 记录,我可以通过 domain_name 通过 ssh 访问服务器)我不能访问 nginx,不是 uwsgi:docker 日志显示没有请求。
我只能通过 ip 地址访问(从浏览器),然后 nginx 以 502 响应。 nginx 配置与仅本地 ssl 内容(和 ssl)略有不同,添加了 domain_name
server {
listen 80;
listen 443 ssl;
server_name develop.domainname.com;
ssl_certificate /etc/nginx/ssl/CERTIFICATE.crt;
ssl_certificate_key /etc/nginx/ssl/KEY.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
include uwsgi_params;
uwsgi_pass app_dev;
}
}
我不知道如何诊断问题 - 我不明白为什么日志是空的。
当我输入这个案例时,我意识到了问题。
我没有为 nginx 暴露 443 端口。
我在 运行 命令中添加了端口,它有点管用。
-p 443:443
“有点”- 因为在那之后 firefox 开始尖叫说我的 ssl 证书不好。显然 godaddy 给了我 www.domain.com 和 domain.com 的 ssl 证书,但没有给通配符域。