mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
1547 字
4 分钟
Nginx安装&使用详细教程

Nginx 完全指南:高性能 Web 服务器与反向代理实战#

Nginx(发音为 “engine x”)是一款轻量级、高性能的 Web 服务器和反向代理服务器,由俄罗斯程序员 Igor Sysoev 开发。凭借其事件驱动的异步架构,Nginx 在处理高并发连接时表现出色,已成为全球最流行的 Web 服务器之一,广泛用于静态资源服务、反向代理、负载均衡、API 网关等场景。

本文将带你从零开始在 Ubuntu 上安装和配置 Nginx,深入理解其核心概念,并通过实际案例掌握常见应用场景,助你打造高可用、高性能的 Web 服务。

1. Nginx 简介#

Nginx 最初是为了解决 C10K 问题(同时处理一万个并发连接)而设计,其采用多进程 + 事件驱动的异步非阻塞模型,相比 Apache 的进程/线程模型,在内存占用和并发处理能力上优势明显。

主要功能

  • 静态文件服务:高效处理图片、CSS、JS 等静态资源
  • 反向代理:将客户端请求转发到后端服务器(如 Tomcat、Node.js、Python 应用)
  • 负载均衡:将请求分发到多个后端实例,提升可用性
  • SSL/TLS 终止:处理 HTTPS 加密,减轻后端压力
  • 缓存:缓存静态内容或后端响应,减少延迟
  • URL 重写与重定向:灵活的路径控制

2. 安装 Nginx#

2.1 使用 APT 安装(推荐)#

Ubuntu 官方仓库中包含稳定版 Nginx,安装简单:

sudo apt update
sudo apt install nginx -y

安装完成后,Nginx 服务会自动启动。检查状态:

sudo systemctl status nginx

2.2 验证安装#

访问服务器 IP 地址,若看到 Nginx 欢迎页,则安装成功。

curl http://localhost

2.3 Nginx 服务管理#

操作命令
启动sudo systemctl start nginx
停止sudo systemctl stop nginx
重启sudo systemctl restart nginx
重载配置sudo systemctl reload nginx
开机自启sudo systemctl enable nginx

3. Nginx 目录与文件结构#

通过 APT 安装的 Nginx 主要目录如下:

路径说明
/etc/nginx/主配置目录
/etc/nginx/nginx.conf主配置文件
/etc/nginx/sites-available/可用站点配置
/etc/nginx/sites-enabled/已启用站点配置(软链接)
/etc/nginx/conf.d/额外配置文件
/var/www/html/默认网站根目录
/var/log/nginx/访问日志和错误日志

4. Nginx 配置文件结构#

Nginx 配置文件采用层级结构,核心是 http 块,内部包含 server 块,server 块内可包含 location 块。

# /etc/nginx/nginx.conf 主配置文件结构
user www-data; # 运行用户
worker_processes auto; # 工作进程数(通常等于CPU核心数)
pid /run/nginx.pid;
events {
worker_connections 768; # 每个工作进程最大连接数
multi_accept on;
}
http {
# 基础设置
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 日志格式
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# 虚拟主机配置
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

4.1 server 块#

一个 server 块定义一个虚拟主机,可监听不同端口或域名。

server {
listen 80; # 监听端口
server_name example.com; # 域名
root /var/www/example.com; # 网站根目录
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}

4.2 location 块#

location 块用于匹配 URL 路径,实现不同的处理逻辑。

location / {
# 匹配根路径
}
location /images/ {
# 匹配以 /images/ 开头的路径
}
location ~ \.php$ {
# 正则匹配 .php 结尾的请求
}

5. 虚拟主机配置#

5.1 创建网站目录#

sudo mkdir -p /var/www/example.com
sudo chown -R $USER:$USER /var/www/example.com

创建测试页面:

echo "<h1>Hello from example.com</h1>" | sudo tee /var/www/example.com/index.html

5.2 创建配置文件#

/etc/nginx/sites-available/ 下创建配置文件 example.com

server {
listen 80;
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;
}
}

5.3 启用站点#

创建软链接到 sites-enabled

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

5.4 测试配置并重载#

sudo nginx -t # 测试配置文件语法
sudo systemctl reload nginx

此时通过域名或 IP 访问即可看到页面。

6. 反向代理配置#

反向代理是 Nginx 最常用的功能之一,将客户端请求转发到后端应用服务器(如 Node.js、Java、Python)。

6.1 基础反向代理#

