在运维工程师的日常工作中,Web 服务器是出现频率最高的基础设施之一。无论是承载静态站点、为后端应用做反向代理,还是承担负载均衡与 HTTPS 终结,Nginx 都凭借其高性能、低内存占用和丰富的模块化能力,成为 Linux 服务器上的首选方案。本文以 Ubuntu 22.04/24.04 为环境,从安装、配置、反向代理到性能调优,系统梳理 Web 服务器运维的核心要点。

核心概念
Nginx 采用「主进程 + 多工作进程」的事件驱动架构。master 进程负责读取配置、绑定端口和管理 worker,worker 进程则通过 epoll 等异步非阻塞机制处理大量并发连接。与传统 Apache prefork 模式相比,Nginx 在处理高并发静态资源时内存开销更小、吞吐量更高。
一个典型的 Nginx 配置由多个 server 块组成,每个 server 对应一个虚拟主机,内部通过 location 块匹配不同的 URI,实现静态文件服务、反向代理或重定向。配置遵循「继承 + 覆盖」的规则,全局指令位于 http 块,站点级指令位于 server 块。
实战步骤
1. 安装与基础命令
在 Ubuntu 上通过 APT 安装官方或系统源中的 Nginx:
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
nginx -v # 查看版本
sudo systemctl status nginx
安装完成后,默认站点根目录为 /var/www/html,主配置文件位于 /etc/nginx/nginx.conf,站点配置通常放在 /etc/nginx/sites-available/ 并通过软链接启用。
2. 配置虚拟主机
创建站点配置 /etc/nginx/sites-available/example.com:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
启用站点并重载配置:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t # 校验配置语法
sudo systemctl reload nginx
3. 反向代理与负载均衡
将请求代理到本机 3000 端口的 Node.js 应用,并配置超时与请求头:
upstream app_backend {
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:3001 weight=1;
keepalive 32;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://app_backend;
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_connect_timeout 5s;
proxy_read_timeout 60s;
}
}
upstream 块中的 weight 用于加权轮询,实现简单的负载均衡。keepalive 保持与后端的连接复用,减少握手开销。
4. 启用 HTTPS
使用 Let’s Encrypt 的 certbot 自动签发并续期证书:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
sudo systemctl status certbot.timer # 确认自动续期定时器
5. 性能调优
根据服务器 CPU 核数与内存调整 worker 相关参数:
worker_processes auto; # 自动匹配 CPU 核数
worker_connections 4096; # 每个 worker 的最大连接数
events {
worker_connections 4096;
use epoll;
}
http {
sendfile on; # 零拷贝发送文件
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on; # 开启 gzip 压缩
gzip_types text/plain text/css application/json application/javascript;
open_file_cache max=10000 inactive=30s;
}
此外,可限制请求速率防止滥用,并为响应添加缓存头:
limit_req_zone $binary_remote_addr zone=api:10m rate=20r/s;
server {
location /api/ {
limit_req zone=api burst=40 nodelay;
proxy_pass http://app_backend;
}
}
常见问题
1. 修改配置后不生效?
务必先执行 sudo nginx -t 校验语法,再执行 sudo systemctl reload nginx(热重载)而非 restart。reload 会平滑加载新配置,避免短暂中断服务。
2. 502 Bad Gateway?
通常是后端应用未启动、端口错误或超时配置过短。检查 journalctl -u nginx 与后端日志,确认 proxy_pass 地址与后端监听端口一致,并适当增大 proxy_read_timeout。
3. 权限导致 403?
确认站点根目录对 Nginx 运行用户(通常为 www-data)具备读权限,父目录具备执行权限,并检查是否有 SELinux/AppArmor 限制。
4. 如何查看当前生效的配置?
使用 nginx -T 可输出完整的合并后配置,便于排查继承与覆盖带来的困惑。
总结
本文从 Nginx 的架构原理出发,覆盖了安装、虚拟主机、反向代理、HTTPS 与性能调优等 Web 服务器运维的核心场景。掌握这些基础后,运维人员能够独立搭建稳定、安全的 Web 服务。调优并非一蹴而就,需要结合压测工具(如 ab、wrk)观察并发表现,逐步迭代参数。
下期预告:第 20 天将进入容器化时代,讲解 Docker 容器运维——安装、镜像与容器生命周期管理,敬请期待。

















暂无评论内容