以子页面为参数的nginx反向代理

nginx reverse proxy with subpage as parameter

我会尝试处理我服务器 URL 中 nginx 中的所有请求到我服务器上的另一个服务。该服务不应该从外部可见,所以我将使用 nginx 的反向代理功能。 所以对 nginx 的请求应该是例如:

目前我不需要获取参数,但是如果它们也能工作当然更好,即:

目前我的配置是这样的:

...
    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;
}

好的,谢谢。它正在工作,但不是我希望的那样。还有另外两个问题(其中一个我没有遇到):

  1. 在浏览器的 url 中我也看到了新的 URL (foo.url/?_=page1) 我没有的东西。
  2. 我没想到我需要一些 URL 的正常转发方式,即 http://foo.url/scripts => http://localhost:1234/scripts

最后一个我通过添加修复

  rewrite ^/script(/.*)$ /script/ break;
  rewrite ^/(/.*) /?_= break;

但我不确定这是不是正确的方式,或者是否有类似“全部,但不是这个”的说法