@s7500

Как настоить nginx для взимодействия с docker?

Я ставлю бэк на удалённом сервере. Для сервера исполььзую nginx. Бек крутится в контейнере docker, который поднимается с помощью docker-compose. В чем проблема: я поднимаю nginx, он подтягивает фронт(тут всё ок). Но проблема появляется, когда нужно использовать бэк
Nginx будто не видит урлы, которые есть у бэка и присылает 404. До докера запрос не доходит, но в логах nginx запрос есть.
Подозреваю, что проблема где-то в портах, но не могу понять где
вот часть конфига nginx:
upstream backend {
        server 127.0.0.1:8000;
}
server {
        server_name mysite.com;
 
        access_log /var/log/nginx/mysite.com.access.log;
        error_log /var/log/nginx/mysite.com.error.log;

        root /srv/www/mysite-frontend/build/;

        location / {
                try_files $uri $uri/ /;
                index index.html;
        }

        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Pragma,Expires,x-csrftoken' always;
        add_header "Access-Control-Allow-Origin" $http_origin always;
        add_header 'Access-Control-Allow-Credentials' 'true' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT' always;
        add_header X-Frame-Options "SAMEORIGIN";

        location /api/ {

                proxy_pass http://127.0.0.1:8000/;
                proxy_set_header Host $server_name;
                proxy_set_header X-Forwarded-Proto $scheme;
                keepalive_timeout 650;
        }
        location /django-static/ {
                alias /srv/www/mysite-backend/static/;
        }


    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

}
server {
    listen 80;
}


в докере внутрений порт прокинут на 8000:443
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0 Куратор тега Nginx
Миллиардер, филантроп, патологический лгун
Вы уверены, что вам нужно именно так?

location /api/ {
proxy_pass http://127.0.0.1:8000/;


В такой конфигурации внутрь проваливается запрос не /api, а просто /. В противном случае - уберите слэш в конце директивы proxy_pass.

P. S. - раз у вас определён апстрим, странно не использовать его в proxy_pass:

proxy_pass http://backend/;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы