windows+apache2开启SSL以及80端口强制跳转SSL访问的方法

申请证书

推荐Let’s Encrypt(免费证书的有效期为3个月,但提供了自动更新证书的功能),也可以用阿里云(免费证书有效期1年,目前是手动更新)

开启ssl模块

首先确保apache开启了LoadModule ssl_module modules/mod_ssl.so

配置443端口

再参考官方文档的一段内容:

Listen 443
<VirtualHost *:443>
    DocumentRoot "项目入口文件目录"
    ServerName 域名
    SSLEngine on
    SSLCertificateFile "路径/文件名.cert"
    SSLCertificateKeyFile "路径/文件名.key"
</VirtualHost>

在apache的vhosts.conf中添加以上代码,重启apache

配置80端口跳转443

这里直接上代码:

<VirtualHost *:80>
    RewriteEngine on
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule ^/?(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
    ServerName 域名
</VirtualHost>

告诉apache将该域名下80端口的所有请求跳转到443,重启apache

至此配置完成 在ubuntu环境下配置基本一样,开启apache ssl模块支持使用sudo a2enmod ssl,然后重启service apache2 restart

补充:
后面在一个微信项目中发现以上做法的一个问题:
安卓手机在使用微信内置浏览器QQ浏览器X5内核提供技术支持访问可能会出现页面空白的情况,而在PC端的调试工具和IOS以及其他浏览器上未发现该问题
解决方法:修改虚拟机配置如下:

Listen 443
<VirtualHost *:443>
    DocumentRoot "项目入口文件目录"
    ServerName 域名
    SSLEngine on
    SSLCertificateFile "路径/文件名.cert"
    SSLCertificateKeyFile "路径/文件名.key"
    SSLCertificateChainFile "路径/文件名.pem"
</VirtualHost>

其实就是添加了一行SSLCertificateChainFile