2017/09/24 : 对了,开头补充一点,一般网站访问https
大多是使用301永久跳转的,具体实现规则在下面也有。
可以忽视上面那句话~~
今天服务器一度崩溃,因为一个字母
因为在朋友那里看到他已经升级https,所以我也准备把网站从http改成https,看起来不过就加一个字母而已
有点麻烦,不过好在初步完成了
方法
- 首先要去某个地方申请证书,小网站申请免费的就好,我是在腾讯云申请个免费的。
其实你也可以自建证书,只不过可能会显示你的证书不安全。 - 申请完证书之后就是安装证书,腾讯云文档写的还是比较清楚的,自己看一下基本上都能过。
- 然后去下载证书,把你下载的证书解压放到你的服务器上,比如放在
/etc/http/conf/ca/
下,然后按照这个,不管是Apache、nginx还是IIS都有对应的方法。 - 踩坑
接下来是坑(敲黑板)
1. 原谅我一直不知道服务器使用https是一定要用443端口的,所以80要改成443
2. web代理软件需要打开重定向支持,没有对应模块(mod_ssl
和openssl
)的话需要自行安装或者编译安装,方法去百度 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)