【问题标题】:nginx reverse proxy with subpage as parameter以子页面为参数的 nginx 反向代理
【发布时间】:2020-09-23 20:05:18
【问题描述】:

我将尝试在我的服务器 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/?_=$1;
...

谁能帮帮我?

【问题讨论】:

    标签: nginx reverse-proxy


    【解决方案1】:

    您可以在proxy_pass 语句处理它之前更改URI,方法是在location / 块内添加rewrite...break; 语句。详情请见this document

    例如:

    location / {
        ...
        rewrite ^(/.*)$ /?_=$1 break;
        proxy_pass http://localhost:1234;
    }
    

    【讨论】:

      【解决方案2】:

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

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

      我通过添加修复的最后一个

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-31
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-22
        相关资源
        最近更新 更多