nginx 是一款高性能的 HTTP 和反向代理服务器,广泛应用于 Web 服务部署,其特点是轻量级、高并发、低内存消耗,同时具备丰富的功能模块,以下从安装配置、核心功能优化、安全加固等方面详细介绍如何使用 nginx 搭建 Web 服务器。

环境准备与安装
在搭建 nginx Web 服务器前,需确保系统满足基本环境要求(以 Linux 为例,推荐 CentOS 7+ 或 Ubuntu 18.04+),首先更新系统软件包,并安装必要的依赖库,如 gcc、pcre、openssl、zlib 等,这些是编译 nginx 所需的核心组件。
编译安装(推荐)
通过编译安装可灵活选择功能模块,适合定制化需求,下载 nginx 最新稳定版源码(官网获取),执行以下命令:
# 安装依赖 yum install -y gcc pcre-devel openssl-devel zlib-devel # CentOS apt install -y gcc libpcre3-dev libssl-dev zlib1g-dev # Ubuntu # 下载并解压 wget http://nginx.org/download/nginx-1.24.0.tar.gz tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0 # 配置编译参数(可自定义模块) ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module # 编译安装 make && make install
编译完成后,nginx 将安装到 /usr/local/nginx 目录,其核心配置文件为 conf/nginx.conf,可执行文件位于 sbin/nginx。
服务管理
为方便使用,可将 nginx 注册为系统服务,创建服务文件 /usr/lib/systemd/system/nginx.service如下:
[Unit] Description=The NGINX HTTP and reverse proxy server After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop PIDFile=/usr/local/nginx/logs/nginx.pid [Install] WantedBy=multi-user.target
执行 systemctl enable --now nginx 启动并设置开机自启。
核心配置与功能实现
nginx 的核心功能通过配置文件实现,以下以典型 Web 服务场景为例,介绍关键配置项。
基础 HTTP 服务配置
编辑 conf/nginx.conf,定义 HTTP 服务块(server 块),包含监听端口、域名、根目录等基本参数:
http {
include mime.types;
default_type application/octet-stream;
# 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
# Web 服务配置
server {
listen 80;
server_name www.example.com localhost;
root html; # 网站根目录,绝对路径如 /data/www
index index.html index.htm;
# 访问规则示例
location / {
try_files $uri $uri/ =404;
}
# 错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
listen:监听端口,可配置 IP:PORT 或仅端口;server_name:虚拟主机域名,支持多个域名(空格分隔)或通配符(如*.example.com);root:网站文件根目录,需确保目录存在且 nginx 进程有读取权限;location:匹配 URL 路径,try_files用于检查文件是否存在,避免 404 错误。
静态资源优化
nginx 作为静态资源服务器时,可通过调整缓存、压缩等参数提升性能:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d; # 缓存7天
add_header Cache-Control "public, no-cache";
gzip on; # 开启压缩
gzip_types text/plain application/json text/css application/javascript;
gzip_min_length 1k;
}
expires:设置浏览器缓存时间,减少重复请求;gzip:对文本类文件压缩,降低传输数据量。
负载均衡配置
当需要多台服务器共同处理请求时,可通过 upstream 模块实现负载均衡:
http {
upstream backend {
least_conn; # 最少连接数策略
server 192.168.1.10:8000 weight=3; # 权重3
server 192.168.1.11:8000 weight=1;
server 192.168.1.12:8000 backup; # 备用服务器
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
least_conn:动态选择最少连接的后端服务器,适合长连接场景;weight:权重值越高,分配的请求比例越大;backup:仅在其他服务器不可用时启用。
安全加固措施
为保障 Web 服务安全,需从访问控制、协议安全、防攻击等方面进行配置:
访问控制
- IP 白名单:限制仅允许特定 IP 访问敏感路径:
location /admin/ { allow 192.168.1.0/24; deny all; } - 基本认证:对目录或文件设置用户名密码(需依赖
htpasswd工具生成密码文件):location /private/ { auth_basic "Restricted Area"; auth_basic_user_file /etc/nginx/.htpasswd; }
协议与证书配置
启用 HTTPS 可提升数据传输安全性,需配置 SSL 证书(以 Let's Encrypt 免费证书为例):
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
}
http2:启用 HTTP/2 协议,提升多路复用性能;ssl_protocols:限制 TLS 版本,禁用不安全的 SSLv3/TLSv1.0。
防攻击配置
-
防恶意爬虫:通过 User-Agent 限制爬虫访问:
if ($http_user_agent ~* "bot|crawler|spider") { return 403; } -
防 DDOS 攻击:限制单 IP 连接数和请求频率:
limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m; limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=10r/s; location / { limit_conn conn_limit_per_ip 10; limit_req zone=req_limit_per_ip burst=20 nodelay; }
监控与维护
状态监控
启用 stub_status 模块可查看服务器连接状态:
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
访问 http://server_ip/nginx_status,可显示当前活跃连接、连接总数等统计信息。
日志分析
nginx 日志包含丰富的访问信息,可通过 awk、grep 或 ELK 等工具分析,例如统计 Top 10 访问 IP:
awk '{print $1}' logs/access.log | sort | uniq -c | sort -nr | head -10
相关问答FAQs
Q1:nginx 502 错误如何解决?
A:502 错误通常表示后端服务不可用或 nginx 与后端通信异常,排查步骤:
- 检查后端服务是否正常运行(如 PHP-FPM、Tomcat 等);
- 确认
proxy_pass配置的后端 IP 和端口是否正确; - 检查防火墙或安全组是否允许 nginx 服务器访问后端端口;
- 查看 nginx 错误日志(
logs/error.log),定位具体错误原因(如连接超时、后端无响应等)。
Q2:如何优化 nginx 的高并发性能?
A:可从以下方面优化:
- 调整 worker 进程数:设置为 CPU 核心数,通过
worker_processes auto;自动检测; - 优化连接参数:增大
worker_connections(如worker_connections 65535;),结合worker_processes计算最大并发数(worker_processes * worker_connections); - 开启高效模式:启用
sendfile on、tcp_nopush on、tcp_nodelay on减少网络 IO 消耗; - 减少日志开销:生产环境可关闭 access 日志或关闭不必要字段(如
$http_x_forwarded_for); - 使用内核参数调优:调整
/etc/sysctl.conf中的net.core.somaxconn(增大监听队列)、net.ipv4.tcp_tw_reuse(复用 TIME_WAIT 连接)等参数。
