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 очень полезен и надежен для управления различными источниками, вы можете использовать его в продакшене.