Nginx子域名HTTP无法重定向至HTTPS问题求助
排查Nginx子域名HTTP转HTTPS重定向失效问题
嘿,我一眼就看到你的配置里的核心问题了——你把return指令错误地塞进了server_name那一行,这完全不符合Nginx的语法规则,导致重定向逻辑根本没被正确解析执行。
错误原因分析
在你的第一个server块里,这行代码是错误的:
server_name sub.example.com return 301 https://sub.example.com$request_uri;
server_name指令的作用仅仅是指定当前server块匹配的域名,return是独立的Nginx指令,必须单独占一行,不能跟在server_name后面混写。
修正后的配置
把80端口的server块改成下面这样就可以正常触发永久重定向了:
server { listen 80; listen [::]:80; server_name sub.example.com; # 单独写return指令,实现HTTP到HTTPS的永久重定向 return 301 https://sub.example.com$request_uri; }
额外注意事项
- 检查配置语法完整性:你提供的443端口server块代码不完整(结尾没有闭合,FastCGI的配置也没写完),虽然这不会影响重定向,但会导致PHP服务无法正常运行。建议补充完整的PHP处理配置,比如:
# 放在443端口server块的末尾 location ~ \.php$ { include snippets/fastcgi-php.conf; # 替换成你服务器上实际的PHP-FPM sock路径,比如php8.1-fpm.sock fastcgi_pass unix:/run/php/php8.1-fpm.sock; }
- 验证配置并重启Nginx:修改配置后,先执行
nginx -t检查语法是否正确,确认输出test is successful后,再重启Nginx服务:
# Debian/Ubuntu系统 systemctl restart nginx # CentOS/RHEL系统 systemctl restart nginx
- 确认端口开放:确保Linode实例的防火墙(比如ufw、iptables)已经开放80和443端口,否则HTTP请求根本无法到达Nginx,自然不会触发重定向。
内容的提问来源于stack exchange,提问作者Illes Peter
相关产品推荐
相关产品推荐

