Forge环境Nginx子域名重定向到外部域名配置问题咨询
Nginx子域名重定向配置解答
关于是否需要添加listen 80;规则
- 必须添加。80端口是HTTP协议的默认监听端口,如果你的server块仅配置了443端口的SSL监听,所有访问
http://shop.example.com的请求要么被其他默认server块捕获返回错误内容,要么直接无法建立连接,完全不会触发你配置的重定向逻辑。 - 如果需要兼容IPv6访问,还需要同步添加
listen [::]:80;配置,和你现有443端口的IPv6监听规则对应。
关于你写的重定向配置正确性
你当前的配置存在两处明显错误,无法正常生效:
server_name参数不支持携带协议头。你写的server_name https://shop.example.com;是错误写法,该参数仅用于匹配请求头中的域名,不需要加https://前缀,正确写法为server_name shop.example.com;。- 缺少HTTPS请求对应的SSL证书配置。你现有配置已经监听了443 ssl端口,如果不在server块中配置对应域名的SSL证书(可以复用服务器上已有的泛域名证书),用户访问
https://shop.example.com时会在SSL握手阶段直接报错,根本无法收到301重定向响应。
另外你原有配置仅监听了80端口,完全没有处理443端口的HTTPS请求,会导致HTTPS访问无法跳转。
可直接使用的正确配置示例
# 处理80端口HTTP请求 server { listen 80; listen [::]:80; server_name shop.example.com; # 携带$request_uri可将原请求的路径、参数同步跳转到新域名,不需要可删除 return 301 https://example2.com$request_uri; } # 处理443端口HTTPS请求 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name shop.example.com; # 替换为服务器上实际的SSL证书、私钥路径,Forge部署环境可直接复用同泛域名下其他站点的证书路径 ssl_certificate /etc/nginx/ssl/shop.example.com/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/shop.example.com/privkey.pem; return 301 https://example2.com$request_uri; }
配置生效注意事项
- 修改完配置后先执行
nginx -t命令检查语法是否存在错误,确认无误后再执行nginx -s reload重载Nginx服务让配置生效。 - 如果不需要保留原请求的路径和参数,把
$request_uri删掉即可,所有请求都会直接跳转到新域名的根路径。
内容的提问来源于stack exchange,提问作者shorn
相关产品推荐
相关产品推荐

