当前位置: 首页 > news >正文

Nginx配置学习及多应用场景配置示例

一.Nginx简要

先简单介绍一下Nginx:用于高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。它由俄罗斯程序员Igor Sysoev开发,最初是为解决C10K问题(即同时处理1万个连接)而设计的。
特点:高性能,低内存消耗,高可靠性,模块化设计,支持热部署
适用性:Windows和Linux都行

配置文件nginx.conf由多个块组成:
全局块(最外层):配置影响nginx全局的指令
events块(与全局块同级):配置网络连接相关的参数,会影响nginx服务器或与用户的网络连接
http块(与全局块同级):可以嵌套多个server,配置代理,缓存,日志定义等
server块(嵌套在 http 块内):配置虚拟主机的相关参数
location块(嵌套在 server 块内):配置请求的路由,以及各种页面的处理情况

二.不同平台配置示例

示例配置,主要用于了解配置格式,这里分别不同平台举例2份
Windows 版 Nginx 配置示例

# 主进程配置块
worker_processes  1;  # Windows平台建议设置为1,因为Windows的I/O模型与Linux不同# 事件处理模块配置
events {worker_connections  1024;  # 每个工作进程的最大连接数accept_mutex off;  # Windows平台需要关闭这个选项
}# HTTP服务配置
http {# 包含MIME类型定义文件include       mime.types;  # 加载预定义的文件扩展名与MIME类型映射default_type  application/octet-stream;  # 默认MIME类型# 日志配置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  logs/access.log  main;  # 访问日志路径和格式error_log   logs/error.log;  # 错误日志路径# 性能优化配置sendfile        on;  # 启用高效文件传输模式tcp_nopush     on;  # 仅在sendfile开启时有效,优化网络包发送keepalive_timeout  65;  # 保持连接的超时时间(秒)# 启用Gzip压缩gzip  on;  # 开启Gzip压缩功能gzip_types text/plain text/css application/json application/javascript text/xml;  # 需要压缩的文件类型# 虚拟主机配置server {listen       80;  # 监听80端口server_name  localhost;  # 服务器名称,可以是域名或IP# 字符集设置charset utf-8;  # 设置默认字符集# 网站根目录配置root   html;  # 网站文件根目录(相对于nginx安装目录)index  index.html index.htm;  # 默认首页文件# 静态文件缓存设置location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;  # 静态资源缓存30天access_log off;  # 不记录静态资源访问日志}# 错误页面配置error_page  404     /404.html;  # 404错误页面error_page  500 502 503 504  /50x.html;  # 50x错误页面# 禁止访问隐藏文件location ~ /\. {deny all;  # 拒绝所有访问access_log off;  # 不记录访问日志log_not_found off;  # 不记录未找到日志}}
}

Linux 版 Nginx 配置示例

# 全局配置
user  nginx;  # 以nginx用户身份运行工作进程
worker_processes  auto;  # 自动检测CPU核心数设置工作进程数
pid /run/nginx.pid;  # 主进程PID文件位置# 事件处理模块配置
events {worker_connections  2048;  # 每个工作进程的最大连接数multi_accept on;  # 一个工作进程可以同时接受多个新连接use epoll;  # Linux高性能事件模型
}# HTTP服务配置
http {# 基础配置include       /etc/nginx/mime.types;  # MIME类型定义文件default_type  application/octet-stream;  # 默认MIME类型# 日志格式定义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;  # 访问日志路径error_log   /var/log/nginx/error.log warn;  # 错误日志路径及记录级别# 性能优化配置sendfile        on;  # 启用高效文件传输模式tcp_nopush     on;  # 优化网络包发送tcp_nodelay    on;  # 禁用Nagle算法keepalive_timeout  65;  # 保持连接的超时时间types_hash_max_size 2048;  # 类型哈希表大小# 虚拟主机配置server {listen       80;  # 监听80端口server_name  example.com www.example.com;  # 服务器域名# 网站根目录配置root   /var/www/html;  # 网站文件根目录index  index.php index.html index.htm;  # 默认首页文件# 基础安全头设置add_header X-Frame-Options "SAMEORIGIN";  # 防止点击劫持add_header X-XSS-Protection "1; mode=block";  # 启用XSS保护add_header X-Content-Type-Options "nosniff";  # 禁止MIME类型嗅探# PHP处理配置location ~ \.php$ {fastcgi_pass   unix:/var/run/php/php7.4-fpm.sock;  # PHP-FPM套接字fastcgi_index  index.php;include        fastcgi_params;  # 包含FastCGI参数fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;}# 静态文件处理location / {try_files $uri $uri/ =404;  # 尝试按顺序查找文件}# 静态资源缓存location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {expires 365d;  # 缓存1年access_log off;  # 不记录访问日志add_header Cache-Control "public";  # 允许公共缓存}# 禁止访问敏感文件location ~ /(\.|conf|sql|bak|sh|env)$ {deny all;  # 拒绝所有访问return 404;  # 返回404错误}}
}

