外观
常用配置示例
1. 反向代理配置
这是 Nginx 用作反向代理服务器的常见配置,通常用于将客户端请求转发到后端应用服务器(如 Node.js、Python、Java 等)。
# 定义一个 HTTP 服务块
http {
# 启用反向代理功能,将所有请求转发给后端应用服务器
server {
listen 80; # 监听 HTTP 请求的 80 端口
server_name example.com; # 配置服务器域名
# 配置访问日志格式和路径
access_log /var/log/nginx/access.log;
# 定义反向代理规则
location / {
proxy_pass http://127.0.0.1:3000; # 将所有请求转发到本地 3000 端口的应用服务器
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)
}
}
}适用情况:
- 反向代理:将客户端请求转发到后端服务器。
- 负载均衡:Nginx 作为反向代理服务器时,可以实现负载均衡,将请求分发给多台后端服务器。
- 客户端与后端隔离:通过反向代理,隐藏后端服务器的细节。
2. 负载均衡配置
使用 Nginx 实现简单的负载均衡,将流量分配给多台后端应用服务器。
# 定义 HTTP 服务块
http {
upstream backend_servers { # 配置上游服务器组
server 192.168.1.100:8080; # 第一个后端服务器
server 192.168.1.101:8080; # 第二个后端服务器
server 192.168.1.102:8080; # 第三个后端服务器
}
# 配置负载均衡的 HTTP 服务
server {
listen 80; # 监听 HTTP 请求的 80 端口
server_name example.com; # 配置服务器域名
location / {
proxy_pass http://backend_servers; # 转发请求到 upstream 定义的服务器组
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; # 传递原始的 X-Forwarded-For 头部
proxy_set_header X-Forwarded-Proto $scheme; # 保留请求的协议类型
}
}
}适用情况:
- 负载均衡:将流量均衡地分发到多台后端应用服务器,提升性能和可用性。
- 高可用性:通过多个后端服务器和负载均衡机制,即使某一台服务器宕机,Nginx 也能自动将流量切换到其他服务器。
3. SSL 配置(HTTPS)
为网站启用 SSL 以加密客户端和服务器之间的通信,确保数据传输的安全性。
server {
listen 443 ssl; # 启用 HTTPS,监听 443 端口
server_name example.com; # 配置服务器域名
# SSL 配置
ssl_certificate /etc/nginx/ssl/example.com.crt; # 证书文件路径
ssl_certificate_key /etc/nginx/ssl/example.com.key; # 私钥文件路径
ssl_protocols TLSv1.2 TLSv1.3; # 启用 TLS 协议版本
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384'; # 配置支持的加密套件
# 配置 HTTPS 访问的首页和静态文件
location / {
root /var/www/html; # 配置根目录
index index.html; # 默认首页
}
# 强制 HTTP 请求重定向到 HTTPS
error_page 497 https://$host$request_uri; # 如果客户端访问的是 HTTP 协议,则重定向到 HTTPS
}适用情况:
- HTTPS 加密:确保所有通信通过加密的 HTTPS 协议传输,增强数据安全性。
- 强制 HTTPS:强制所有 HTTP 请求都被重定向到 HTTPS,确保网站始终通过加密连接访问。
4. 缓存配置
使用 Nginx 进行静态文件的缓存,可以大大提高性能和响应速度。
server {
listen 80; # 监听 HTTP 请求
server_name example.com; # 配置服务器域名
location /images/ {
root /var/www/html; # 静态文件的根目录
expires 30d; # 设置文件缓存时间为 30 天
add_header Cache-Control "public, max-age=2592000"; # 强制浏览器缓存静态资源
}
location /css/ {
root /var/www/html; # 静态文件的根目录
expires 7d; # 设置文件缓存时间为 7 天
add_header Cache-Control "public, max-age=604800"; # 强制浏览器缓存静态资源
}
}适用情况:
- 静态资源缓存:为图片、CSS、JavaScript 等静态资源配置缓存,减轻服务器负担并提升加载速度。
- 提高性能:通过缓存机制减少静态文件的重复加载,提升用户体验。
5. URL 重写(Redirects)
将旧的网址重定向到新的网址,常用于网站迁移、SEO 或 URL 优化。
server {
listen 80; # 监听 HTTP 请求
server_name oldsite.com; # 配置旧域名
# 配置 301 永久重定向
location / {
rewrite ^/(.*)$ https://newsite.com/$1 permanent; # 将所有请求重定向到新网站,保持路径不变
}
}适用情况:
- 网站迁移:将旧网站的请求重定向到新网站,确保用户访问旧域名时自动跳转。
- SEO 优化:使用 301 重定向将过时的 URL 指向新的优化 URL,确保搜索引擎能够更新索引。
6. 限流配置
为防止流量过大导致服务器崩溃,可以使用 Nginx 的限流功能,控制每秒的请求数量。
http {
# 配置限流
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=1r/s; # 每个 IP 每秒最多允许 1 次请求
server {
listen 80;
server_name example.com;
location / {
limit_req zone=req_limit_per_ip burst=5 nodelay; # 允许突发请求数为 5,但超过 1 次请求/秒的会被拒绝
root /var/www/html;
index index.html;
}
}
}适用情况:
- 防止恶意攻击:防止 DDoS 攻击或暴力破解等恶意请求。
- 控制流量:确保服务器不会因为过多的并发请求而崩溃,保障正常服务。
7. 访问控制配置
限制某些 IP 地址或者用户访问特定的资源或路径。
server {
listen 80;
server_name example.com;
# 限制某些 IP 地址访问
location /admin {
allow 192.168.1.100; # 允许指定 IP 地址访问
deny all; # 拒绝其他所有 IP 地址访问
root /var/www/html;
}
}适用情况:
- 后台管理保护:限制管理员后台的访问,只允许特定 IP 地址访问,提高安全性。
- 防止暴力破解:控制对某些敏感页面的访问,减少恶意访问的风险。