概述
在某网络论坛上遇到需要Nginx泛域名反向代理且反向代理的后端域名前缀需与访问的域名前缀相同。
需要通过访问abc.test1.lolicp.com
(abc为随机值)来实现反向代理后端HOST为abc.test2.lolicp.com
(域名前缀访问一致)
处理办法
办法一
直接通过server_name匹配域名前缀信息。
server {
listen 80;
server_name ~^(?<subdomain>.+).test1.lolicp.com$;
index index.html;
# 缓存静态页面
location ~ \.html$ {
# 配置后端服务器
proxy_pass http://127.0.0.1;
proxy_redirect off;
# 回源HOST
proxy_set_header Host $subdomain.test2.lolicp.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 隐藏由proxy响应客户端时指定的首部;
proxy_hide_header Cache-Control ;
}
}
办法二
通过if判断配置变量
server {
listen 80;
server_name *.test1.lolicp.com;
index index.html index.htm index.php;
# 定义域名前缀
if ($host ~ "^(.*)\.test1\.lolicp\.com$") {
set $subdomain $1;
}
# 缓存静态页面
location ~ \.html$ {
# 配置后端服务器
proxy_pass http://127.0.0.1;
proxy_redirect off;
# 回源HOST
proxy_set_header Host $subdomain.test2.lolicp.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 隐藏由proxy响应客户端时指定的首部;
proxy_hide_header Cache-Control ;
}
}
重启Nginx
[root@localhost ~]# systemctl restart nginx