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, чтобы проверить его на производстве
Итак, мои вопросы следующие:
- Is this the right way of allowing traffic through my web server?
 - 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 очень полезен и надежен для управления различными источниками, вы можете использовать его в продакшене.