Nginx proxy_pass 不适用于子页面

Nginx proxy_pass 不适用于子页面

我正在尝试设置一个 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配置中的规则。

相关内容