引言
Nginx是一个高性能的HTTP和反向代理服务器,同时也支持IMAP/POP3代理服务。Nginx以其高并发连接处理能力、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。
一、Nginx配置文件结构
# 全局配置块:影响nginx全局的配置
user root; # 运行用户
worker_processes auto; # worker进程数,通常设置为CPU核心数
error_log /var/log/nginx/error.log; # 错误日志路径
pid /run/nginx.pid; # 进程ID文件位置
# events块:配置影响nginx服务器或与用户的网络连接
events {
worker_connections 1024; # 每个worker进程的最大连接数
use epoll; # 事件驱动模型,Linux系统推荐使用epoll
}
# http块:配置代理、缓存、日志等绝大多数功能
http {
# 基础配置
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; # 访问日志路径和格式
# 优化配置
sendfile on; # 启用sendfile直接传输文件
tcp_nopush on; # 启用TCP_NOPUSH,在sendfile开启时使用
tcp_nodelay on; # 启用TCP_NODELAY,禁用Nagle算法
keepalive_timeout 65; # 保持连接超时时间
# 虚拟主机配置
server {
listen 80; # 监听端口
server_name example.com; # 域名
# 地址匹配配置
location / {
root /usr/share/nginx/html; # 网站根目录
index index.html index.htm; # 默认首页
}
# 错误页面配置
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
二、常用配置实例
-
反向代理配置
# 配置反向代理到后端服务
location /api/ {
proxy_pass http://backend-server:8080/; # 后端服务地址
proxy_set_header Host $host; # 设置请求头Host
proxy_set_header X-Real-IP $remote_addr; # 设置客户端真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60; # 连接超时时间
proxy_send_timeout 60; # 发送超时时间
proxy_read_timeout 60; # 读取超时时间
}
2. 负载均衡配置
# 定义后端服务器组
upstream backendGroup {
# 加权轮询策略
server 192.168.1.10:8080 weight=3; # 权重为3
server 192.168.1.11:8080 weight=2; # 权重为2
server 192.168.1.12:8080 weight=1; # 权重为1
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backendGroup; # 请求转发到backend服务器组
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. SSL配置
# HTTPS服务器配置
server {
listen 443 ssl; # 监听443端口,启用SSL
server_name example.com;
ssl_certificate cert/cert.pem; # SSL证书文件路径
ssl_certificate_key cert/key.pem; # SSL私钥文件路径
# SSL优化配置
ssl_session_cache shared:SSL:1m; # SSL会话缓存
ssl_session_timeout 5m; # SSL会话超时时间
ssl_ciphers HIGH:!aNULL:!MD5; # 使用的加密套件
ssl_prefer_server_ciphers on; # 优先使用服务器端的加密套件
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
4.开启gzip压缩
# 启用gzip压缩
gzip on;
gzip_min_length 1k; # 最小压缩文件大小
gzip_comp_level 6; # 压缩级别1-9,越大压缩率越高但越耗CPU
gzip_types text/plain text/css application/json application/javascript; # 要压缩的文件类型
gzip_vary on; # 添加Vary: Accept-Encoding头
5.配置缓存
# 静态文件缓存配置
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d; # 静态文件缓存7天
add_header Cache-Control public;
access_log off; # 关闭访问日志
}
6.安全相关配置
# 安全相关配置
server {
# 隐藏版本号
server_tokens off;
# 防止XSS攻击
add_header X-XSS-Protection "1; mode=block";
# 防止点击劫持
add_header X-Frame-Options "SAMEORIGIN";
# 防止MIME类型嗅探
add_header X-Content-Type-Options nosniff;
}