我有两台服务器:
我有两个上游目的地,每个服务器上有一个:
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。
我无法弄清楚如何debugging这个。 我看到服务器A的Nginx错误日志中的readv() not ready (11: Resource temporarily unavailable) ,但我不知道这是否是相关的。 我不知道如何跟踪服务器B上的请求,因为部署在Docker容器中。 有什么build议么?
在收到@zodern的一些指导之后 ,我已经意识到最初对/broken请求是正确处理的,但是Meteor并没有为所有的js和css提供单一的响应。 它提供一个html文件,然后将90个其他请求返回给服务器A.处理所有这些请求的位置块是没有修饰符和根path/的位置块,它将所有内容发送到本地上游应用程序。 所以我不确定是否可以根据请求的path在不同的服务器上运行两个不同的Meteor应用程序。 😕