使用NGINX作为在10.1.2.15:9002
上运行的负载均衡器,我需要将http://10.1.2.15:9002/proxy.stream?opt=1
重写为http://10.1.2.15:9002/app/proxy.stream?opt=1
。
以下是我的nginx.conf文件中的位:
http {
upstream app_cluster {
server 10.1.2.23:8080;
server 10.1.2.25:8080;
}
server {
listen 9002 default_server;
location /app/ {
proxy_pass http://app_cluster/;
}
location ~ ^/proxy.stream(.*)$ {
rewrite ^(.*)$ /app/$request_uri last;
}
}
}
顺便说一句,我可以将rewrite
行替换为return 401
(例如),我可以看到使用Chrome开发者工具返回的401 HTTP状态,因此我知道正则表达式是匹配的。我只是无法正确地重写URI。实际上,我只在开发人员工具中看到原始请求的状态为406,因此我怀疑我的rewrite
语法出现了问题。
有没有人看到此配置有什么问题?
答案 0 :(得分:1)
在$request_uri
语句的 replacement 字符串中使用rewrite
是有问题的,因为它尚未规范化并且还包含查询字符串,默认情况下为{{ 1}}会再次追加。
此外,您的替换字符串包含rewrite
,因为您要附加已经有前导//
的URI。
正则表达式 /
不是必需的,因为前缀或完全匹配location
就足够了,location
处理效率更高。有关详情,请参阅this document。
例如:
nginx
答案 1 :(得分:0)
使用正则表达式中的匹配部分而不是$request_uri
rewrite ^(.*)$ /app/$1 last;