Nginx位置块与反向代理打破meteor

我有两台服务器:

  • (A)反向Nginx代理,在内部或B路由请求
  • (二)meteor部署使用meteor1.2.11版(Nginx里面的Docker)

我有两个上游目的地,每个服务器上有一个:

upstream remote-app { server 123.45.67.890:8080; } upstream local-app { server localhost:7000; } 

如果我使用单独的服务器块,一切工作正常。

 server { listen 80; server_name local.* local.myapp.com; access_log /var/log/nginx/local.myapp.access.log; error_log /var/log/nginx/local.myapp.error.log debug; error_page 404 /4xx.html; error_page 500 502 503 504 /5xx.html; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://local-app; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } server { listen 80; server_name remote.* remote.myapp.com; access_log /var/log/nginx/remote.myapp.access.log trace; error_log /var/log/nginx/remote.myapp.error.log debug; error_page 404 /4xx.html; error_page 500 502 503 504 /5xx.html; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://remote-app; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; add_header Cache-Control no-cache; } } 

但是我需要有条件地路由,而不仅仅是子域。 所以我尝试添加一个位置块来将一些本地stream量redirect到远程服务器。

 server { listen 80; server_name local.* local.myapp.com; access_log /var/log/nginx/local.myapp.access.log; error_log /var/log/nginx/local.myapp.error.log debug; error_page 404 /4xx.html; error_page 500 502 503 504 /5xx.html; location = /broken { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://remote-app; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://local-app; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } 

现在,当我访问http://local.myapp.com/broken ,我得到一个空白的屏幕,出现很多控制台错误:

伴随着空白屏幕的控制台错误

SyntaxError: Unexpected token <似乎是浏览器尝试从html文件中读取javascript。

meteor_runtime_config.js是html吗?

我无法弄清楚如何debugging这个。 我看到服务器A的Nginx错误日志中的readv() not ready (11: Resource temporarily unavailable) ,但我不知道这是否是相关的。 我不知道如何跟踪服务器B上的请求,因为部署在Docker容器中。 有什么build议么?

在收到@zodern的一些指导之后 ,我已经意识到最初对/broken请求是正确处理的,但是Meteor并没有为所有的js和css提供单一的响应。 它提供一个html文件,然后将90个其他请求返回给服务器A.处理所有这些请求的位置块是没有修饰符和根path/的位置块,它将所有内容发送到本地上游应用程序。 所以我不确定是否可以根据请求的path在不同的服务器上运行两个不同的Meteor应用程序。 😕