我在生产中使用https运行django + nginx + uwsgi,前端使用react。
反应代码在开发期间向生产站点请求apis。当js代码使用POST时,它会导致403被禁止。我认为这是因为当使用ssl从localhost发布到生产站点时,host和referer标头不同。当我使用gunicorn时工作正常。我想找到一个解决方法,以便在开发react应用程序时可以从js代码发布。
这是我的nignx conf。
server {
listen 80;
server_name www.tratoli.com,tratoli.com;
#return 301 https://$host$1;
rewrite ^(.*) https://www.tratoli.com$1 permanent;
}
server {
listen 443 ssl;
ssl_certificate /etc/nginx/sites-available/tratoli_ssl.crt;
ssl_certificate_key /etc/nginx/sites-available/tratoli_ssl.key;
server_name www.tratoli.com;
location = /favicon.ico {
alias /home/ubuntu/django/new_backend/favicon.ico;
}
location /static/ {
alias /home/ubuntu/django/new_backend/static/;
}
location / {
include uwsgi_params;
uwsgi_pass unix:///home/ubuntu/django/new_backend/tratoli/tratoli.sock;
}
location /chat/ {
proxy_pass http://52.66.167.160:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Origin '';
proxy_read_timeout 300;
}
location ~* \.(?:jpg|jpe?g|png|gif|ico|css|js|eot|ttf|woff|otf)$ {
root /home/ubuntu/django/new_backend/;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
location =/sw.js {
root /home/ubuntu/django/new_backend/static/react_mobile/js/;
}
}
这是我的uwsgi ini文件
[uwsgi]
socket = /home/ubuntu/django/new_backend/tratoli/tratoli.sock
uid = 1000
gid = 33
chdir = /home/ubuntu/django/new_backend/tratoli/
wsgi-file = tratoli/wsgi.py
processes = 4
threads = 30
chmod-socket = 777
env = DJANGO_ENVIRONMENT="production"
stats = 127.0.0.1:9191
logto = /var/log/uwsgi/%n.log
此外,我尝试在django设置中设置CSRF_TRUSTED_ORIGINS,即使这没有帮助。 任何想法?