Назад | Перейти на главную страницу

nginx, docker и gunicorn url без номера порта в url

У меня есть приложение 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.