简介
此文仅用于宝塔面板,因为宝塔生成的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就可以了。
info 评论功能已经关闭了呐!