给自己的网站配置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 浏览器还会读取对应的证书 如果不配置证书或者证书过期或者。。。浏览器会在访问以后会看到类似这样的提示

QQ截图20190325151937.png

虽然也能访问 但是见到这样的提示基本上就没什么访问的欲望了

申请好证书以后,你可以下载证书并放到服务器上,至于放在哪随意,只要你自己找得到就行

腾讯云下载的证书 会根据你服务器的不同分成不同的文件夹只要找对应的就行

追加以下代码到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其他的框架 判断请求类型来获取参数 那么这样的请求将获取不到任何参数

fbc381cb39dbb6fdd16e72ca0424ab18972b373a.jpg

5c3d6b600c3387441823bb905c0fd9f9d62aa016.jpg

这是我之前重构的时候遇到的问题

我的解决办法是修改重定向规则 将默认302重定向改为307

  RewriteEngine on // 重写地址
  RewriteCond   %{HTTPS} !=on // 判断是否为https
  RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R=307] // 重写规则

修改以后请求就会保持原来的类型和参数

2d5debf81a4c510fed9fb4f46d59252dd52aa59a.jpg

3436070828381f30e876db47a4014c086f06f08e.jpg