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

端口转发后的Express API遇CORS拦截:缺失Access-Control-Allow-Origin头

问题解决步骤

1. 修复Nginx转发逻辑问题

你的Nginx配置中,try_files $uri $uri/ =404会优先在本地/var/www/html目录查找对应文件,只有当文件不存在时才会转发请求到Express。但/test这类API路由不存在本地文件,会被Nginx直接返回404,根本没传到Express服务,自然不会带上CORS响应头。

修改Nginx的location /配置,移除try_files规则(或调整顺序让代理优先):

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    server_name _;

    location / {
        proxy_pass http://localhost:5000;
        # 若需保留本地静态文件访问,可替换为以下配置
        # try_files $uri $uri/ @proxy;
    }

    # 仅当需要同时访问本地静态文件时添加此块
    # location @proxy {
    #     proxy_pass http://localhost:5000;
    # }
}

2. 验证配置生效

修改后重启Nginx服务:

sudo systemctl restart nginx

用curl测试/test路由,检查响应头是否包含CORS相关字段:

curl -I http://converttopdf.ddns.net/test

如果输出中存在Access-Control-Allow-Origin: *,说明配置已生效。

3. 额外校验项

  • 确保Express的CORS中间件挂载在所有路由定义之前,否则路由不会应用CORS规则:
    const cors = require("cors");
    const corsOptions = {
       origin: "*", 
       credentials:true,          
       optionSuccessStatus:200,
    }
    
    app.use(cors(corsOptions)); // 这行必须在路由定义前执行
    
    // 后续定义API路由
    app.get('/test', (req, res) => {
        res.send('测试响应');
    });
    
  • 检查树莓派防火墙是否开放80端口,确保外部请求能正常到达Nginx。

内容的提问来源于stack exchange,提问作者thething23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:35:30