Nginx выдает 502 Bad Gateway
Я следую этому руководству (с этим репозиторием ) для развертывания моего проекта Django. Я добавил конфигурацию nginx, как описано, со всеми файлами и каталогами, кажется, совпадающими. Проект, который я пытаюсь развернуть, также имеет другие зависимости, такие как celery или selenium, но они нормально работают с docker-compose. Когда я запускаю docker-compose up
, приложение запускается без ошибок (задачи celery выполняются и т.д.), а прокси выдает такой журнал:
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: using the "epoll" event method
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: nginx/1.23.3
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: built by gcc 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4)
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: OS: Linux 5.15.49-linuxkit
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: getrlimit(RLIMIT_NOFILE): 1048576:1048576
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: start worker processes
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: start worker process 9
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: start worker process 10
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: start worker process 11
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: start worker process 12
suii-proxy-1 | 2023/01/26 08:43:00 [notice] 8#8: start worker process 13
Но при попытке доступа к http://127.0.0.1 я получаю 502 Bad Gateway, как это:
С этой ошибкой в журнале:
suii-proxy-1 | 2023/01/27 07:10:28 [error] 11#11: *28 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: , request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://172.18.0.6:9000", host: "127.0.0.1", referrer: "http://127.0.0.1/"
suii-proxy-1 | 172.18.0.1 - - [27/Jan/2023:07:10:28 +0000] "GET /favicon.ico HTTP/1.1" 502 559 "http://127.0.0.1/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "-"
Я новичок в nginx и wsgi, но мне интересно, правильно ли я выбрал upstream и/или client. Вот файлы, которые я использую для справки. Это proxy/default.conf.tpl:
server {
listen ${LISTEN_PORT};
location /static {
alias /vol/static;
}
location / {
uwsgi_pass ${APP_HOST}:${APP_PORT};
include /etc/nginx/uwsgi_params;
client_max_body_size 10M;
}
}
И proxy/Dockerfile:
FROM nginxinc/nginx-unprivileged:1-alpine
LABEL maintainer="londonappdeveloper.com"
COPY ./default.conf.tpl /etc/nginx/default.conf.tpl
COPY ./uwsgi_params /etc/nginx/uwsgi_params
COPY ./run.sh /run.sh
ENV LISTEN_PORT=8000
ENV APP_HOST=app
ENV APP_PORT=9000
USER root
RUN mkdir -p /vol/static && \
chmod 755 /vol/static && \
touch /etc/nginx/conf.d/default.conf && \
chown nginx:nginx /etc/nginx/conf.d/default.conf && \
chmod +x /run.sh
VOLUME /vol/static
USER nginx
CMD ["/run.sh"]
Это proxy/run.sh:
#!/bin/sh
set -e
envsubst < /etc/nginx/default.conf.tpl > /etc/nginx/conf.d/default.conf
nginx -g 'daemon off;'
И scripts/run.sh:
#!/bin/sh
set -e
python manage.py wait_for_db
python manage.py collectstatic --noinput
python manage.py migrate
celery -A suii worker -l INFO
celery -A suii beat -l INFO
uwsgi --socket :9000 --workers 4 --master --enable-threads --module suii.wsgi
А также сценарий docker-compose-deploy.yml:
version: '3.9'
services:
app:
build:
context: .
restart: always
volumes:
- static-data:/vol/web
environment:
- DB_HOST=db
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}
- SECRET_KEY=${SECRET_KEY}
- ALLOWED_HOSTS=${ALLOWED_HOSTS}
- CELERY_BROKER=${CELERY_BROKER}
- CELERY_BACKEND=%{CELERY_BACKEND}
depends_on:
- db
db:
image: postgres
restart: always
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
- DB_NAME=${DB_NAME}
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}
- TZ=${TZ}
proxy:
build:
context: ./proxy
restart: always
depends_on:
- app
ports:
- 80:8000
volumes:
- static-data:/vol/static
Похоже, что сервер nginx указывает в неверном направлении, где ошибка, которая не позволяет ему указать на приложение django?
Вот как выглядит мой рабочий стол Docker, если это будет полезно:
Я думаю, что вы должны добавить порт после http://127.0.0.1