目录

Nginx简单操作 | Nginx配置SSL证书

Nginx配置SSL证书

0. 实验准备

  1. 阿里云学生机

  2. 域名/网站已经备案

    为什么要备案的呢?做一个遵纪守法的好公民,并且阿里云备案真的很快,我11天就备案好了,备案完成阿里云还给我免费续费11天(相当于阿里云补偿你的)。我的机子刚开始也是没有备案的(主要是嫌麻烦),那时候配置了SSL之后可以使用https访问,用http访问的话阿里云会直接给你拦截。然后我就这么得过且过的用着https,结果有一天我使用https都再也不能访问了,提交工单之后,阿里云的客服人员说,该备案了,然后我就备案了。

  3. 实验中用到的域名(测试域名)是:

    • dawnguo.cn
  4. Nginx version

    nginx/1.10.3 (Ubuntu)

1. Nginx 配置SSL

这边省略了Nginx的安装过程,只讲如何配置Nginx让您的网站可以使用https访问,个人觉得阿里云给的文档已经挺好的了。

1.1 SSL证书的获取

  • 要配置网站可以https访问,SSL证书必不可少。这边使用阿里云免费提供的SSL证书,登录之后找到SSL购买界面,购买免费型DV SSL。

    https://img.dawnguo.cn/WebSite/Nginx/1.jpg

  • 购买证书之后,就是申请绑定域名了。点击左侧申请,填写相关信息即可。

    https://img.dawnguo.cn/WebSite/Nginx/2.jpg

  • 申请成功之后,之后配置需要用到pem和key文件,相应的文件下载在"已签发"这块,点击下载,选择Nginx版本下载之后就可以了。

    https://img.dawnguo.cn/WebSite/Nginx/3.jpg

    • .crt文件:是证书文件,crt是pem文件的扩展名(有时候没有crt只有pem的,所以不要惊讶)
    • .key文件:证书的私钥文件(申请证书时如果没有选择自动创建CSR,则没有该文件)
    • .pem扩展名的证书文件采用Base64-encoded的PEM格式文本文件,可根据需要修改扩展名。

1.2 Nginx上的配置

nginx的相关配置一般都在/etc/nginx/目录,因为nginx版本的不同,该目录中的内容一般都会不同,该目录在我机子上的内容如下所示:

1
2
$ ls
conf.d/  fastcgi.conf  fastcgi_params  koi-utf  koi-win  mime.types  nginx.conf  proxy_params  scgi_params  sites-available/  sites-enabled/  snippets/  uwsgi_params  win-utf

nginx.conf是最最最重要的配置文件,其中nginx.conf文件又会把conf.d/目录中.conf文件内容和sites-enabled/目录中的文件内容直接include进来,include语句主要是这几句:

1
2
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

下面介绍一下我机子上nginx.conf文件的内容,主要是一些基础配置。我们可以看到最后两行include的内容,就是上面的内容。个人建议把一些站点的配置都放到./sites-enabled/或者./conf.d目录中,方便日后管理(增删只有删除相应文件即可)。

 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
user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}
http {
        ##
        # Basic Settings
        ##
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;
        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        
        ##
        # Gzip Settings
        ##
        gzip on;
        gzip_disable "msie6";
        
        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}
  • 上面介绍完nginx相关之后,开始正式配置。为了方便日后SSL证书的管理,我们在etc/nginx目录中创建一个cert目录,然后把下载下来的证书拷贝到/etc/nginx/cert目录中。

    1
    2
    
    $ ls
    dawnguo.cn.key  dawnguo.cn.pem
    
  • 之后进入./sites-enabled/目录,创建一个文件为dawnguo.cn(取名为这个,是为了方便管理)

    1
    2
    
    $ ls
    dawnguo.cn
    

    之后把下面的内容复制粘贴到dawnguo.cn这个文件中

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    
    server {
        listen 443;
        server_name dawnguo.cn;
        ssl on;
        root /var/www/html;
        index index.html index.htm;
        ssl_certificate  cert/dawnguo.cn.pem;
        ssl_certificate_key cert/dawnguo.cn.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
      
        location / {
            index index.html index.htm;
        }
    }
    

    需要注意一下几点:

    • server_name需要配置为你自己的域名昂;
    • root /var/www/html; 这个是你网站的所在的目录;
    • ssl_certificate cert/dawnguo.cn.pem; pem文件的路径;
    • ssl_certificate_key cert/dawnguo.cn.key;ket文件的路径;
  • http的重定向,为了在使用http访问站点时,能自动跳转到https访问,下面我们设置一下重定向

    1
    2
    3
    4
    5
    
    server {
        listen 80;
        server_name dawnguo.cn;
        rewrite ^(.*)$ https://dawnguo.cn;
    }
    
  • 最后一步重启nginx即可

    1
    
    $ service nginx restart
    

    https://img.dawnguo.cn/WebSite/Nginx/4.jpg

1.3 题外话,一些小总结

  • 以后相关的配置文件都尽量放到./sites-enabled/或者./conf.d目录中,而不是直接针对nginx.conf直接修改;

  • 对include的理解,include其实是把文件的内容直接include到相关语句出,比如nginx.conf中的内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    
    http {
            ......
            ##
            # Virtual Host Configs
            ##
            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;
    }
    

    sites-enabled/目录下test文件的内容如下:

    1
    2
    3
    4
    5
    6
    7
    
    server {
        listen 443;
          ......
        location / {
            index index.html index.htm;
        }
    }
    

    那么等价于

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    http {
            ......
            ##
            # Virtual Host Configs
            ##
            server {
                listen 443;
                    ......
                location / {
                    index index.html index.htm;
                }
            }
    }