我有两台机器,它们由一台主机提供服务。 主机定义了第一台机器10.10.0.59
server { listen 80; client_max_body_size 200M; server_name localhost 127.0.0.1; server_name_in_redirect off; location / { proxy_pass http://10.10.0.59; proxy_redirect default; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~ /dev/ { proxy_pass http://10.10.0.56; proxy_redirect default; proxy_set_header Host $http_host; rewrite /dev/(.*) /$1 break; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
dev
机器是10.19.9.56
,我需要(很有可能) /dev/
到URLpath,以便我可以浏览它通过http://public_domain/dev/.....
每台机器都有几个应用程序在运行。
有了这个新的规则,我可以继续http://public_domain/dev/app1/
但该页面上的所有链接将指向,例如, http://public_domain/app1/login
这是服务器#1。
还有什么不对? 谢谢。
我应该设置一个新的服务器条款吗? 如果我这样做,我需要打开一个不同的端口,因为这两个location
块在同一个服务器子句中,并在80上侦听。
谢谢。
这个问题是跟随你的proxy_pass指令。 这就告诉proxy_pass用所提供的path(/)replace与位置(/ dev)匹配的url部分。 它不会影响你的位置/因为它正在取代/与/。 如果你只是用你的当前行代替
proxy_pass http://10.10.0.59;
然后在将它传递到后端之前不会处理这个url。
更新 :我的回答是错误的。 但是,我要把它留在这里,这样任何看到这个的人都不会犯我的错!
location /
块应该可能是任何server
的最后一个块。 在你的configuration中,它是第一个。 这可能是你描述的问题的原因。 所以,请尝试以下…
服务器{ server_name localhost 127.0.0.1; server_name_in_redirect off; 位置/ dev { proxy_pass http://10.10.0.59/; ......... } 位置 / { proxy_pass http://10.10.0.56/; ........