Nginx单个子域名重定向问题求助
解决Nginx指定子域名重定向问题
问题根源
你的现有配置存在两个核心问题:
- 第一个未指定
listen端口的server块会被Nginx当作默认匹配规则之一,干扰精确子域名的匹配逻辑 - HTTPS
server块中,重定向规则目标URL不完整(缺少.com),且location /块的存在容易引发规则执行顺序混淆
修正后的配置
1. 完整配置代码
# 处理该子域名的HTTP请求,直接重定向到外部URL server { listen 80; server_name foo-bar.test.com.au; rewrite ^ https://externalURL.com permanent; } # 处理该子域名的HTTPS请求,执行重定向 server { listen 443 ssl http2; server_name foo-bar.test.com.au; # 永久重定向(301),临时重定向可改用redirect(302) rewrite ^ https://externalURL.com permanent; # SSL相关配置保留 ssl_certificate /etc/ssl/foo-bar.crt; ssl_certificate_key /etc/ssl/foo-bar.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_session_timeout 30m; # 重定向后不会执行到以下内容,可直接删除 # root /opt/nginx-static/foo-bar; # location / { # root /opt/nginx-static/foo-bar; # index index.html foo-bar.html; # autoindex on; # } }
2. 关键调整说明
- 删除了无
listen端口的冗余server块,避免默认匹配干扰 - 补全了重定向目标URL的
.com后缀,确保跳转地址正确 - 为HTTP(80端口)单独配置
server块,覆盖该子域名的所有访问场景 - 移除了不必要的
root和location配置,因为重定向会直接返回响应,不会执行后续内容
验证步骤
- 检查Nginx配置语法:
nginx -t
- 重启Nginx生效:
systemctl restart nginx
- 测试重定向效果:
curl -I https://foo-bar.test.com.au
返回结果应包含Location: https://externalURL.com,且其他子域名不受影响
内容的提问来源于stack exchange,提问作者user20444549
相关产品推荐
相关产品推荐

