以子页面为参数的nginx反向代理
nginx reverse proxy with subpage as parameter
我会尝试处理我服务器 URL 中 nginx 中的所有请求到我服务器上的另一个服务。该服务不应该从外部可见,所以我将使用 nginx 的反向代理功能。
所以对 nginx 的请求应该是例如:
- https://foo.url => http://localhost:2424
- https://foo.url/page1 => http://localhost:2424?_=/page1
- https://foo.url/sub1/page2 => http://localhost:2424?_=/sub1/page2
目前我不需要获取参数,但是如果它们也能工作当然更好,即:
- https://foo.url/page1?xxx=abc => http://localhost:2424?_=/page1&xxx=abc
目前我的配置是这样的:
...
location / {
gzip off;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://localhost:1234/;
proxy_set_header Proxy "";
...
当然不要重定向子页面。但以下也不起作用:
...
location /(.*) {
# location ~ /(.*) { # I tried this too
...
proxy_pass http://localhost:1234/?_=;
...
谁能帮帮我?
您可以在 proxy_pass
语句处理之前更改 URI,方法是在 location /
块中添加 rewrite...break;
语句。有关详细信息,请参阅 this document。
例如:
location / {
...
rewrite ^(/.*)$ /?_= break;
proxy_pass http://localhost:1234;
}
好的,谢谢。它正在工作,但不是我希望的那样。还有另外两个问题(其中一个我没有遇到):
- 在浏览器的 url 中我也看到了新的 URL (foo.url/?_=page1) 我没有的东西。
- 我没想到我需要一些 URL 的正常转发方式,即 http://foo.url/scripts => http://localhost:1234/scripts
最后一个我通过添加修复
rewrite ^/script(/.*)$ /script/ break;
rewrite ^/(/.*) /?_= break;
但我不确定这是不是正确的方式,或者是否有类似“全部,但不是这个”的说法
我会尝试处理我服务器 URL 中 nginx 中的所有请求到我服务器上的另一个服务。该服务不应该从外部可见,所以我将使用 nginx 的反向代理功能。 所以对 nginx 的请求应该是例如:
- https://foo.url => http://localhost:2424
- https://foo.url/page1 => http://localhost:2424?_=/page1
- https://foo.url/sub1/page2 => http://localhost:2424?_=/sub1/page2
目前我不需要获取参数,但是如果它们也能工作当然更好,即:
- https://foo.url/page1?xxx=abc => http://localhost:2424?_=/page1&xxx=abc
目前我的配置是这样的:
...
location / {
gzip off;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://localhost:1234/;
proxy_set_header Proxy "";
...
当然不要重定向子页面。但以下也不起作用:
...
location /(.*) {
# location ~ /(.*) { # I tried this too
...
proxy_pass http://localhost:1234/?_=;
...
谁能帮帮我?
您可以在 proxy_pass
语句处理之前更改 URI,方法是在 location /
块中添加 rewrite...break;
语句。有关详细信息,请参阅 this document。
例如:
location / {
...
rewrite ^(/.*)$ /?_= break;
proxy_pass http://localhost:1234;
}
好的,谢谢。它正在工作,但不是我希望的那样。还有另外两个问题(其中一个我没有遇到):
- 在浏览器的 url 中我也看到了新的 URL (foo.url/?_=page1) 我没有的东西。
- 我没想到我需要一些 URL 的正常转发方式,即 http://foo.url/scripts => http://localhost:1234/scripts
最后一个我通过添加修复
rewrite ^/script(/.*)$ /script/ break;
rewrite ^/(/.*) /?_= break;
但我不确定这是不是正确的方式,或者是否有类似“全部,但不是这个”的说法