我正在尝试学习如何配置 Nginx 代理。来自外部 (www.external.com) 的所有请求都应发送到内部服务器 10.10.10.16:2080,除了 www.external.com/nagios 请求应发送到内部 10.10.10.18。
我的位置块如下所示:
location ~* / {
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Accept-Encoding "";
proxy_pass http://10.10.10.16:2080;
}
# # nagios server
location ~* /nagios/ {
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_buffering off;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Accept-Encoding "";
proxy_pass http://10.10.10.18;
}
第一个位置似乎工作正常。但是,对www.external.com/nagios的任何请求都会将浏览器发送到永恒的牧场。当然,10.10.10.18 /nagios已经过测试并且工作正常。我错过了什么?
您应该了解 Nginx 如何处理位置。请参阅此旧 wiki或新wiki或此博客。
摘要:
在您的情况下,这里是请求处理的逻辑伪代码:
该逻辑可以转换为 nginx 配置,如下所示。
编辑:根据 Tero Kilkanen 下面的评论,我们可以在这种情况下删除正则表达式匹配,从而节省一些 CPU 资源。在这种情况下,我们只使用规则
Low priority prefix