一个服务已经在服务器的 127.0.0.1:40301 上运行,接下来希望通过域名和 HTTPS 访问。本文以 Ubuntu 的 Nginx 软件包和 Certbot 为例,依次处理 DNS、反向代理与证书。
示例使用 panel.example.com,需要替换成自己的域名。若应用还有安全入口路径,例如 /skqfly,访问时保留该路径;不要把它硬塞到所有反向代理请求里。
1. 检查服务与域名解析
先在服务器本机确认应用能够响应:
curl -I http://127.0.0.1:40301/
应用返回登录跳转或需要入口路径,不一定意味着服务未启动。应结合实际地址和服务日志判断。
在 DNS 服务商处添加 A 记录:以 panel.example.com 为例,主机记录通常填写 panel,记录值为服务器公网 IPv4。只有根域名才通常使用 @。
dig +short panel.example.com A
dig +short panel.example.com AAAA
A 记录应指向目标服务器。若同时存在 AAAA 记录,IPv6 也必须能正确访问;不正确的 IPv6 记录可能影响证书验证。
2. 安装 Nginx 与 Certbot
如果已经由 1Panel、容器或其他服务管理 80、443 端口,先确认端口归属,不要另起一套冲突的 Nginx。
sudo ss -lntp | grep -E ':(80|443)'
sudo apt update
sudo apt install -y nginx certbot python3-certbot-nginx
sudo systemctl enable --now nginx
这是 Ubuntu 软件源安装方式。使用其他 Certbot 安装方式时,按对应官方说明操作,避免混装多个版本。
3. 创建反向代理站点
编辑站点文件:
sudo nano /etc/nginx/sites-available/panel.example.com
server {
listen 80;
server_name panel.example.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:40301;
proxy_http_version 1.1;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
access_log /var/log/nginx/panel_access.log;
error_log /var/log/nginx/panel_error.log;
}
这里的 proxy_pass 只写上游地址,不附加 URI。根据 Nginx 的路径转发规则,请求中的路径会传给上游,因此 /skqfly 仍由应用处理。
WebSocket 相关请求头用于终端等需要协议升级的功能。实际应用若提供了专用反向代理配置,应优先对照其说明调整。
4. 启用站点并检查配置
Ubuntu 软件包通常通过 sites-enabled 加载站点。首次启用时创建软链接;如果链接已经存在,就不要重复创建。
sudo ln -s /etc/nginx/sites-available/panel.example.com /etc/nginx/sites-enabled/panel.example.com
sudo nginx -t
只在检查通过后重新加载:
sudo systemctl reload nginx
此时先测试 HTTP 访问,确认域名、入口路径和静态资源都能正常工作,再进入证书步骤。
5. 申请 HTTPS 证书
确保公网可以访问该域名的 80 端口,并按需放行 443 端口;这同时涉及服务器防火墙和云安全组。
sudo certbot --nginx -d panel.example.com --redirect
按当前版本的提示填写账户信息并阅读条款。--redirect 用于将 HTTP 请求跳转到 HTTPS,不依赖教程截图里的菜单编号。
申请完成后检查:
sudo nginx -t
sudo certbot certificates
curl -I https://panel.example.com/
如果应用设置了安全入口,实际登录地址应类似 https://panel.example.com/skqfly。HTTPS 可用并不等于入口路径可以省略。
6. 验证续期与排查问题
sudo certbot renew --dry-run
systemctl list-timers --all | grep -i certbot
dry-run 用于测试续期流程。定时任务的名称和管理方式取决于安装方式,不能仅凭一次申请成功就认定自动续期已配置。
常见问题:
- 证书验证失败:检查 A/AAAA 记录、80 端口、域名代理或 CDN 设置。
- 502 Bad Gateway:先测试本机上游地址,再检查应用监听协议、端口和 Nginx 错误日志。
- 首页能开但资源或登录失败:核对路径转发、应用外部地址配置和安全入口。
- 证书正常但浏览器仍有提醒:查看具体原因,例如混合内容或证书域名不匹配,不以图标颜色作为判断依据。
sudo tail -n 50 /var/log/nginx/panel_error.log