Nginx 配置详解_nginx配置
Nginx 是一款高性能的 Web 服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在互联网领域应用广泛。其配置文件采用模块化结构,通过配置文件可以灵活实现负载均衡、动静分离、虚拟主机等功能。
一、配置文件基础结构
Nginx 的主配置文件通常位于/etc/nginx/nginx.conf
,其他配置文件可通过include
指令包含进来:
# 全局块:配置影响nginx全局的指令,通常是和nginx服务运行相关的参数user nginx; # 运行用户worker_processes 1; # 工作进程数,通常设置为CPU核心数# 错误日志配置error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;# events块:影响nginx服务器与用户的网络连接events { worker_connections 1024; # 每个工作进程的最大连接数}# 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; keepalive_timeout 65; # 虚拟主机配置 include /etc/nginx/conf.d/*.conf;}
二、配置块详解
Nginx 配置块详解-CSDN博客
三、虚拟主机配置 (server 块)
虚拟主机是 Nginx 最常用的功能之一,可以在一台服务器上运行多个网站:
# 基于域名的虚拟主机配置server { listen 80; # 监听端口 server_name example.com; # 域名 # 访问日志 access_log /var/log/nginx/example.access.log; # 默认请求处理 location / { root /var/www/example; # 网站根目录 index index.html index.htm; # 默认首页文件 } # 错误页面配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}# 另一个虚拟主机server { listen 80; server_name blog.example.com; location / { proxy_pass http://127.0.0.1:8080; # 反向代理到后端服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}
四、反向代理与负载均衡配置
Nginx 最强大的功能之一就是反向代理和负载均衡:
# 定义后端服务器集群upstream backend_servers { # 轮询调度(默认) server 192.168.1.100:8080 weight=5; # 权重为5 server 192.168.1.101:8080 weight=3; # 权重为3 server 192.168.1.102:8080 weight=2; # 权重为2 # 会话保持(基于IP哈希) # ip_hash; # 健康检查 keepalive 32;}server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; # 代理到后端集群 # 常用代理头设置 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_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 缓冲区设置 proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k; }}
五、动静分离配置
将动态请求和静态请求分开处理,提高性能:
server { listen 80; server_name example.com; # 静态文件处理 location ~* \\.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { root /var/www/static; # 静态文件目录 expires 7d; # 缓存7天 access_log off; # 关闭访问日志 add_header Cache-Control \"public\"; } # 动态请求处理 location / { proxy_pass http://backend_servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}
六、HTTPS 配置
配置 HTTPS 需要 SSL 证书:
server { listen 80; server_name example.com; return 301 https://$host$request_uri; # 强制跳转HTTPS}server { listen 443 ssl; server_name example.com; # SSL证书配置 ssl_certificate /path/to/cert.pem; # 证书文件 ssl_certificate_key /path/to/key.pem; # 私钥文件 # SSL会话缓存 ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # SSL协议和加密算法 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers \"ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384\"; # 其他配置 location / { root /var/www/example; index index.html; }}
七、访问控制配置
限制特定 IP 或用户访问:
server { listen 80; server_name example.com; # 基于IP的访问控制 location /admin { deny 192.168.1.1; # 拒绝单个IP allow 192.168.1.0/24; # 允许整个网段 allow 10.1.1.0/16; deny all; # 拒绝其他所有 } # 基于密码的访问控制 location /private { auth_basic \"Restricted Area\"; auth_basic_user_file /etc/nginx/.htpasswd; }}
八、缓存配置
配置 Nginx 缓存可以显著提高性能:
http { # 定义缓存区域 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; # 启用缓存 proxy_cache my_cache; proxy_cache_valid 200 302 10m; # 200和302状态码缓存10分钟 proxy_cache_valid 404 1m; # 404状态码缓存1分钟 # 设置缓存键 proxy_cache_key \"$scheme$request_method$host$request_uri\"; # 缓存控制头 add_header X-Cache $upstream_cache_status; } }}
九、Gzip 压缩配置
启用 Gzip 可以减小传输数据量,提高加载速度:
http { # Gzip压缩配置 gzip on; gzip_disable \"msie6\"; # 对IE6禁用 # 压缩级别和类型 gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;}
十、常见问题与优化
1)配置加载:修改配置后无需重启服务
nginx -s reload
2)检查配置语法:修改配置后检查语法是否正确
nginx -t
3)优化建议:
- worker_processes 设置为 CPU 核心数
- 根据内存大小调整 worker_connections
- 静态文件使用长缓存策略
- 启用 HTTP/2 提高传输效率
- 使用 sendfile 加速文件传输
4)性能监控:
location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all;}
- 通过 stub_status 模块获取 Nginx 状态
Nginx 的配置非常灵活,可以根据实际需求进行定制。以上只是一些常见的配置示例,实际使用时需要根据服务器性能、应用特点和访问量进行调整和优化。