Nginx配置ssl实现https全站访问

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/youcijibi/article/details/87894579

以 Let.s Encrypt为例,个人觉得其比较简单,而且免费版各大浏览器也支持。

1,mkdir -p /网站根目录/.well-known/acme-challenge 创建临时目录,当然这个网站根目录根据你自己的实际情况修改。如果以前生成过不用重复生成。

2,cd 到任何自己喜欢的目录,比如root 家目录 cd /root 然后执行

$ wget https://dl.eff.org/certbot-auto
$ chmod a+x ./certbot-auto

这个小工具会在安装证书的时候自动下载并安装相关依赖和 Python 包,也可以先执行它来安装依赖

$ ./certbot-auto

稍等一下就完成了。

3,生成证书过程中需要鉴权。有多种方式,比如 webrootstandaloneapachenginxmanual 等。我使用过前两种。 这两种中,简单一点的是 standalone 。不过,这种方式需要把现有的 WebServer 停掉,因为这种方式下 certbot 需要占用 80 端口。

以下几种方式的配置中 -d 代表 domain 填写域名   -w 代表 wwwroot 填写网站根目录

第一种 :standalone  # ./certbot-auto certonly --text --agree-tos --email [email protected] --standalone -d example.com -d www.example.com -d service.example.com

第二种,推荐第二种

webroot

-d 参数指定域名,可多个。一般第一个是主域名。

webroot 方式稍微繁琐一些,但好处是不需要关停现有的 WebServer 。此方法需要在域名对应的根目录下新建 .well-known 目录并写入若干文件供验证服务访问。 因此需要配置 WebServer 允许外部访问 http://example.com/.well-known 路径。配置方法请参考相应 WebServer 的文档,我的配置是:在server中加入:

  location ~ /.well-known {
            root 网站目录;
           allow all;
        }

然后执行证书安装:

# ./certbot-auto certonly --text --agree-tos --email [email protected] --webroot -w /var/www/example -d example.com -d www.example.com -w /var/service/example -d service.ulefa.com

无论使用那种方式,运行以上命令后都会在 /etc/letsencrypt 生成一堆东西,包括证书。

4,安装完成后能看到 Congratulations! Your certificate and chain have been saved at:等等一堆信息里面提供了配置ssl需要的证书路径。

现在修改nginx的配置文件即可:

  1. 打开 Nginx 的配置文件(默认为: /etc/nginx/nginx.conf ),在需要提供 HTTPS 的 server 下新增以下三行,并把 listen 80; 删掉,不删掉的话非ssl仍能访问,建议删掉后另起一个server做301配置。
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
另起一个server做301如下:
server {
listen   80;
server_name example.com www.example.com service.example.com;
return 301 https://$host$request_uri;
}

5,

定期 renew

Let's Encrypt 的证书有效期为 90 天,所以需要在到期前 renew 一下证书。 使用以下命令即可。

# ./certbot-auto renew --text --agree-tos --email [email protected] --webroot -w /var/www/example -d example.com -d www.example.com -w /var/service/example -d service.ulefa.com

即把certonly 改为renew即可。

或者直接运行以下命令,此时 certbot 会使用默认参数,在二级域名分别使用各自的证书情况下慎用,有调用次数限制。

# ./certbot-auto renew

crontab 里加入定时任务,每隔 80 天的凌晨 4 点执行一次 renew:

0 4 */80 * * /yourpath/certbot-auto renew &>> /dev/null

当然,最后记得如果网站后台有配置域名的话,需要将其改为https://www.yourdomain.com

猜你喜欢

转载自blog.csdn.net/youcijibi/article/details/87894579