我在 nginx 配置方面遇到了问题。如果用户代理是“robot”,则代理会传递到另一个端口,并将正确的 uri 设置为参数
例如:有两个服务 localhost:5000 和 localhost:6000 端口,所有非机器人都传递到 5000,机器人都传递到 6000,url 如下:
normal https://test.page/test/test -> http://localhost:5000/test/test
robot https://test.page/test/test -> http://localhost:6000/Page/Get?url=https://test.page/test/test
我尝试这样做:
if ( $http_user_agent ~ 'robot' ) {
set $request_uri "/Page/Get?url=https://test.page$request_uri";
proxy_pass http://localhost:6000;
}
if ( $http_user_agent !~ 'robot' ) {
proxy_pass http://localhost:5000;
}
但机器人得到了 404
答案1
map
是执行这些条件操作的更好方法。http
在 nginx 配置级别中添加以下内容:
map $http_user_agent $upstream {
~robot "localhost:6000/Page/Get?url=https://test.page$request_uri";
default localhost:5000$request_uri;
}
然后用作$upstream
目标:
proxy_pass http://$upstream;