Apache2端口异常:HTTPS走80而非443,重定向循环求助
解决Apache HTTPS流量走80端口及重定向循环问题
1. 补全虚拟主机核心配置项
你的现有配置缺少ServerName和启用的DocumentRoot,这会导致Apache无法正确匹配虚拟主机,进而让HTTPS请求错误落到80端口的配置中。修改后的配置如下:
80端口虚拟主机(强制HTTPS重定向)
<VirtualHost *:80> ServerName example.net ServerAlias www.example.net # 用mod_rewrite实现更可靠的重定向,适配Cloudflare场景 RewriteEngine On # 识别Cloudflare转发的真实请求协议 RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L] </VirtualHost>
443端口虚拟主机(正确处理HTTPS请求)
<VirtualHost *:443> ServerName example.net ServerAlias www.example.net DocumentRoot /srv/www/wordpress <Directory /srv/www/wordpress> Options FollowSymLinks AllowOverride Limit Options FileInfo DirectoryIndex index.php Require all granted </Directory> <Directory /srv/www/wordpress/wp-content> Options FollowSymLinks Require all granted </Directory> SSLEngine on SSLCertificateFile /path/to/cert SSLCertificateKeyFile /path/to/key SSLCertificateChainFile /path/to/intermediate </VirtualHost>
2. 启用必要的Apache模块
确保mod_ssl和mod_rewrite模块已启用:
sudo a2enmod ssl rewrite sudo systemctl restart apache2
3. 修正WordPress内部配置(解决混合内容问题)
直接编辑wp-config.php文件,添加以下常量强制全站HTTPS:
define('WP_HOME', 'https://example.net'); define('WP_SITEURL', 'https://example.net'); define('FORCE_SSL_ADMIN', true); // 自动将混合内容转为HTTPS define('FORCE_SSL_CONTENT', true); // 适配Cloudflare反向代理,让WordPress识别真实请求协议 if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { $_SERVER['HTTPS'] = 'on'; }
4. Cloudflare配置检查
- 进入Cloudflare控制面板,将SSL/TLS模式设置为严格,确保Cloudflare与源站之间用HTTPS通信。
- 检查「页面规则」是否存在冲突的重定向配置,避免与Apache规则重复触发循环。
5. 验证Apache监听端口
检查/etc/apache2/ports.conf文件,确保包含以下配置:
Listen 80 Listen 443 https
完成以上配置后重启Apache,清空浏览器缓存后测试,即可解决重定向循环和混合内容问题,确保HTTPS流量仅由443虚拟主机处理。
内容的提问来源于stack exchange,提问作者maelstrøm
相关产品推荐
相关产品推荐

