我们有3台服务器。 一个是前端代理,然后是内部虚拟机。
前端/启用站点/默认
server { listen 80; rewrite ^(.*) https://$host$1 permanent; location / { proxy_pass http://10.10.0.56; 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 /beta { proxy_pass http://10.10.0.63; 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; } }
现在vm 10.10.0.63是新的。 我们想要并行运行两个系统。
新vm中有这样的老规矩。
10.10.0.63/site-enabled/default
server { listen 80; client_max_body_size 100M; server_name localhost 127.0.0.1; server_name_in_redirect off; location /api { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:5050; proxy_redirect default; }
事情是,有没有办法访问http://example.com/beta/api而不需要我们改变10.10.0.63/site-enabled/default的规则? 也就是说,我们不需要从原始location /api写入location /beta/api location /api 。
我们可以用nginx做到吗? 我们将在几个星期内摆脱旧的系统,经历所有的麻烦来改变url(我们可能需要在源代码中编辑许多地方!)似乎是愚蠢的。
谢谢。
我仍然没有一个很好的解决方法,但我看了这个如何快速和容易地删除Nginx中的一部分与HttpRewriteModule?
我剥去了beta 。 它看起来像在工作。
基本上我在这里告诉advie: 如何快速和容易地用HttpRewriteModule删除Nginx中的一部分URL?
假设旧url是http://example.com/api并且您希望在nginx中保持相同的configuration,但是新的vm使用http://example.com/beta/api那么您可以重复使用相同的configuration,添加一个rewrite 。
所以在启用网站,我有这个
server { listen 80; rewrite ^/beta(.*)$ $1 last; # strip out the beta ..... location /api { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:5050; proxy_redirect default; } .... }