简介

此文仅用于宝塔面板,因为宝塔生成的nginx目录是和默认自己装的有区别。

宝塔面板

1.添加站点

宝塔面板,网站里面新增一项,域名就些自己想要访问的域名,蔽掉了443 8848的端口,端口就默认80就行。

acme.sh

原网址:https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

1.生成证书

这一步先不要修改在宝塔添加的站点的niginx配置文件

泛域名只能用DNS模式生成,当前使用的是http生成,DNS方式不太方便,HTTP方式,域名太多也麻烦。暂时没发现十全十美的

#nginx模式,手动指定了配置文件
acme.sh  --issue  -d [domain]  --nginx /www/server/panel/vhost/nginx/[domain].conf

domain对应的就是添加站点里面的域名。

2.修改nginx配置文件

为每一个子域名修改单独的nginx配置文件,文件路径:/www/server/panel/vhost/nginx/novel

这一步,在2个pem文件前单独新建一个网站的目录仅用于区分不同的域名子级好一点,方便在第3步存放证书文件。

#第一行修改成如下监听443端口
listen 443 ssl;

#替换文件中如下相同的内容,把ssl文件路径需要修改下
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
ssl_certificate /www/server/panel/vhost/nginx/[文件夹名]/cert.pem;
ssl_certificate_key /www/server/panel/vhost/nginx/[文件夹名]/key.pem;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout  10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#SSL-END

3.安装证书

此步骤是把上一步生成的证书copy到咋们的nginx目录下,根目录证书更新了也会同步更新到nginx目录。

acme.sh --install-cert -d [想要的域名例:blog.whyat.xyz] \
--key-file       /www/server/panel/vhost/nginx/[文件名]/key.pem  \
--fullchain-file /www/server/panel/vhost/nginx/[文件名]/cert.pem \
--reloadcmd     "service nginx force-reload"

Nginx

域名概念

example.com在解析网站时用的是@,和www.example.com这是2个不同的域名

浏览器跳转

  • chrome

    • example.com:自动跳转到www.eample.com,不需要再nginx中做额外的配置,只需要添加www.example.com的证书配置即可。
  • edge

    • example.com:不会跳转,需要在nginx中单独做个转发到www.example.com

      server {
          listen 80;
          server_name whyat.xyz;
          return 301 https://www.whyat.xyz$request_uri;
      }

二级域名

配置二级域名nginx用反代直接转发到对应的端口

server {
    listen 443 ssl;
    server_name novel.whyat.xyz;

    ssl_certificate /www/server/panel/vhost/nginx/novel/cert.pem;
    ssl_certificate_key /www/server/panel/vhost/nginx/novel/key.pem;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://127.0.0.1:8848;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    access_log  /www/wwwlogs/novel.whyat.xyz.log;
    error_log   /www/wwwlogs/novel.whyat.xyz.error.log;
}

其他命令

更新nginx配置,不影响站点命令

sudo nginx -s reload

查看nginx状态

sudo systemctl status nginx

更新证书失败

2024.3.22记录,起因:访问不了博客了,访问博客打不开,访问其他站点发现证书失效,证书没有正常更新

查明原因

浏览器点开证书发现过期,查看官方github看到,acme.sh的log日志在~/.acme.sh目录中,发现日志在每日定时任务里面更新证书时有报错:Can not find conf file for domain找不到配置文件,发现issue中有同样问题的人,他们说的解决方法是特定网站的conf配置文件中不要添加ssl设置,“No ssl on or listen 443 ssl;”esbozos老哥的原话,然后我把listen 443 ssl的配置行去掉,再手动更新证书acme.sh --renew --nginx /www/server/panel/vhost/nginx/novel.whyat.xyz.conf -d novel.whyat.xyz果然成功了,然后就还原conf配置文件,再重新启动nginx就可以了。