Nginx 反向代理与 HTTPS 免费证书配置实战:从零到全站加密


很多站长把网站跑起来之后,访问地址还是 http://,地址栏里一把灰色的"不安全"小锁。浏览器越来越严格,HTTP 站点不仅影响观感,还可能在统计和收录上吃亏。这篇文章就带你从零开始,在 VPS 上配置 Nginx 反向代理,并配上免费的 HTTPS 证书,实现全站加密。全程都是免费方案,照着做就能搞定。


一、为什么要用反向代理


反向代理最直接的作用,是把 80/443 端口的请求转发给后端程序。比如你的网站跑在 8080 端口的 Node.js 上,或者本机 9000 端口的 PHP-FPM 上,Nginx 接收外部请求后转发过去,用户完全感知不到后端细节。这样做的好处有三点:


1. 统一入口:域名和端口只需暴露一个 80/443,后端服务不用直接面对公网;

2. 性能提升:Nginx 对静态文件、连接复用、压缩的处理非常高效;

3. 方便加 HTTPS:证书和跳转逻辑都集中在 Nginx 一层,后端不用改代码。


二、安装 Nginx


以 Ubuntu/Debian 系统为例,先更新软件源再安装:


apt update && apt install -y nginx


CentOS/Rocky 系统则是:


yum install -y nginx


安装完成后启动并设置开机自启:


systemctl enable --now nginx


此时访问服务器 IP,看到 Nginx 的欢迎页就说明安装成功了。


三、配置反向代理


Nginx 的站点配置在 /etc/nginx/conf.d/ 目录下,我们新建一个站点文件,假设域名是 example.com,后端服务跑在 127.0.0.1:3000:


server {

listen 80;

server_name example.com www.example.com;


location / {

proxy_pass http://127.0.0.1:3000;

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;

}

}


保存后先测试配置,再重载 Nginx:


nginx -t && systemctl reload nginx


如果你的后端是 PHP(比如常见的 LNMP 架构),location 里通常还要加上 try_files 和 fastcgi 相关的配置,原理是一样的:让 Nginx 把请求交给 PHP-FPM 处理。


四、申请免费的 HTTPS 证书


这里推荐使用 acme.sh,它比 certbot 更轻量,支持自动续期。先安装:


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


然后签发证书,HTTP 验证方式要求 80 端口可访问:


~/.acme.sh/acme.sh --issue -d example.com -d www.example.com --webroot /var/www/html


签发成功后,把证书安装到 Nginx 的证书目录:


~/.acme.sh/acme.sh --install-cert -d example.com \

--key-file /etc/nginx/ssl/example.com.key \

--fullchain-file /etc/nginx/ssl/example.com.pem \

--reloadcmd "systemctl reload nginx"


五、配置 HTTPS 并强制跳转


在原来的 server 块里加上 443 监听,并新建一个 80 端口的 server 块做跳转:


server {

listen 80;

server_name example.com www.example.com;

return 301 https://$host$request_uri;

}


server {

listen 443 ssl;

server_name example.com www.example.com;


ssl_certificate /etc/nginx/ssl/example.com.pem;

ssl_certificate_key /etc/nginx/ssl/example.com.key;

ssl_protocols TLSv1.2 TLSv1.3;


location / {

proxy_pass http://127.0.0.1:3000;

# 其余 proxy_set_header 同上

}

}


重载后访问 https://example.com,看到小绿锁就说明全站加密已经生效。此时即使有人用 http 访问,也会被 301 自动跳到 https。


六、证书自动续期


acme.sh 安装时会自动添加定时任务,默认 60 天检查一次,到期前 30 天自动续期,无需手动干预。可以执行下面命令确认定时任务存在:


crontab -l | grep acme


如果看到类似 "0 0 * * * ...acme.sh..." 的记录,说明自动续期已经就位。这里提醒一下:续期依赖 80 端口验证,如果以后把 80 端口关了,记得改用 DNS API 方式续期。


七、常见问题排查


1. 证书签发失败:确认域名解析已经指向当前服务器,且 80 端口没有被防火墙拦截;

2. 502 Bad Gateway:一般是后端服务没启动,或者 proxy_pass 的地址端口写错了;

3. 强制跳转不生效:检查 80 端口的 server 块是否配置正确,并确认没有其他配置抢占 80;

4. 证书到期没续上:登录服务器执行 ~/.acme.sh/acme.sh --renew -d example.com 手动续期排查报错。


八、小结


Nginx 反向代理加 HTTPS 免费证书,是 VPS 建站最值得优先做好的两件事。前者让架构更清晰、性能更好,后者让网站更安全、更可信。整套方案零成本,配置一次之后基本可以长期不用管。如果你的 VPS 还在裸跑 http,建议今天就动手配起来。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Nginx 反向代理与 HTTPS 免费证书配置实战:从零到全站加密

VPS性能测试全攻略:CPU跑分、磁盘IO与网络速度一次测明白

评 论