2026/4/10 20:20:16
网站建设
项目流程
宜昌商城网站建设,现在建网站软件,凌源市建设局网站,做公司网站需要了解哪些东西Nginx 基础文档
一、Nginx 配置文件结构概述
Nginx 的主配置文件通常位于#xff1a;
Linux: /etc/nginx/nginx.confmacOS (Homebrew): /usr/local/etc/nginx/nginx.confWindows: nginx/conf/nginx.conf
配置文件采用分层块结构#xff0c;主要由以下几部分组成#xff…Nginx 基础文档一、Nginx 配置文件结构概述Nginx 的主配置文件通常位于Linux:/etc/nginx/nginx.confmacOS (Homebrew):/usr/local/etc/nginx/nginx.confWindows:nginx/conf/nginx.conf配置文件采用分层块结构主要由以下几部分组成# 全局块Main Context user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /run/nginx.pid; # Events 块 events { worker_connections 1024; } # HTTP 块最常用 http { include /etc/nginx/mime.types; default_type application/octet-stream; # Server 块可多个 server { listen 80; server_name example.com; location / { root /var/www/html; index index.html; } } }主要上下文Context层级上下文说明main全局配置影响整个 Nginx 进程events连接处理相关配置httpHTTP 协议相关配置包含server和locationmain ├── events └── http ├── upstream ├── server │ └── location │ └── if / limit_except 等子块 └── map / geo / split_clients 等二、核心配置指令详解1. 全局块Main Context指令说明示例userNginx 工作进程运行的用户user nginx;worker_processes工作进程数建议设为 CPU 核心数worker_processes auto;error_log错误日志路径与级别error_log /var/log/nginx/error.log warn;pid主进程 PID 文件路径pid /run/nginx.pid;worker_rlimit_nofile单个 worker 可打开的最大文件描述符数worker_rlimit_nofile 65535;建议生产环境设置worker_processes auto;并调整worker_rlimit_nofile提高性能。2. Events 块控制连接处理方式events { worker_connections 1024; # 每个 worker 最大并发连接数 use epoll; # Linux 下推荐使用 epoll默认 multi_accept on; # 允许一次接收多个新连接 }⚠️ 总并发能力 ≈worker_processes × worker_connections3. HTTP 块核心基础设置http { include 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; access_log /var/log/nginx/access.log main; sendfile on; # 高效文件传输 tcp_nopush on; # 配合 sendfile 减少小包 tcp_nodelay on; # 实时性要求高时开启 keepalive_timeout 65; # 长连接超时 gzip on; # 启用 Gzip 压缩 }Gzip 压缩配置推荐gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript text/xml application/xml; gzip_disable msie6;4. Server 块虚拟主机每个server块代表一个虚拟主机站点server { listen 80; listen [::]:80; # IPv6 支持 server_name example.com www.example.com; root /var/www/example; index index.html index.htm; # 错误页面 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; # 访问日志 access_log /var/log/nginx/example.access.log; }✅最佳实践使用server_name明确绑定域名避免在server中重复定义root应在location或顶层定义5. Location 块路由匹配location用于匹配 URI 并执行相应操作。匹配规则优先级从高到低精确匹配最高优先级^~前缀匹配不进行正则~/~*正则匹配区分/不区分大小写普通前缀匹配最长前缀优先示例location / { # 仅匹配根路径 / } location ^~ /static/ { # 匹配 /static/ 开头不走正则 alias /data/static/; } location ~ \.(js|css|png)$ { # 正则匹配静态资源 expires 1y; add_header Cache-Control public, immutable; } location /api/ { # 普通前缀匹配代理到后端 proxy_pass http://backend; }⚠️ 注意root会拼接 URI 路径alias会替换匹配部分避免在location中使用if除非必要三、反向代理与负载均衡1. 基础反向代理location /app/ { proxy_pass http://127.0.0.1:3000/; # 注意结尾斜杠影响路径重写 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; }2. 负载均衡upstreamupstream backend { least_conn; # 调度策略 server 10.0.0.1:8080 weight3; server 10.0.0.2:8080; server 10.0.0.3:8080 backup; # 备用服务器 } server { location / { proxy_pass http://backend; } }调度策略round-robin默认least_conn最少连接ip_hash基于客户端 IP 保持会话hash $cookie_jsessionid自定义哈希四、HTTPS 配置TLS/SSLserver { listen 443 ssl http2; server_name example.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off; # HSTS可选 add_header Strict-Transport-Security max-age63072000 always; root /var/www/example; index index.html; }安全建议使用 Let’s Encrypt 免费证书certbot自动续期禁用 SSLv3、TLSv1.0/1.1启用 HTTP/2listen 443 ssl http2;五、常用优化与安全配置1. 安全加固# 隐藏版本号 server_tokens off; # 限制请求体大小 client_max_body_size 10M; # 防止目录遍历 location ~ /\. { deny all; } # 限制速率防 CC 攻击 limit_req_zone $binary_remote_addr zonelogin:10m rate1r/s; location /login/ { limit_req zonelogin burst5 nodelay; }2. 缓存静态资源location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1y; add_header Cache-Control public, immutable; }3. 日志格式优化log_format json_combined escapejson { time:$time_iso8601, remote_addr:$remote_addr, request:$request, status:$status, body_bytes_sent:$body_bytes_sent, user_agent:$http_user_agent }; access_log /var/log/nginx/access.json json_combined;六、配置管理最佳实践模块化配置使用include拆分配置http { include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }测试配置语法nginx -t平滑重载nginx -s reload版本控制将/etc/nginx目录纳入 Git 管理七、附录常见问题排查问题检查点502 Bad Gateway后端服务是否启动proxy_pass地址是否正确403 Forbidden文件权限root路径是否存在SELinux 是否阻止配置不生效是否执行了nginx -s reload语法是否通过nginx -tHTTPS 证书错误证书链是否完整域名是否匹配八、参考资源官方文档https://nginx.org/en/docs/Mozilla SSL 配置生成器https://ssl-config.mozilla.org/Nginx 配置检查工具https://nginxconfig.io/提示本文档可作为日常运维速查手册。建议结合实际业务场景调整参数并定期审计安全配置。如需特定场景配置如 WebSocket 代理、gRPC、缓存、限流等可进一步扩展。