将所有请求代理到本地的 http://localhost:3000

server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://localhost: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;
}
}

常用 proxy_set_header 指令用于传递客户端真实信息。

6.2 WebSocket 代理#

WebSocket 需要特殊配置,增加升级头:

location /ws/ {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}

7. 负载均衡#

Nginx 支持多种负载均衡算法,将流量分发到多个后端服务器。

7.1 上游定义#

http 块内定义上游服务器组:

upstream backend {
server backend1.example.com weight=3;
server backend2.example.com;
server backend3.example.com backup; # 备份服务器
}

7.2 算法#

  • 轮询(默认):server 192.168.1.1; server 192.168.1.2;
  • 权重轮询server 192.168.1.1 weight=3; server 192.168.1.2 weight=1;
  • IP 哈希(保持会话):ip_hash;
  • 最少连接least_conn;

7.3 反向代理中使用#

server {
listen 80;
server_name app.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

8. HTTPS 配置(SSL/TLS)#

8.1 使用 Let’s Encrypt 免费证书#

安装 Certbot:

sudo apt install certbot python3-certbot-nginx -y

申请并自动配置证书:

sudo certbot --nginx -d example.com -d www.example.com

Certbot 会自动修改 Nginx 配置文件并启用 HTTPS。

8.2 手动配置 SSL#

如果已有证书,可手动配置:

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/example.com;
index index.html;
}

8.3 强制重定向 HTTP 到 HTTPS#

server {
listen 80;
listen [::]:80;
server_name example.com;
return 301 https://$server_name$request_uri;
}

9. 缓存配置#

Nginx 可以缓存静态文件或后端响应,减少重复请求。

9.1 浏览器缓存(静态资源)#

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}

9.2 代理缓存#

定义缓存路径和参数:

http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=mycache:10m inactive=60m;
proxy_cache_key "$scheme$request_method$host$request_uri";
server {
location / {
proxy_cache mycache;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_pass http://backend;
}
}
}

10. 日志配置#

Nginx 日志包括访问日志和错误日志,可自定义格式。

10.1 自定义日志格式#

http 块中定义:

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 /var/log/nginx/access.log main;

10.2 按站点区分日志#

server 块中单独指定:

server {
access_log /var/log/nginx/example.com.access.log main;
error_log /var/log/nginx/example.com.error.log warn;
}

11. 性能优化#

11.1 调整工作进程数#

worker_processes 通常设为 CPU 核心数:

worker_processes auto;

11.2 连接数优化#

events {
worker_connections 10240;
multi_accept on;
}

11.3 开启 sendfile#

sendfile on;
tcp_nopush on;

11.4 Gzip 压缩#

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss application/rss+xml image/svg+xml;

11.5 客户端缓冲优化#

client_max_body_size 100M;
client_body_buffer_size 128k;
client_header_buffer_size 1k;

12. 安全加固#

12.1 隐藏 Nginx 版本号#

server_tokens off;

12.2 限制请求方法#

if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 405;
}

12.3 限制 IP 访问#

location /admin {
allow 192.168.1.0/24;
deny all;
}

12.4 禁用不安全的 SSL 协议#

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

13. 常见问题排查#

问题排查方法
配置测试失败sudo nginx -t 查看具体错误行号
502 Bad Gateway检查后端服务是否运行;查看 error.log
404 Not Found检查 root 路径是否正确;检查 location 匹配规则
权限不足确保 Nginx 用户(www-data)对网站目录有读取权限
端口被占用sudo netstat -tulpn | grep 80 查看占用进程
重定向循环检查 HTTPS 重定向配置,避免循环跳转

14. 总结#

Nginx 以其卓越的性能和灵活的配置,已成为现代 Web 架构中不可或缺的一环。本文从安装配置入手,介绍了虚拟主机、反向代理、负载均衡、HTTPS、缓存、性能优化等核心功能,覆盖了日常使用的大部分场景。

无论是作为静态服务器、API 网关,还是作为微服务架构的流量入口,Nginx 都能胜任。通过不断实践,你可以充分发挥其强大能力,构建高可用、高并发的 Web 服务。

进一步学习资源

温馨提示:生产环境中务必定期备份配置文件,并保持 Nginx 版本更新,以获得最新的安全补丁和性能改进。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Nginx安装&使用详细教程
http://blog.mcstarland.top/posts/nginx/
作者
MEMZGBL
发布于
2026-03-26
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00