1. 获取阿里云 DV SSL证书(免费)

  1. 进入官网 阿里云盾证书服务
  2. 依次选择:
    【选择品牌】: Symantec --> 【保护类型】:一个域名 --> 【证书类型】:免费型DV SSL --> 立即购买即可
  3. 进入云盾控制台补全信息,点击进度栏的 “补全” 链接,补全数据,这一步大概等待二十多分钟。

云盾控制台

  1. 等待 “证书状态栏” 变为 “已签发” 时,点击“下载” ---> “下载证书 for Nginx”

2. nginx配置

  1. 在服务端 /etc/nginx 目录下创建新目录cert
  2. 将下载的证书 xxx.zip 解压,并把文件夹中的 xxx.keyxxx.pem 上传到 cert 目录下。
  3. 配置nginx配置目录 /etc/nginx/sites-enableddefault 文件如下:

    server {
            listen 443 ssl;
            server_name www.xxx.com; # 域名
            ssl_certificate "/etc/nginx/cert/xxx.pem";   # 刚刚保存的 /etc/nginx/cert/xxx.pem
            ssl_certificate_key "/etc/nginx/cert/xxx.key"; # 刚刚保存的 /etc/nginx/cert/xxx.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;
    
            root /xxx/xxx/; # 网站根目录(放置html或php代码的根目录)
            index index.php index.html;
    
            location ~ ^.+\.php { # php 请求转发
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                fastcgi_param  PATH_INFO $fastcgi_path_info;
                fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_path_info;
                include        fastcgi_params;
                include        fastcgi.conf;
        }
    
    }
  4. 重新启动nginx

    nginx -s stop && nginx

3. 最后

上述配置完成之后当你在浏览器地址栏输入 https://www.xxx.com 的时候可以正常访问网站,而且链接也变成了 https。但是,当你在浏览器地址栏输入 http://www.xxx.com 时候,服务无法访问。这主要是因为服务端只监听了443端口,值提供了https服务,而不再监听80端口,所以不能提供http服务。

具体做法:

  1. 打开nginx配置文件(刚刚配置过)

    cd /etc/nginx/sites-enabled/ && vi default # 打开nginx配置文件
  2. 加入对 80端口的监听

    server {
        listen 80;
        server_name xxx.top www.xxx.com;
        rewrite ^(.*) https://www.xxx.com; # 将 http://www.xxx.com 的请求转发到 https://www.xxx.com
    }
  3. 重启nginx

  4. -s stop && nginx

最后附上整个 default配置

server { # 监听80端口,提供http服务
    listen 80;
    server_name xxx.top www.xxx.com;
    rewrite ^(.*) https://www.xxx.com; # 将 http://www.xxx.com 的请求转发到 https://www.xxx.com
}

server { # 监听443接口,提供https服务
        listen 443 ssl;
        server_name www.xxx.com; # 域名
        ssl_certificate "/etc/nginx/cert/xxx.pem";   # 刚刚保存的 /etc/nginx/cert/xxx.pem
        ssl_certificate_key "/etc/nginx/cert/xxx.key"; # 刚刚保存的 /etc/nginx/cert/xxx.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;

        root /xxx/xxx/; # 网站根目录(放置html或php代码的根目录)
        index index.php index.html;

        location ~ ^.+\.php { # php 请求转发
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param  PATH_INFO $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED $document_root$fastcgi_path_info;
            include        fastcgi_params;
            include        fastcgi.conf;
    }
}
文章目录