这是我的配置:
server {
listen 80;
server_name ~^(?<sb>.+)\.a\.b\.c\.com$;
access_log /data/logs/nginx/tas.access.log main;
location / {
proxy_intercept_errors on;
proxy_pass http://b.c/a/$sb/;
proxy_set_header Host $host;
proxy_redirect off;
}
}
并且浏览器报告许多重定向。
如果您说要代理到本地主机:8082,则需要在proxy_pass行中这样说:
server {
listen 80;
server_name ~^(?<sb>.+)\.a\.b\.c\.com$;
access_log /data/logs/nginx/tas.access.log main;
location / {
proxy_intercept_errors on;
proxy_pass http://localhost:8082/a/$sb/;
proxy_set_header Host $host;
proxy_redirect off;
}
}
没有所有信息,很难猜测正在发生什么。根据评论,我猜您正在使用虚拟主机,以便上游站点也由相同的nginx提供服务。所以这行是问题所在:
proxy_set_header Host $host;
nginx变量$ host指向当前的Host标头(与server_name匹配)。因此,如果您再次为上游设置相同的主机头,则nginx将在上方找到相同的位置块,因为nginx依赖于Host头来查找正确的服务器。因此重定向循环。
设置
proxy_set_header Host your_upstream_server_name
然后将修复它。