You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整Nginx worker_connections后出现CORS问题,上游服务器请求异常

调整Nginx worker_connections后出现CORS问题,上游服务器请求异常

这情况确实让人头疼——本来运行好好的Django应用,只是改了下Nginx的worker_connections,就爆出CORS问题,改回原数值也没恢复,甚至上游服务器(配置和当前一致)还出现404或CORS错误。我来帮你梳理下可能的问题点和解决思路:

一、先清理Nginx配置里的重复块

我注意到你的配置里重复定义了两组location /static/downloads和location /static/,这会导致Nginx解析请求时出现匹配混乱,很可能是引发404错误的原因。建议合并成唯一的配置块:

location /static/downloads {
    alias /home/www/api.to/static/downloads/;
    add_header Content-disposition "attachment; filename=$1";
    default_type application/octet-stream;
}

location /static/ {
    alias /home/www/api.to/static/;
    expires 35d;
    add_header Pragma public;
    add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    access_log off;
}

二、优化CORS请求的处理逻辑

你添加的CORS头是对的,但当前的OPTIONS请求处理可以更严谨些,避免和常规请求的头逻辑冲突,建议调整成这样:

location / {
    # 优先处理OPTIONS预检请求
    if ($request_method = OPTIONS) {
        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Max-Age' '3600' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
        add_header 'Access-Control-Allow-Headers' '*' always;
        return 204; # 用204状态码更符合HTTP规范
    }
    
    # 处理其他请求的CORS头
    add_header 'Access-Control-Allow-Origin' '*' always;
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
    add_header 'Access-Control-Allow-Headers' '*' always;
    
    proxy_pass http://backend;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_set_header REMOTE_ADDR $remote_addr;
    proxy_read_timeout 1000;
}

三、检查上游服务器的状态

既然上游服务器和当前用了相同的Nginx配置,建议排查这几点:

  • 上游服务器的worker_connections是否也被修改过?查看上游的Nginx错误日志,有没有no live upstreams、connection refused这类连接数耗尽的报错,如果有,需要同步调整worker_processes和worker_connections的搭配,保证整体连接能力足够。
  • 上游的Django应用是否正常运行?检查sock文件的权限和存在性,用curl -X OPTIONS http://backend直接测试上游后端,看是否能返回正确的CORS头和响应状态。

四、确保配置生效

每次修改Nginx配置后,一定要先执行nginx -t验证配置合法性,再用nginx -s reload重启服务。有时候配置语法错误会导致Nginx没有正确加载新配置,引发各种奇怪的问题。

备注:内容来源于stack exchange,提问作者nadermx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:58:01