Nginx 502. Плохой шлюз, но работает с CORS. Должен ли я использовать CORS в производстве?

Я пытаюсь докеризировать Django App + React с Nginx и прокси передать запрос на мой бэкенд с помощью upstream. Проблема заключается в том, что если я не включаю cors и разрешаю localhost:4000 в моем бэкенде, соединение отклоняется. Nginx бросает:

2021/09/02 21:57:02 [error] 26#26: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.21.0.1, server: , request: "GET /api/users/me HTTP/1.1", upstream: "http://172.21.0.4:8000/api/users/me", host: "localhost:4000", referrer: "http://localhost:4000/"

Примечание: Я не знаю, откуда взялась ошибка ... client: 172.21.0.1 ... из журнала выше.

Я пробовал установить ALLOWED_HOSTS на ["*"], ["localhost", "localhost:4000", "127.0.0.1", "127.0.0.1:4000"] но похоже проблема не здесь.

С CORS:

CORS_ALLOWED_ORIGINS = [
    "http://localhost:4000",
    "http://127.0.0.1:4000",
] 

Работает просто отлично.

Я не пытался развернуть приложение с cors, чтобы проверить его на производстве

Итак, мои вопросы следующие:

  1. Is this the right way of allowing traffic through my web server?
  2. Is it okey to have cors in production if it

Вот мой Nginx.conf:

upstream backend {
    server backend:8000;
}

server {
    listen 8080; #mapping port 4000:8080 from docker-compose
    error_log /var/log/nginx/api.error.log;

    location /api {
        proxy_set_header host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-forward-for $proxy_add_x_forwarded_for;
        proxy_pass http://backend;
    }

    location /staticbe/ {
        root /backend;
    }

    location /admin/ {
        proxy_set_header host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-forward-for $proxy_add_x_forwarded_for;
        proxy_pass http://backend;
    }

    location / {
        root   /var/www/react;
        index  index.html index.html;
        try_files $uri $uri/ /index.html;
    }

}

Записи с моего бэкенда (Daphne):

Starting server at tcp:port=8000:interface=127.0.0.1
HTTP/2 support not enabled (install the http2 and tls Twisted extras)
Configuring endpoint tcp:port=8000:interface=127.0.0.1
Listening on TCP address 127.0.0.1:8000

Одна и та же проблема и у Гуникорна, и у Дафны

Вы должны использовать свой домен в ALLOWED_HOSTS. Никогда не устанавливайте ALLOWED_HOSTS в '*', потому что это подвергает ваш сайт атакам на заголовки HTTP Host. CORS очень полезен и надежен для управления различными источниками, вы можете использовать его в продакшене.

Вернуться на верх