拥抱https(http全面切换到https)

在百度和谷歌的鼓励下,现在很多网站都开始换成https了啊,只是有的没有隐私数据的网站感觉没有太大必要,但是设计要密码账号的网站必须要的。不过有部分网站没有换成https只是暂时的,2-3年后预估互联网会全部变成https。因为https成本也不是很高,免费SSL证书也有,比如腾讯免费SSL证书,starssl免费证书等。关键是https对SEO更加友好。

准备工作

域 名:阿里云

服务器:阿里云ECS

SSL证书: 腾讯SSL免费版

web容器:nginx+php

一、为什么要切换到HTTPS

1.安全方面

HTTPS比HTTP更加安全

2.技术方面

不懂HTTPS多不好意思啊,所以就当是学习了。

二、为什么要用腾讯SSL

因为免费啊,毕竟穷人用不起企业级别的,先用一年免费的再说。starssl是外国的,看不习惯鸟语还是老老实实用中文。

三、申请证书

申请地址:https://console.qcloud.com/ssl

申请证书之后会给一个下载链接,下载之后会有3个文件夹。分别是nginx、tomcat、apache。因为我个人用的是nginx,就说下nginx的配置。没有调查就没有发言权,用其他两种的小伙伴请自行研究。

四、DNS配置

证书申请通过之后会让你配置一个CNAME类型的DNS,然后把这个DNS在你的域名中添加一个cname的解析。

cname

五、上传

将下载的证书nginx文件夹打包上传到 usr/local/nginx目录

六、nginx配置

先确认nginx安装时已编译http_ssl模块,也就是执行如下命令查看是否存在–with-http_ssl_module参数:

执行/usr/local/nginx/sbin/nginx -V这个命令

在返回的结果中找是否有--with-http_ssl_module参数,没有的话要先激活这个模块。

1
2
3
4
nginx version: nginx/1.6.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --with-http_ssl_module --with-openssl=/usr/local/src/openssl-1.0.1/

然后在usr/local/nginx/conf/nginx.conf中修改配置,配置如下 在server中加入以下内容,注意修改一下对应ssl_certificatessl_certificate_key文件的位置

1
2
3
4
5
6
7
listen 443;
        ssl on;
        ssl_certificate /usr/local/nginx/ssl/1_xiaomo.info_bundle.crt; #证书公钥文件路径
        ssl_certificate_key  /usr/local/nginx/ssl/2_xiaomo.info.key;   #证书私钥文件路径
        ssl_session_timeout  5m;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;

这一段主要是开启SSL

保存配置之后要确认是否配置正确,执行/usr/local/nginx/sbin/nginx -t命令

1
2
3
4
linux-test:~ # /usr/local/nginx/sbin/nginx -t
#如下显示则为正确无误:
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重定向http到https,加入以下这段,意思是访问http的网站的时候会重定向到https上去。

1
2
3
4
5
   location / {
                if ($scheme = http) {
                        return 301 https://$host$request_uri;
                        }
        }

七、生效

执行/usr/local/nginx/sbin/nginx -s reload,如无错误,现在应该可以顺利访问 xiaomo.info 这个网站,并且是https的。

八、附录

nginx配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
server
    {
        listen 80;
        listen 443;
        ssl on;
        ssl_certificate /usr/local/nginx/ssl/1_xiaomo.info_bundle.crt; #证书公钥文件路径
        ssl_certificate_key  /usr/local/nginx/ssl/2_xiaomo.info.key;   #证书私钥文件路径
        ssl_session_timeout  5m;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;

        server_name xiaomo.info;
        index index.html index.htm index.php;
        root  /data2/xiaomo.github.io/public;

         location ~ \.(jpg|png|gif|js|css|swf|flv|ico)$ {
                 expires 12h;
        }

        location / {
                if ($scheme = http) {
                        return 301 https://$host$request_uri;
                        }
        }

        location ~* ^/(doc|logs|app|sys)/ {
                return 403;
        }

        location ~ .*\.(php|php5)?$
        {
                fastcgi_connect_timeout 300;
                fastcgi_send_timeout 300;
                fastcgi_read_timeout 300;
                try_files $uri =404;
                error_page 404 = /404.html;
                fastcgi_pass  unix:/tmp/php-cgi.sock;
                include fastcgi.conf;
                fastcgi_index  index.php;
                include fastcgi.conf;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }

        error_log  /home/wwwlogs/error_log.log;
    }

参考资料

1. Linux+Nginx/Apache/Tomcat新增SSL证书,开启https访问教程

2. 让你的网站免费支持 HTTPS 及 Nginx 平滑升级

署名 - 非商业性使用 - 禁止演绎 4.0