给自己的网站配置https时 需要在服务器上配置ssl证书,这个ssl证书有免费的也有收费,对于个人博客,免费的证书足矣。
域名备案以后就可以申请对应的证书不出意外5分钟之内就有结果,之后上传证书到服务器,设置好配置文件就行。
找到服务器的配置文件
我用的是apache,就找到目录里的httpd-vhosts.conf
文件 然后打开
linux默认安装的话路径应该是conf/extra/httpd-vhosts.conf
如果你使用的服务器厂商提供给你的一键镜像之类的,那这个配置文件可能就不在默认的位置 根据镜像提供的文档来找就行
修改httpd-vhosts.conf
http部分
打开以后 apache默认对本地访问 会有配置
以windouws wamp为例 基本上都是一个样吧
# Virtual Hosts
#
<VirtualHost *:80>
ServerName localhost
ServerAlias localhost
DocumentRoot "${INSTALL_DIR}/www"
<Directory "${INSTALL_DIR}/www/">
Options +Indexes +Includes +FollowSymLinks +MultiViews
AllowOverride All
#Require local
Require all granted
</Directory>
</VirtualHost>
默认设置80端口 默认地址是localhost 默认路径是www
下面可以设置访问权限
复制一份追加在原来的代码后面
按照自己的网站修改对应的参数就可以了
https部分
https的端口是443 浏览器还会读取对应的证书 如果不配置证书或者证书过期或者。。。浏览器会在访问以后会看到类似这样的提示
虽然也能访问 但是见到这样的提示基本上就没什么访问的欲望了
申请好证书以后,你可以下载证书并放到服务器上,至于放在哪随意,只要你自己找得到就行
腾讯云下载的证书 会根据你服务器的不同分成不同的文件夹只要找对应的就行
追加以下代码到httpd-vhosts.conf
apache需要配置3个文件 不需要知道这3个文件是什么意思 只要照着配置就行了记得删掉注释的部分 修改路径,域名,和3个文件的路径即可
<VirtualHost *:443>
DocumentRoot "/var/www/html" // 代码的路径
ServerName www.domain.com // 域名
SSLEngine on // SSL
SSLCertificateFile /usr/local/apache/conf/2_www.domain.com_cert.crt // SSL证书文件
SSLCertificateKeyFile /usr/local/apache/conf/3_www.domain.com.key // SSL证书密钥文件
SSLCertificateChainFile /usr/local/apache/conf/1_root_bundle.crt // SSL证书主文件
</VirtualHost>
这是最基础的部分 你也可以配置记录日志 配置完以后就可以用https去访问你的网站
如果你的证书没问题的话,浏览器https访问你的网站看上去是不会和http有什么区别的。
http自动跳转到https
一般设置https以后不会再去访问http的链接,所以就会设置自动跳转到https
其实只需要在http的那部分里面添加以下代码
RewriteEngine on // 重写地址
RewriteCond %{HTTPS} !=on // 判断是否为https
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R] // 重写规则
如果是https 就会正常访问 如果是http 会302重定向到https 再正常访问
保持请求类型和请求参数
如果你是浏览器访问 一般为get方式
如果你是表单post方式提交 那么就是post请求
这样如果按照上面的方式设置当表单post请求到http的地址以后 重定向到https就是get请求 这样就失去了请求的参数 如果你使用tp5或者laravel其他的框架 判断请求类型来获取参数 那么这样的请求将获取不到任何参数
这是我之前重构的时候遇到的问题
我的解决办法是修改重定向规则 将默认302重定向改为307
RewriteEngine on // 重写地址
RewriteCond %{HTTPS} !=on // 判断是否为https
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R=307] // 重写规则
修改以后请求就会保持原来的类型和参数
0 条评论