我试图配置nginx代理将请求传递给另一个服务器,只有当$ request_body变量匹配特定的正则表达式时.
我现在的问题是,我不知道如何准确配置此行为.
我现在正处于这个问题:
server {
listen 80 default;
server_name test.local;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
if ($request_body ~* ^(.*)\.test) {
proxy_pass http://www.google.de;
}
root /srv/http;
}
}
Run Code Online (Sandbox Code Playgroud)
但这里的问题是,根始终是上手.代理不会以任何方式传递.
关于如何实现这一目标的任何想法?
提前致谢
use*_*254 16
试试这个:
server {
listen 80 default;
server_name test.local;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
if ($request_body ~* ^(.*)\.test) {
proxy_pass http://www.google.de;
break;
}
root /srv/http;
}
}
Run Code Online (Sandbox Code Playgroud)
Nginx 路由基于与请求 URI 匹配的位置指令。解决方案是临时修改它,以便将请求转发到不同的端点。
server {
listen 80 default;
server_name test.local;
if ($request_body ~* ^(.*)\.test) {
rewrite ^(.*)$ /istest/$1;
}
location / {
root /srv/http;
}
location /istest/ {
rewrite ^/istest/(.*)$ $1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://www.google.de;
}
}
Run Code Online (Sandbox Code Playgroud)
该if
条件只能安全地在 Nginx 中使用,它是其一部分的重写模块。在这个例子中。rewrite
请求 URI的前缀为istest
。
该location
块要优先最接近的匹配。任何匹配的/istest/
都将进入第二个块,在转发到上游代理之前,该块使用另一个块从请求 URI 中rewrite
删除/istest/
。
归档时间: |
|
查看次数: |
31203 次 |
最近记录: |