【全国公司简易注销公告登记入口】>>>
【全国企业年报网上申报公示入口】>>>
【全国市场监督管理局信息查询】>>>
【全国办税服务厅地址电话信息查询】
【全国教师资格认定机构地址咨询电话】
全部服务分类
这是一份详细的 Nginx 配置说明教程,从基础概念到核心配置,再到实用场景,旨在帮助您系统性地掌握 Nginx 配置。
Nginx 以其高性能、高稳定性和低资源消耗而闻名,是现代 Web 架构的基石。理解其配置是有效使用 Nginx 的关键。
1. 配置文件位置
2. 配置文件结构
Nginx 配置文件由 指令 和 上下文块 组成,层次分明。
# 全局上下文 (Main Context) # 设置影响Nginx全局的指令,如工作进程数、用户、日志等。 user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # events上下文 # 设置影响Nginx与客户端网络连接的参数。 events { worker_connections 1024; # 每个工作进程的最大连接数 use epoll; # 使用高效的事件模型(Linux) } # http上下文 # 所有HTTP相关的配置都嵌套在此上下文中。 http { # 引入MIME类型定义 include /etc/nginx/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 /var/log/nginx/access.log main; # 服务器上下文 (Server Context) # 定义一个虚拟主机(Virtual Host),监听特定的端口和域名。 server { listen 80; # 监听80端口 server_name example.com www.example.com; # 监听的域名 # 位置上下文 (Location Context) # 根据请求的URI来匹配和处理请求。 location / { root /usr/share/nginx/html; # 网站根目录 index index.html index.htm; # 默认索引文件 } location /images/ { # 匹配以 /images/ 开头的请求 root /data; # 最终文件路径为:/data/images/<请求的文件> }
} # 可以定义多个server块来托管多个网站 server { listen 80; server_name another-site.com; # ... 另一个站点的配置 }
}
3. 配置文件的继承与优先级
1. 静态文件服务
这是 Nginx 最基本也是最常用的功能。
server { listen 80; server_name example.com; location / { root /var/www/html; # 根目录 index index.html; # 默认首页 # 开启高效文件传输 sendfile on; # 防止大文件阻塞sendfile tcp_nopush on;
} # 为静态资源(如图片、CSS、JS)设置缓存,提升性能 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { root /var/www/html; expires 30d; # 设置浏览器缓存过期时间为30天 add_header Cache-Control "public, immutable";
}
}
2. 反向代理
将客户端的请求转发到后端的应用服务器(如 Tomcat, Node.js, Gunicorn 等)。
server { listen 80; server_name myapp.com; location / { # 核心代理指令:将请求传递给后端服务器组 ‘backend_server’ proxy_pass http://backend_server; # 以下指令确保后端服务器能获取到客户端的真实信息 proxy_set_header Host $host; # 传递原始域名 proxy_set_header X-Real-IP $remote_addr; # 传递客户端真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 传递代理IP链 proxy_set_header X-Forwarded-Proto $scheme; # 传递原始协议(http/https) # 超时设置 proxy_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 60s;
}
} # 定义上游服务器组,支持负载均衡 upstream backend_server { # 负载均衡算法,默认为轮询 (round-robin) # 其他算法:least_conn(最少连接)、ip_hash(IP哈希,用于会话保持) # ip_hash; server 192.168.1.100:8080 weight=3; # weight表示权重,值越大分配请求越多 server 192.168.1.101:8080; server 192.168.1.102:8080 down; # 标记为下线,不参与负载 server 192.168.1.103:8080 backup; # 备份服务器,只有当其他服务器都不可用时才启用 }
3. 负载均衡
如上例中的 upstream 模块,Nginx 支持多种负载均衡算法,轻松实现应用的水平扩展。
4. HTTPS/SSL 配置
使用 SSL 证书加密网站流量。
server { listen 443 ssl http2; # 监听443端口,启用SSL和HTTP/2 server_name example.com; # SSL证书路径 ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; # SSL安全配置 ssl_protocols TLSv1.2 TLSv1.3; # 启用安全的协议版本 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; # 启用HSTS,强制浏览器使用HTTPS add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; location / { proxy_pass http://backend_server; # ... 其他代理设置 }
} # 强制将HTTP请求重定向到HTTPS server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; # 301永久重定向 }
1. 路径重写(Rewrite)
常用于伪静态、URL 美化或框架路由。
location /api/ { # 将 /api/users 重写为 /users?api=true rewrite ^/api/(.*)$ /$1?api=true break; proxy_pass http://backend_server;
} # 单页应用(如Vue, React)路由配置 location / { try_files $uri $uri/ /index.html; # 尝试按顺序寻找文件,若都找不到则返回index.html }
2. 访问控制
限制特定 IP 的访问。
location /admin/ { deny 192.168.1.5; # 拒绝单个IP allow 192.168.1.0/24; # 允许一个网段 deny all; # 拒绝所有其他IP # ... 其他配置 }
3. 启用 Gzip 压缩
减少传输数据量,提升加载速度。
http { gzip on; gzip_vary on; gzip_min_length 1024; # 只压缩大于1KB的文件 gzip_types text/plain
text/css
text/xml
text/javascript
application/javascript
application/json
image/svg+xml;
}
4. 限制请求速率
防止恶意攻击或流量滥用。
# 在http块中定义限流zone http { limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
} server { location /api/ { limit_req zone=api_limit burst=20 nodelay; # 速率限制:10req/s,突发队列20 proxy_pass http://backend_server;
}
}
1.检查配置语法是否正确(极其重要!)
sudo nginx -t
输出 syntax is ok 和 test is successful 表示配置正确。
2.重新加载配置(不中断服务)
sudo nginx -s reload
3.停止 Nginx
sudo nginx -s stop # 快速停止 sudo nginx -s quit # 优雅停止(处理完当前请求)
4.查看 Nginx 版本和编译信息
nginx -V
核心思想:Nginx 配置是一个由外到内、由全局到局部的匹配过程。理解 http -> server -> location 的层次关系,是灵活配置的钥匙。从简单的静态服务器到复杂的反向代理和负载均衡网关,Nginx 都能通过清晰的配置文件胜任。