Nginx
nginx、docker 和 gunicorn url,url 中沒有埠號
我有一個也使用 gunicorn 和 nginx 的 django 應用程序。我可以使用http://url:8000訪問我的網站,但我不知道如何正確配置它,所以我根本不必使用 url 中的埠號,即http:// url與http://url: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; } }
您還沒有為該
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。