news 2026/4/18 3:31:43

Nginx 配置示例及核心模块详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx 配置示例及核心模块详解

Nginx 配置详解

一、配置文件结构

# 全局块(主配置) main # 事件块 events { ... } # HTTP 块 http { # HTTP 全局配置 ... # 虚拟主机块(一个或多个) server { # 服务器配置 ... # 位置块(一个或多个) location { ... } } # 可包含其他配置文件 include /etc/nginx/conf.d/*.conf; }

二、核心模块详解

1. 全局配置(main context)
user nginx nginx; # 运行用户和组 worker_processes auto; # 工作进程数(auto = CPU核心数) error_log /var/log/nginx/error.log warn; # 错误日志 pid /var/run/nginx.pid; # PID文件 worker_rlimit_nofile 65535; # 文件描述符限制
2. 事件模块(events context)
events { worker_connections 1024; # 每个worker最大连接数 use epoll; # 事件驱动模型(Linux) multi_accept on; # 同时接受多个连接 accept_mutex off; # 连接互斥锁 }
3. HTTP模块(http context)

基础配置:

http { include /etc/nginx/mime.types; # MIME类型 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; # 高效文件传输 tcp_nopush on; # TCP优化 tcp_nodelay on; # 禁用Nagle算法 keepalive_timeout 65; # 长连接超时 client_max_body_size 20m; # 最大上传文件大小 # Gzip压缩 gzip on; gzip_comp_level 6; gzip_types text/plain text/css application/json; # 上游服务器(负载均衡) upstream backend { server 192.168.1.100:8080 weight=3; server 192.168.1.101:8080; server 192.168.1.102:8080 backup; # 负载均衡策略:轮询(默认)、ip_hash、least_conn } }
4. 虚拟主机(server context)
server { listen 80; # 监听端口 listen [::]:80 ipv6only=on; # IPv6 server_name example.com www.example.com; # 域名 # 根目录和索引 root /var/www/html; index index.html index.htm index.php; # 字符集 charset utf-8; # SSL配置(HTTPS) listen 443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; # 重定向HTTP到HTTPS if ($scheme != "https") { return 301 https://$host$request_uri; } # 安全头 add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; add_header X-XSS-Protection "1; mode=block"; }
5. 位置块(location context)
location / { # 匹配所有请求 try_files $uri $uri/ /index.php?$query_string; } # 精确匹配(=) location = /api { # 仅匹配 /api } # 正则匹配(~ 区分大小写,~* 不区分) location ~ \.(jpg|png|gif)$ { expires 30d; # 缓存控制 add_header Cache-Control "public, immutable"; } # 前缀匹配(^~) location ^~ /static/ { # 匹配 /static/ 开头的URI alias /var/www/static/; } # API代理 location /api/ { proxy_pass http://backend; 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_connect_timeout 30s; proxy_read_timeout 30s; proxy_send_timeout 30s; } # PHP处理 location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }

三、高级配置示例

1. 负载均衡
upstream app_cluster { least_conn; # 最少连接数 server app1.example.com:8080 max_fails=3 fail_timeout=30s; server app2.example.com:8080; server app3.example.com:8080 down; # 临时下线 keepalive 32; # 连接池 }
2. 缓存代理
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g; location / { proxy_cache my_cache; proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; proxy_cache_use_stale error timeout updating; }
3. 限流
# 限制连接数 limit_conn_zone $binary_remote_addr zone=perip:10m; # 限制请求速率 limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; location /api/ { limit_conn perip 10; # 每个IP最多10个连接 limit_req zone=perip burst=20 nodelay; # 令牌桶算法 }
4. 反向代理WebSocket
location /ws/ { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }

四、配置最佳实践

  1. 安全配置:
# 隐藏Nginx版本号 server_tokens off; # 限制请求方法 if ($request_method !~ ^(GET|POST|HEAD)$) { return 405; } # 防止目录遍历 autoindex off; # 禁用不需要的HTTP方法 location / { limit_except GET POST { deny all; } }
  1. 性能优化:
# 文件缓存 open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; # 缓冲优化 proxy_buffers 8 16k; proxy_buffer_size 32k; client_body_buffer_size 128k; # TCP优化 sendfile_max_chunk 512k;
  1. 日志管理:
# 按天分割日志(在crontab中配置) access_log /var/log/nginx/access-$(date +%Y%m%d).log; # 排除静态文件日志 location ~* \.(jpg|css|js)$ { access_log off; log_not_found off; }

五、调试和测试

# 检查配置语法nginx -t# 测试配置并显示解析结果nginx -T# 重新加载配置(不中断服务)nginx -s reload# 调试特定问题error_log /var/log/nginx/error.log debug;

六、常用变量

$remote_addr # 客户端IP $http_host # 请求主机头 $request_uri # 完整请求URI $args # 查询参数 $scheme # 协议(http/https) $server_name # 服务器名 $content_length # 请求体长度 $http_user_agent # 用户代理 $status # 响应状态码

七、配置组织建议

/etc/nginx/ ├── nginx.conf # 主配置文件 ├── conf.d/ # 通用配置片段 │ ├── gzip.conf │ ├── security.conf │ └── proxy.conf ├── sites-available/ # 可用站点配置 │ └── example.com.conf ├── sites-enabled/ # 启用的站点(符号链接) │ └── example.com.conf -> ../sites-available/example.com.conf └── snippets/ # 可复用配置块 └── ssl-params.conf
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/3 5:45:02

低成本高可用:充电桩平台在云原生(K8s)上的部署与运维实践

一、简述SpringBoot 框架,充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5新能源汽车电动自行车公交车-四轮车充电充电源代码充电平台源码Java源码无加密项目二、介绍云快充协议云快充1.5协议云快充协议开源代码云快充底层协议云快充桩直连桩直连协议…

作者头像 李华
网站建设 2026/4/15 21:34:50

Linux零基础入门:用户管理与权限控制完全指南

前言 在多用户操作系统中,用户管理和权限控制是保障系统安全的核心机制。Linux作为一个多用户、多任务的操作系统,拥有完善的用户权限管理体系。理解用户和组的概念,掌握权限设置方法,是每个Linux管理员必备的技能。本文将系统讲解Linux的用户管理机制、权限模型和提权方法,帮…

作者头像 李华
网站建设 2026/4/14 0:09:28

AI写论文必备清单,4款AI论文生成工具带你告别论文难产!

学术写作挑战与 AI 论文写作工具推荐 在撰写期刊论文、毕业论文或职称论文时,许多学术人员往往会遇到各种挑战。自己动手写论文,去查找相关资料就像在大海里寻找针一样困难;再加上格式要求复杂,常常让人感到手忙脚乱;…

作者头像 李华
网站建设 2026/4/1 1:01:04

基于数据-模型双驱动自适应融合的换乘客流精确统计方法研究

目录 摘要 1. 引言:问题界定与改进范式 2. 改进优化总体框架 3. 核心改进模块与方法 3.1 模块1:多源异构数据自适应清洗与对齐 3.2 模块2:物理信息增强的时空图神经网络 3.3 模块3:基于实时数据同化的动态纠偏机制 4. 系统…

作者头像 李华
网站建设 2026/4/12 0:11:26

Python+django+vue3原生微信小程序的社区便民服务系统

目录社区便民服务系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!社区便民服务系统摘要 该系统基于PythonDjangoVue3技术栈,结合微信小程序原生开发,旨在为社…

作者头像 李华