У меня есть приложение django, которое также использует gunicorn и nginx. Я могу получить доступ к своему сайту, используя 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
вы фактически попадаете прямо в контейнер с пулеметом.
В вашей конфигурации nginx я бы полностью удалил блок восходящего потока и просто указал порт Gunicorn в вашем proxy_pass
линия. Однако это должно указывать на DNS-имя контейнера Gunicorn (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 определен, сервис доступен и вне роя.
Теперь подключитесь к http://smn-imm/
в вашем браузере, и он должен работать. Если это не то имя хоста, которое вы собираетесь использовать для службы, обновите server_name
в конфигурации nginx и / или настройте свой DNS.
Очевидно, не делайте это доступным для Интернета, другой обратный прокси-сервер должен завершить работу SSL или, альтернативно, настроить ваш контейнер nginx с сертификатами SSL и открыть порт 443.