网站初步实现https访问

Guooo
2017-06-18 / 0 评论 / 2,218 阅读 / 正在检测是否收录...

2017/09/24 : 对了,开头补充一点,一般网站访问https大多是使用301永久跳转的,具体实现规则在下面也有。
可以忽视上面那句话~~


今天服务器一度崩溃,因为一个字母
因为在朋友那里看到他已经升级https,所以我也准备把网站从http改成https,看起来不过就加一个字母而已

有点麻烦,不过好在初步完成了
完成

方法

  1. 首先要去某个地方申请证书,小网站申请免费的就好,我是在腾讯云申请个免费的。
    其实你也可以自建证书,只不过可能会显示你的证书不安全。
  2. 申请完证书之后就是安装证书,腾讯云文档写的还是比较清楚的,自己看一下基本上都能过。
  3. 然后去下载证书,把你下载的证书解压放到你的服务器上,比如放在/etc/http/conf/ca/下,然后按照这个,不管是Apache、nginx还是IIS都有对应的方法。
  4. 踩坑

接下来是坑(敲黑板)

1. 原谅我一直不知道服务器使用https是一定要用443端口的,所以80要改成443

2. web代理软件需要打开重定向支持,没有对应模块(mod_sslopenssl)的话需要自行安装或者编译安装,方法去百度 google

3. 配置网站自动跳转HTTPS

在访问网站的时候一般不会手动加https://,所以需要用Apache重定向功能让http的访问流量自动转移到https,所以就要用到 .htaccess这个文件了,具体使用方法参考上一条

或者如果你也是使用Apache并且不想用.htaccess文件的话,可以用这种方法:
在你原本的虚拟主机配置上加一句话 :Redirect permanent / note.coccoo.cc:443
现在你的站点看起来就像这样:

<VirtualHost *:80>
        ServerName note.coccoo.cc
        Redirect permanent / note.coccoo.cc:443
        DocumentRoot "/home/wwwroot/typecho"
</VirtualHost>

或者也可以直接在站点加上如下代码

那么你的站点就像这样

<VirtualHost *:80>
        ServerName note.coccoo.cc
        DocumentRoot "/home/wwwroot/typecho"
        RewriteEngine on
        RewriteCond   %{HTTPS} !=on
        RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]
</VirtualHost>

让你的站点下所有的链接都跳转到443端口,然后再配置一个443端口的虚拟主机就可以了
现在我的配置就像这样了

<VirtualHost *:80>
        ServerName note.coccoo.cc
        Redirect permanent / note.coccoo.cc:443
        DocumentRoot "/home/wwwroot/typecho"
</VirtualHost>

<VirtualHost *:443>
        ServerName note.coccoo.cc:443
        DocumentRoot "/home/wwwroot/typecho"
        SSLEngine on
        SSLCertificateFile /etc/httpd/conf/extra/note/2_note.coccoo.cc.crt
        SSLCertificateKeyFile /etc/httpd/conf/extra/note/3_note.coccoo.cc.key
        SSLCertificateChainFile /etc/httpd/conf/extra/note/1_root_bundle.crt
        <Directory "/home/wwwroot/typecho">
            AllowOverride All
        </Directory>
</VirtualHost>

4. 在使用https的时候,正常情况下在网站域名前会出现安全字样,如下

安全

但是如果你的网站中有任何文件(包括但不限于图片、js、css等)不是通过https访问的,就会在域名前出现一个感叹号,如下
感叹号

5. 我的部分.htaccess配置

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{SERVER_PORT} !^443$
#RewriteCond %{REQUEST_URI} !^/test.php    
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
</IfModule>
以上规则的意思是,如果访问的url的端口不是443,且访问页面不是test.php,则应用RewriteRule这条规则。
这样便实现了:访问了 http://localhost/index.php 或者 http://localhost/admin/index.php 等页面的时候会自动跳转到 https://localhost/index.php 或者 https://localhost/admin/index.php

解释下
%{SERVER_PORT} —— 访问端口
%{SERVER_NAME} —— 比如如果url是 http://localhost/test.php,则是指 localhost
%{REQUEST_URI} —— 比如如果url是 http://localhost/test.php,则是指 /test.php

0

评论 (0)

取消