服务器中间件教程:Nginx 安装配置与反向代理实战
服务器中间件是跑在操作系统和业务程序之间的基础软件,常见的有 Nginx、Apache、Tomcat、Redis 等。
很多新手第一次接触这个概念时不知道从哪下手,这篇服务器中间件教程就以最常用的 Nginx 为例,从安装到配置反向代理、开启 HTTPS、排查报错完整走一遍。
只要你能登录 Linux 服务器并会用 ssh,就可以照着做。
先确认环境,再准备安装
开始前先确认三件事,能省掉后面很多莫名其妙的问题。
- 服务器能通过
ssh user@ip登录,并且当前账号有sudo权限。 - 系统是主流发行版之一,本文命令以 Debian/Ubuntu 和 CentOS/RHEL 为例,两者包管理器不同:前者用
apt,后者用dnf或yum。 - 放行端口:Nginx 默认监听
80(HTTP)和443(HTTPS),云服务器安全组和系统防火墙都要放行。
查看系统版本,确定用哪套命令:
cat /etc/os-release
如果输出里是 Ubuntu 或 Debian,就用 apt;
出现 CentOS、Rocky、AlmaLinux,就用 dnf。
安装 Nginx 并确认服务状态
Debian/Ubuntu 执行:
sudo apt update
sudo apt install -y nginx
CentOS/RHEL 执行:
sudo dnf install -y nginx
安装完成后启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
status 出现绿色的 active (running) 就表示中间件已经在运行。
此时浏览器访问服务器公网 IP,能看到 Nginx 的默认欢迎页,说明安装这一步成功了。
如果打不开,先检查安全组和防火墙,而不是反复重装。
配置反向代理,让 Nginx 转发到后端程序
反向代理是 Nginx 最核心的用途:
用户访问域名,
Nginx 把请求转发给本机或另一台机器上的业务程序(比如跑在 3000 端口的 Node 服务、8080 端口的 Java 应用)。
在 /etc/nginx/conf.d/ 目录下新建一个配置文件,例如 app.conf:
server {
listen 80;
server_name your-domain.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;
}
}
把 your-domain.com 换成你的真实域名,3000 换成后端程序实际监听的端口。
保存后先做语法检查,再重载:
sudo nginx -t
sudo systemctl reload nginx
nginx -t 返回 syntax is ok 和 test is successful 才说明配置没问题。
这一步很关键,配置写错直接重载会导致服务异常,而先测试就能提前拦住。
开启 HTTPS 并做好基础优化
现在浏览器对 HTTP 站点越来越不友好,建议尽早配 HTTPS。
用 Certbot 申请免费证书是最省事的方式,以 Ubuntu 为例:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
按提示选择自动跳转 HTTPS 即可,Certbot 会自动改写上面的 server 配置并加上证书路径。
证书到期前它也能自动续期,可以用下面命令模拟续期测试:
sudo certbot renew --dry-run
顺手可以加两个小优化:在 http 块里开启 gzip on; 压缩文本响应,减少传输体积;
把静态资源的 location 加上 expires 7d;,让浏览器缓存图片和 CSS。
改动后同样要 nginx -t 再 reload。
常见报错怎么排查
配置过程中最容易遇到三类问题,先看日志再动手,不要盲目改配置。
Nginx 的日志默认在 /var/log/nginx/ 下:access.log 记录访问,error.log 记录错误。
- 访问返回 502 Bad Gateway:一般是后端程序没启动或端口写错。先用
ss -lntp | grep 3000确认端口在监听,再用curl http://127.0.0.1:3000看后端本身能否响应。 - 返回 403 Forbidden:常见于目录权限不足或
index文件缺失。检查站点根目录权限,确认目录里有默认首页文件。 - 访问还是默认欢迎页:说明你的配置没被加载。检查文件是否放在
conf.d/且以.conf结尾,server_name是否写对,然后nginx -t确认配置已被识别。
改完配置后养成固定习惯:nginx -t 通过再 systemctl reload nginx,出问题第一时间看 error.log 的最后几行。
验证配置是否真正生效
配置完成不等于生效,用下面几个动作做最终确认:
- 浏览器访问
https://your-domain.com,地址栏出现锁形图标,说明 HTTPS 正常。 - 用
curl -I https://your-domain.com看返回状态码,200表示正常,301表示跳转,502则回到上一节排查。 - 打开
error.log,用tail -f /var/log/nginx/error.log实时观察,确认没有持续报错。 - 重启一次服务器
sudo reboot,重新登录后确认nginx仍是active,说明开机自启配置生效。
到这里,一个能对外服务、支持 HTTPS 的 Nginx 中间件就跑起来了。
后续接其他中间件(比如 Redis 做缓存、Tomcat 跑 Java 应用)时,思路是一样的:确认环境、安装、改配置、测语法、重载、看日志验证。
几个新手常问的问题
Nginx 和 Apache 该选哪个? 两者都能做 Web 服务器和反向代理。
Nginx 在高并发静态请求和反向代理场景下更常见,配置也更简洁;
Apache 的 .htaccess 和模块生态对某些老项目更友好。
新手做反向代理和 HTTPS,优先从 Nginx 入手即可。
改完配置为什么浏览器没变化? 多半是没重载,或者浏览器缓存了旧页面。
执行 sudo systemctl reload nginx 后强制刷新(Ctrl+F5)再看。
能不能用宝塔面板代替命令行? 可以。
宝塔的网站和反向代理功能本质也是生成 Nginx 配置,面板里操作更直观,但理解配置文件结构后,排查问题会更从容,遇到面板解决不了的报错也能自己定位。
服务器中间件需要经常更新吗? 安全更新建议跟进,但升级前先在测试环境验证配置兼容性,生产环境升级前备份好 /etc/nginx/ 目录和证书文件,避免升级后配置不兼容导致服务中断。