我有一个 django 应用,它也使用 gunicorn 和 nginx。我可以使用以下方式访问我的网站http://网址:8000,但我不知道如何正确配置它,所以我根本不必在url中使用端口号,即http://网址相当于http://网址:8000。
这是我的docker-compose.yml:
version: '3.2'
services:
immweb:
restart: always
build: .
expose:
- "8000"
command: gunicorn smn_imm.wsgi:application --bind 0.0.0.0:8000
volumes:
- type: volume
source: smnvol
target: /etc/smn_imm/smnvol
ports:
- "8000:8000"
nginx:
build: nginx
depends_on:
- immweb
nginx.conf:
upstream smn_imm {
server web:8000;
}
server {
listen 80;
server_name smn-imm;
location / {
proxy_pass http://smn_imm;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
答案1
您尚未为该nginx
服务打开任何端口。听起来,当您点击时,http://url:8000
您实际上是直接点击了 gunicorn 容器。
在您的 nginx 配置中,我会完全删除上游块,并在您的proxy_pass
行中指定 gunicorn 端口。但是,这应该指向 gunicorn 容器的 DNS 名称(immweb
如指定)。请参阅本指南了解详细信息。
server {
listen 80;
server_name smn-imm;
location / {
proxy_pass http://immweb:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
然后您需要更新撰写文件:
version: '3.2'
services:
immweb:
restart: always
build: .
command: gunicorn smn_imm.wsgi:application --bind 0.0.0.0:8000
volumes:
- type: volume
source: smnvol
target: /etc/smn_imm/smnvol
nginx:
build: nginx
depends_on:
- immweb
ports:
- "80:80"
请注意,我为 添加了外部端口映射,nginx
但删除了 的ports
和expose
行immweb
。请参阅我链接的文档中有关HOST_PORT
和之间差异的部分CONTAINER_PORT
:
网络服务到服务通信使用 CONTAINER_PORT。定义 HOST_PORT 后,服务也可在 Swarm 外部访问。
现在,在您的浏览器中连接到http://smn-imm/
,它应该可以工作。如果这不是您打算用于服务的主机名,则server_name
在 nginx 配置中更新,和/或配置您的 DNS。
显然,不要将其提供给互联网,另一个反向代理应该终止 SSL,或者使用 SSL 证书配置你的 nginx 容器,并公开端口 443。