Nginx 配置详解与优化指南
一、Nginx 核心配置解析
1. 配置文件结构
main # 全局配置(worker进程数、日志等)
events { # 事件模型配置
...
}
http { # HTTP服务配置
server { # 虚拟主机配置
listen 80;
server_name example.com;
location / { # URI路由配置
...
}
}
}
二、关键指令详解
1. 核心指令
指令 | 作用 | 示例 |
---|---|---|
worker_processes |
worker进程数 | worker_processes auto; |
worker_connections |
每个worker最大连接数 | worker_connections 1024; |
keepalive_timeout |
长连接超时时间 | keepalive_timeout 65; |
gzip |
启用压缩 | gzip on; |
access_log |
访问日志路径 | access_log /var/log/nginx/access.log; |
2. 最大并发计算
最大并发 = worker_processes × worker_connections
示例:4核CPU,每个worker支持1024连接4 × 1024 = 4096
并发连接
三、静态网站配置示例
1. 基础配置
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; # 文件存在性检查
}
location /images/ {
expires 7d; # 图片缓存7天
}
}
2. 指令解析
root
:定义请求的根目录,$uri
会拼接到该路径后index
:当请求目录时,按顺序尝试返回的默认文件location
:= /path
:精确匹配~ \.php$
:正则匹配(区分大小写)^~ /static/
:前缀匹配(不检查正则)
四、反向代理配置
1. 代理到后端应用
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend_server;
proxy_set_header Host $host; # 传递原始主机头
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream backend_server {
server 192.168.1.100:8080 weight=5;
server 192.168.1.101:8080;
keepalive 32; # 保持连接池
}
2. proxy_set_header Host $host
的作用
- 保持原始请求的
Host
头(而非后端服务器地址) - 解决:
- 虚拟主机识别问题
- 重定向丢失域名问题
- 应用生成绝对URL的需要
五、基于域名的虚拟主机
1. 多站点配置
server {
listen 80;
server_name site1.com;
root /var/www/site1;
...
}
server {
listen 80;
server_name site2.com;
root /var/www/site2;
...
}
2. 域名优势
- 灵活性:同一IP托管多个网站
- SEO优化:独立域名提升搜索排名
- 安全性:隔离不同服务的cookie和会话
- 维护性:独立配置和日志
六、本地测试配置(/etc/hosts)
1. 修改hosts文件
# /etc/hosts
127.0.0.1 site1.local
127.0.0.1 site2.local
2. 对应Nginx配置
server {
listen 80;
server_name site1.local;
root /var/www/site1;
}
3. 测试流程
- 浏览器访问
http://site1.local
- 系统检查
/etc/hosts
解析到127.0.0.1 - Nginx根据
server_name
匹配响应
七、性能优化技巧
1. 静态资源优化
location ~* \.(jpg|png|css|js)$ {
expires 30d; # 缓存30天
add_header Cache-Control "public";
access_log off; # 关闭日志
}
2. 动态内容优化
location ~ \.php$ {
proxy_cache my_cache;
proxy_cache_valid 200 5m; # 缓存200响应5分钟
proxy_pass http://php_backend;
}
3. 系统级优化
events {
worker_connections 2048;
multi_accept on; # 同时接受所有新连接
}
http {
sendfile on; # 零拷贝传输
tcp_nopush on; # 优化数据包发送
}
八、完整示例:电商站点配置
worker_processes auto;
events {
worker_connections 1024;
}
http {
upstream backend {
server 10.0.0.2:8000;
server 10.0.0.3:8000 backup;
}
server {
listen 80;
server_name shop.example.com;
root /var/www/shop;
index index.html;
location /static/ {
expires 7d;
}
location /api/ {
proxy_pass http://backend;
proxy_set_header Host $host;
}
location / {
try_files $uri /index.html;
}
}
}
关键总结
server_name
:实现基于域名的虚拟主机proxy_set_header Host $host
:确保代理后域名一致性/etc/hosts
:本地开发时模拟域名解析- 性能公式:并发能力 =
worker_processes × worker_connections
- 最佳实践:
- 静态资源启用缓存
- 动态内容使用反向代理
- 生产环境启用HTTPS
作者:admin 创建时间:2025-06-06 11:07
最后编辑:admin 更新时间:2025-06-07 09:49
最后编辑:admin 更新时间:2025-06-07 09:49