nginx reverse_proxy 从位置到特定 URL

nginx reverse_proxy 从位置到特定 URL

我是 nginx 新手。我有 nginx 和一个监听端口 :5000 的 python webserver。

我想做类似 www.example.com/berlin 的事情并想从 127.0.0.1/?lat= 获取数据柏林&lon=柏林

我不知道如何设置请求位置时使用的查询字符串。

    server {
        listen 80;

        location / {
               proxy_pass http://127.0.0.1:5000/;
        }

        location /berlin/ {
                proxy_pass http://127.0.0.1:5000/?lat=52.5185931&lon=13.3941181/;
        }
    }

答案1

尝试这个:

server {
    listen 80;

    location = / {
           proxy_pass http://127.0.0.1:5000/;
    }

    location ~ ^\/(.*)$ {
            proxy_pass http://127.0.0.1:5000/?lat=$1&lon=$1;
    }
}

如果请求 example.com/berlin,第二个位置块将捕获“berlin”,然后将其作为查询参数传递给网络服务器。

但请注意,这似乎是一个非常糟糕的主意,因为这会匹配任何未请求您的主页的内容(/)。因此,即使请求 example.com/index.html 也会作为 /?lat=index.html&lon=index.html 传递给网络服务器。您可以通过使用某种前缀(如 example.com/city/berlin)或改进第二个位置块的正则表达式以不匹配某些内容(如 index.html)来防止这种情况

相关内容