三.多应用场景配置示例

全局配置示例
场景概要:控制Nginx服务级别的全局参数,影响所有server块的默认行为
后续其他场景仅示例关键配置,其他全局配置可套用

# 定义运行Nginx的用户/组(需与系统用户一致)
user www-data;# 工作进程数(建议设置为CPU核心数或auto自动检测)
worker_processes auto;# 错误日志路径及级别(debug/info/notice/warn/error/crit)
error_log /var/log/nginx/error.log warn;# PID文件路径(记录主进程ID)
pid /run/nginx.pid;# 事件模块配置(核心网络参数)
events {# 每个worker的最大连接数(决定并发能力)worker_connections 1024;# 使用高效事件模型(Linux建议用epoll)use epoll;# 开启多请求并行接收(提升吞吐量)multi_accept on;
}# HTTP模块全局配置
http {# MIME类型映射文件(默认包含text/html等)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;# 保持连接超时时间(单位:秒)keepalive_timeout 65;# 客户端请求头缓冲区大小(根据Header大小调整)client_header_buffer_size 4k;# 大型客户端请求头处理(应对复杂Cookie场景)large_client_header_buffers 4 16k;# 客户端请求体最大值(影响文件上传大小)client_max_body_size 100m;# 开启Gzip压缩(降低传输体积)gzip on;gzip_types text/plain text/css application/json application/javascript;# 包含其他配置文件(如各站点的server配置)include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}

静态网站托管

场景概要:托管纯HTML/CSS/JS等静态资源,无后端交互

server {# 监听标准HTTP端口listen 80;# 绑定的域名或IP(支持多个值,空格分隔)server_name test.com 192.168.1.1;# 网站文件根目录(必须真实存在)root /var/www/html;# 默认索引文件(按顺序尝试匹配)index index.html index.htm;# 核心请求处理逻辑location / {# 尝试按顺序查找:精确文件→目录→返回404try_files $uri $uri/ =404;}# 禁止访问隐藏文件(增强安全)location ~ /\. {deny all;return 404;}
}

正向代理(HTTP代理)

场景概要:作为中间代理服务器转发客户端请求(需客户端显式配置代理)

server {# 代理服务监听端口listen 3128;# 必须指定DNS解析服务器resolver 8.8.8.8 113.113.113.113 valid=300s;# 所有请求处理location / {# 关键指令:将请求转发到客户端指定的原始地址proxy_pass http://$http_host$request_uri;# 保留原始Host头proxy_set_header Host $http_host;# 连接超时时间(单位:秒)proxy_connect_timeout 5;# 禁用代理缓存proxy_buffering off;}
}

反向代理(后端应用)

场景概要:隐藏真实后端服务器,转发请求到内部服务(如Java/Python应用)

server {# 监听标准HTTP端口listen 80;# 服务域名(API网关场景)server_name api.example.com;# 所有动态请求转发location / {# 指向后端服务器组(需提前定义upstream)proxy_pass http://backend_servers;# 标准代理头设置(后端获取真实客户端IP)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_read_timeout 30;}# 静态资源单独处理(性能优化)location ~* \.(css|js|png)$ {# 静态文件本地路径root /var/www/static;# 客户端缓存时间expires 30d;}
}

负载均衡

场景概要:将流量均匀分配到多个后端服务器,提高系统容错能力

# 定义后端服务器集群(需放在http配置块内)
upstream backend_servers {# 负载均衡策略(加权轮询)server 10.0.0.1:8080 weight=5;  # 50%流量server 10.0.0.2:8080 weight=3;  # 30%流量server 10.0.0.3:8080 weight=2;  # 20%流量# 健康检查参数max_fails 3;fail_timeout 10s;
}server {listen 80;server_name test.example.com;location / {# 关键指令:请求转发到后端集群proxy_pass http://backend_servers;# 故障转移配置proxy_next_upstream error timeout http_500;}
}

HTTPS安全加固

场景概要:启用加密传输并配置安全策略,符合PCI DSS标准

server {# 强制SSL监听+HTTP/2支持listen 443 ssl http2;# 服务域名server_name test.example.com;# 证书路径(需真实存在)ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;# 协议安全配置(禁用旧版TLS)ssl_protocols TLSv1.2 TLSv1.3;# 加密套件配置(仅允许强加密算法)ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';# OCSP装订(提升SSL握手性能)ssl_stapling on;ssl_stapling_verify on;# 安全响应头(防XSS/点击劫持等)add_header X-Frame-Options "SAMEORIGIN" always;add_header Content-Security-Policy "default-src 'self'";# 其他业务配置...
}

文件下载服务

场景概要:提供大文件下载支持,可控制下载速度和目录列表

server {listen 80;server_name downloads.example.com;# 文件存储根目录root /mnt/storage;# 下载限速配置(单位:字节)location / {limit_rate 1m;          # 全局限速1MB/slimit_rate_after 50m;   # 前50MB不限速# 启用目录列表(慎用)autoindex on;# 文件列表显示格式autoindex_format html;}# 特殊目录不限速location /vip/ {# 关闭限速limit_rate off;}
}

请求限流

场景概要:防止CC攻击或突发流量打垮后端服务

# 全局限流定义(http配置块内)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/m;server {location /api/ {# 应用限流规则(突发队列=5请求)limit_req zone=api_limit burst=5 nodelay;# 超时返回429状态码limit_req_status 429;proxy_pass http://backend;}# 登录接口特殊限制location /api/login {# 更严格的限制(10请求/分钟)limit_req zone=api_limit burst=3;}
}

IP黑白名单

场景概要:基于网络层控制访问权限,阻止恶意IP

# 地理IP黑名单(http配置块内)
geo $block_ip {default 0;192.168.2.0/24 1;   # 整个子网10.0.0.3 1;         # 单个IP
}server {location / {# 黑名单检查if ($block_ip) {return 403 "Forbidden";}# 白名单模式(允许特定IP段)allow 192.168.9.0/24;deny all;# 正常业务处理...}
}
http://www.xdnf.cn/news/1370395.html

相关文章:

  • 验证码请求与缓存问题解决方案
  • Leetcode—1163. 按字典序排在最后的子串【困难】
  • 智慧园区:从技术赋能到价值重构,解锁园区运营新范式
  • 产品经理成长手册(2)——产品文档能力
  • 二、JVM 入门——(三)栈
  • 两数之和,leetCode热题100,C++实现
  • 链改2.0六方会谈协同创新—可信资产IPO与数链金融RWA双轮驱动
  • 第17章|PowerShell 安全警报——高分学习笔记(运维实战向)
  • 使用Kiro智能开发PYTHON应用程序
  • onnx入门教程(五)——实现 PyTorch-ONNX 精度对齐工具
  • Ubuntu操作系统下MySQL、MongoDB、Redis
  • 基于 LQG 控制的轨迹跟踪 —— 从原理到实践
  • 优雅草黑曼巴知识付费项目交付顺带:深入剖析 WebApp 的封装原理与实践-卓伊凡
  • MD5校验算法
  • FreeRTOS 同步互斥与任务协作 学习笔记
  • vscode或者cursor配置使用Prettier - Code formatter来格式化微信小程序wxss/wxs/wxml文件
  • CentOS 7 升级 OpenSSL 3.5.1 的详细教程
  • HarmonyOS image组件深度解析:多场景应用与性能优化指南(2.4详细解析,完整见uniapp官网)
  • Android 属性 property 系统
  • 微服务的编程测评系统16-用户答题
  • 什么是索引下推?
  • ADB 安装教程:如何在 Windows、 Linux 上安装 Android Debug Bridge
  • 基于CSO与BP神经网络分类模型的特征选择方法研究(Python实现)
  • 2025第五届人工智能、自动化与高性能计算国际会议 (AIAHPC 2025)
  • Android Glide生命周期管理:实现原理与最佳实践
  • swift 开发抠图工具实现思路,与代码详解
  • 技术分享︱国产化突破:开源MDO工具链在新一代神威超算上的安装与调试
  • 使用QML的Rectangle组件的边框属性
  • HMM简单拓展-HSMM与高阶HMM
  • C/C++ 数据结构 —— 树(2)