我有两台机器,它们由一台主机提供服务。主机定义了第一台机器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/
到 url 路径,以便我可以通过http://public_domain/dev/.....
每台机器都运行着多个应用程序。
有了这个新规则,我可以继续,http://public_domain/dev/app1/
但该页面上的所有链接都将指向例如http://public_domain/app1/login
服务器#1。
还有什么问题?谢谢。
我应该设置一个新的服务器子句吗?如果这样做,我是否需要打开不同的端口,因为这两个location
块位于同一个服务器子句内并监听 80。
谢谢。
答案1
问题是您的代理密码指令。这告诉 proxy_pass 将与位置 (/dev) 匹配的 URL 部分替换为提供的路径 (/)。它不会影响您的位置 /,因为它将 / 替换为 /。如果您只是将当前行替换为
proxy_pass http://10.10.0.59;
那么它在将其传递给后端之前不会处理该 url。
答案2
更新:我的答案是错误的。但是,我把它留在这里,这样看到的人就不会犯我的错误!
location /
block 可能应该是任何的最后一个块server
。在您的配置中,它位于最前面。这可能是您所描述的问题的原因。因此,请尝试以下操作...
服务器 { 服务器名称本地主机 127.0.0.1; 服务器名称_in_redirect 关闭; 位置/dev { 代理密码 http://10.10.0.59/; ......... } 地点 / { 代理密码 http://10.10.0.56/; ........