我正在尝试设置一个 nginx proxy_pass 来执行以下操作
url 是 example1.com
这需要重定向到 example2.com,但一直说 example1.com。
这对根页面有效,但不适用于子页面。
这是我目前所拥有的
server {
listen 80;
server_name example1.com;
root /home/<route>/public;
rails_env staging;
location / {
proxy_pass http://example2.com/example_one/;
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Methods' "GET, POST, PUT, DELETE, OPTIONS";
add_header 'Access-Control-Allow-Headers' "X-Requested-With, X-Prototype-Version";
add_header 'Access-Control-Max-Age' 1728000;
rewrite ^(/api/)(.*)$ http://example2.com/api/$2 permanent;
}
gzip on;
location ^~ /assets/ {
expires max;
add_header Cache-Control public;
}
# root /home/<root>/public;
# rails_env staging;
}
# }
我们希望所有 example1.com/page 都转到 example2.com/page 上的正确页面,但在 url 中继续显示 example1
答案1
我认为罪魁祸首是你的rewrite
规则:
rewrite ^(/api/)(.*)$ http://example2.com/api/$2 permanent;
在这里您执行了一个显式的操作Redirect
,因此它将改变浏览器中的 URL。
即使您没有/api/
在浏览器中明确调用,我猜测您的页面中也有一些使用它的代码。
因此,如果您想修改proxy_pass
特定/api/
位置的路径,您应该定义它自己的location
块:
location ^~/api/ {
proxy_pass http://example2.com/api/;
}
然后,删除rewrite
配置中的规则。