Nginx全站开启HTTPS

Nginx配置全站HTTPS

—— 以腾讯云CentOS7为例

本文章讲述了如何通过 acme.sh 申请泛域名 SSL 证书,并使用 Nginx 配置全站 HTTPS 的详细过程。

本文章始发于:Nginx全站开启HTTPS

本文章目录:

泛域名SSL证书申请

使用acme.sh申请letsencrypt泛域名SSL证书,并自动续期

下载安装acme.sh

1、下载安装acme.sh

curl  https://get.acme.sh | sh -s email=my@example.com

2、查看是否下载成功并安装

cd ~/.acme.sh/

如果没有该目录,下载失败,说明GitHub地址可能被墙了,这时需要更新一下host,再尝试重新下载安装:

(1)打开IPAddress,查询以下域名IP地址,记录域名对应的IP

  • github.com

  • raw.Githubusercontent.com
    请添加图片描述
    请添加图片描述

(2)根据记录的IP域名修改HOST

比如上述记录的如下,一个域名对于多个IP分多行写

140.82.112.4 github.com
185.199.108.133 githubusercontent.com
185.199.109.133 githubusercontent.com
185.199.110.133 githubusercontent.com
185.199.111.133 githubusercontent.com

修改本地HOST文件/etc/hosts,添加如上所得记录:vim /etc/hosts

(3)刷新DNS,centos 7 为例,其他自行百度:nscd -i hostssystemctl restart nscd

3、设置bash别名

alias acme.sh=~/.acme.sh/acme.sh

4、开启 acme.sh 自动更新

acme.sh  --upgrade  --auto-upgrade

申请SSL证书

安装好 acme.sh 后就可以准备为域名申请SSL证书,

1、获取对应域名服务商的DNS API,具体请看:How to use DNS API,笔者使用的是腾讯云,所以用的是dns_dp,登录DNSPod获取点击头像那边“API 秘钥”获取“DNSPod Token”,点击“创建秘钥”,创建成功后记录 ID 与 Token 。

请添加图片描述

2、把 ID 与 Token 添加到用户环境变量中:vim ~/.bash_profile,不同的服务商配置项可能有出入,具体请查看How to use DNS API

export DP_Id="123456"
export DP_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

保存,使其生效:source ~/.bash_profile

3、申请对应泛域名(主域名与*通配符域名)SSL证书。上面第2点需配置好,注意 --dns 后面的参数应该对应你申请域名的服务商DNS API,支持的API列表:acme.sh/dnsapi

acme.sh --issue --dns dns_dp -d yourdomain.com -d *.yourdomain.com

4、如果配置正确,申请正常,生成的秘钥位于“acme.sh目录/你申请的域名/”下 ~/.acme.sh/yourdomain.com

cd ~/.acme.sh
ls
cd yourdomain.com
~/.acme.sh/yourdomain.com.cer
~/.acme.sh/yourdomain.com.key

至此,SSL证书申请完毕后,下一步 Nginx 配置全站开启 HTTPS

关于自动续期

申请的泛域名SSL证书有效期为 3 个月,但是 acme.sh 会为我们自动续期SSL,无需我在在进行操作,它生产一个crontab,输入crontab -l即可查看到。

24 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

Nginx配置全站HTTPS

开放 443 端口

1、主机 443 端口开启

# 查询 443 是否开放
firewall-cmd --query-port=443/tcp

# 如果没有开放,开放443端口
firewall-cmd --permanent --add-port=443/tcp
# 重启防火墙
firewall-cmd --reload

2、云主机安全组/防火墙 443 端口开放

请添加图片描述

配置 Nginx 规则

1、添加HTTPS通用配置:0.ssl.conf.server,证书路径修改成刚刚 acme.sh 申请到的证书绝对路径

listen 443 ssl http2;

ssl_certificate /root/.acme.sh/yourdomain.com/yourdomain.com.cer;
ssl_certificate_key /root/.acme.sh/yourdomain.com/yourdomain.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

2、添加HTTP跳转到HTTPS默认配置;访问错误域名返回403:0.default.conf

server {
    listen 80 default_server;
    server_name *.yourdomain.com; # 跳转至HTTPS
    rewrite ^(/.*)$ https:$host$1 permanent; #302跳转到https地址
    error_page 497 https://$host$request_uri; #497用于http到https的强制跳转
}

server {
    server_name _;
    include 0.ssl.conf.server; # 引入HTTPS通用配置,监听开启HTTPS
    return 403;
}

3、新加网站Nginx配置示例:

3.1 示例1

# 网站首页
server {
    server_name yourdomain.com www.yourdomain.com;

    access_log /www/index/access.log;
    
    include 0.ssl.conf.server; # 引入HTTPS通用配置,监听开启HTTPS
    location / {
        root   /www/index;
        index  index.html;
    }

    location ~ .*\.(log)?$ {
        return 403;
    }	
}

3.2 示例2

upstream blog {
    server 127.0.0.1:8080;
}

server {
    server_name blog.yourdomain.com;

    include 0.ssl.conf.server; # 引入HTTPS通用配置,监听开启HTTPS
    location / {
        proxy_pass http://blog;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

配置生效测试

1、检测配置是否正确

nginx -t

2、重载配置

nginx -s reload

3、测试访问

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值