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

Nginx配置问题:如何将Meteor应用反向代理到example.com/meteor

解决Nginx反向代理Meteor到子路径example.com/meteor的问题

你的配置问题主要出在两个关键地方:server_name不能包含路径,以及没处理Meteor应用的路径前缀和WebSocket需求。我来给你一步步修正:

先说说你原来配置的错误点

  • server_name example.com/meteor www.example.com/meteor 是无效的:Nginx的server_name字段只能指定纯域名,不能带路径后缀,这是你配置失败的核心原因之一。
  • 直接把/代理到3000会和你现有的默认静态文件/PHP服务冲突,导致其他路径无法正常访问。
  • 没有处理路径重写:你的Meteor应用运行在3000端口的根路径,当用户访问example.com/meteor/xxx时,后端收到的请求是/meteor/xxx,但Meteor期望的是/xxx,所以需要重写路径。
  • 缺少WebSocket支持:Meteor依赖WebSocket实现实时功能,原来的配置没有相关头信息,即使代理成功,实时功能也会失效。

正确的配置方案

你需要新建一个针对example.com的server块(和默认的_ server块分开),在里面保留原有静态文件/PHP的处理逻辑,同时添加/meteor路径的代理配置:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    # 保留你原来默认配置里的静态文件和PHP处理
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

    # 重点:Meteor反向代理配置
    location /meteor {
        # 重写路径,去掉/meteor前缀,传给后端Meteor的是正确的根路径请求
        rewrite ^/meteor/(.*)$ /$1 break;

        # 设置代理头,让Meteor能正确识别客户端信息
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 代理到本地3000端口的Meteor应用
        proxy_pass http://127.0.0.1:3000;

        # 支持WebSocket,Meteor实时功能必须的配置
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 延长超时时间,避免长连接被过早断开
        proxy_connect_timeout 7d;
        proxy_send_timeout 7d;
        proxy_read_timeout 7d;
    }
}

额外需要注意的事项

  1. 调整Meteor的ROOT_URL:重启Meteor应用前,设置环境变量让它知道自己运行在/meteor路径下:

    export ROOT_URL=http://example.com/meteor
    # 然后重启你的Meteor应用
    

    这一步很重要,否则Meteor生成的内部链接会指向根路径,导致资源加载错误。

  2. 重启Nginx生效:修改配置后,执行命令重启Nginx:

    sudo systemctl restart nginx
    
  3. 确认默认server块的优先级:你的默认server块(server_name _)已经设置了default_server,所以其他未匹配的域名会走那个配置,example.com会走我们新建的这个server块,不会冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:52:44