nginx服务器通过acme申请证书

安装Nginx后用acme.sh申请HTTPS证书简易教程

(一)安装acme
#首先,确保系统已经安装了git、curl、micro等基础软件
sudo apt update
sudo apt install git curl micro socat
#通过curl命令或直接从GitHub上克隆acme.sh仓库来安装acme.sh
sudo curl https://get.acme.sh | sh -s email=[email protected]
#[email protected]替换为实际邮箱地址,替换的内容可以先行替换然后逐步执行

(二)生成证书
#在生成证书之前,请确保域名(假设为mydomain.com)已经正确解析到了服务器IP地址,并且修改Nginx配置文件(/etc/nginx/sites-available/default)
micro /etc/nginx/sites-available/default
#server块中已经设置好了对应的server_name
server_name mydomain.com;
#使用acme.sh生成证书,假设使用的是HTTP验证方式(acme.sh会在网站根目录下生成一个临时文件进行验证,默认根目录为/var/www/html)
/root/.acme.sh/acme.sh –issue -d mydomain.com -w /var/www/html
#将mydomain.com替换为实际域名,/var/www/html替换为实际网站根目录,特别注意如果调整根目录要及时调整权限,默认用户为www-data(/etc/nginx/nginx.conf文件第一行),比如根目录调整为/home/ubuntu/html/
chown -R www-data:www-data /home/ubuntu/html/
chmod -R 755 /home/ubuntu/html/

(三)安装证书到Nginx
#证书生成后,acme.sh会将证书文件保存在~/.acme.sh/目录下(建议root目录),将这些文件复制到Nginx的证书目录下:
sudo mkdir -p /etc/nginx/ssl
sudo cp ~/.acme.sh/mydomain.com_ecc/* /etc/nginx/ssl/
#编辑配置文件
micro /etc/nginx/sites-available/default
#此步删除原来所有内容,重新配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
server {
listen 80;
server_name mydomain.com;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
server_name mydomain.com;

ssl_certificate /etc/nginx/ssl/fullchain.cer;
#一定要用fullchain.cer
ssl_certificate_key /etc/nginx/ssl/mydomain.com.key;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;

location / {
root /var/www/html;
#根据实际需要调整主目录
index index.html index.htm;
#这里要特别注意,自动生成的html文件不是index.html,不修改测试通不过

}
}

#重新加载配置文件
sudo nginx -t
sudo systemctl reload nginx
sudo systemctl status nginx

(四)设置定时任务以定期更新证书
#acme.sh支持设置定时任务以定期更新证书
crontab -e
#添加以下行(假设使用的是root用户,并且acme.sh安装在默认位置):
0 0 * * * “/root/.acme.sh”/acme.sh –cron –home “/root/.acme.sh” > /dev/null

(五)排错纠错
#如果通过域名不能访问网站
1.检查错误日志
tail /var/log/nginx/error.log -n 20
2.检查网页根目录是否存在index.html文件,默认没有index.html
cd /var/www/html
3.如果显示端口被占用,执行
lsof -i :443
#或者执行:
netstat -ano | find “443”
kill -9 PID
4.没有读写权限,执行上述第(二)步命令
chown -R www-data:www-data /home/ubuntu/html/
chmod -R 755 /home/ubuntu/html/
5.SELinux安全措施太严格
#查看状态
getenforce
#编辑/etc/selinux/config
sudo micro /etc/selinux/config
##内容修改为
SELINUX=disabled
6.acme命令输入没反应,使用命令的绝对路径
/root/.acme.sh/acme.sh


nginx服务器通过acme申请证书
http://example.com/2025/03/12/nginx服务器通过acme申请证书/
Author
John Doe
Posted on
March 12, 2025
Licensed under