这是我的配置:
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;
}
}
和浏览器报告许多重定向。
答案 0 :(得分:0)
如果你想说代理到localhost: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;
}
}
答案 1 :(得分:0)
如果没有所有信息,很难猜出发生了什么。根据评论,我的猜测是你正在使用虚拟主机,以便上游站点也由相同的nginx提供服务。所以这一行是问题所在:
proxy_set_header Host $host;
nginx变量$ host指向当前的Host头(与server_name匹配)。因此,如果再次为上游设置相同的主机头,则nginx将在上面找到相同的位置块,因为nginx依赖于Host头来查找正确的服务器。因此重定向循环。
设置
proxy_set_header Host your_upstream_server_name
然后会修复它。