首页
关于小站
朋友
壁纸
留言
时光之书
笔顺字帖
LayUI手册
Search
1
【PHP】PHPoffice/PHPSpreadsheet读取和写入Excel
2,199 阅读
2
【Layui】控制页面元素展示隐藏
2,012 阅读
3
【Git】No tracked branch configured for branch master or the branch doesn't exist.
1,942 阅读
4
【PHP】PHP实现JWT生成和验证
1,901 阅读
5
【composer】composer常用命令
1,718 阅读
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
webman
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
Docker
Elasticsearch
登录
Search
标签搜索
PHP
函数
方法
类
MySQL
ThinkPHP
JavaScript
OOP
Layui
Web
Server
Nginx
Docker
PHPSpreadsheet
PHPoffice
Array
设计模式
Git
排序算法
基础
小破孩
累计撰写
261
篇文章
累计收到
13
条评论
首页
栏目
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
webman
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
Docker
Elasticsearch
页面
关于小站
朋友
壁纸
留言
时光之书
笔顺字帖
LayUI手册
搜索到
8
篇与
的结果
2026-02-06
【Nginx】UNIX Socket详解
一、核心定义UNIX Socket(UNIX域套接字/UDS):仅Linux/Unix本地的进程间通信(IPC)方式,以.sock特殊文件为通信标识,进程通过操作系统内核直接交换数据,完全不经过网络协议栈,是本地进程通信的高性能首选。与TCP/IP(127.0.0.1)核心对比(重点)对比维度TCP/IP(本地如127.0.0.1:3306)UNIX Socket(如/var/run/mysqld/mysqld.sock)通信范围本地/跨服务器(网络)仅同一Linux/Unix服务器通信标识IP+端口本地.sock文件(无实际数据,仅作通信入口)数据传输路径进程→网络协议栈→内核→网络协议栈→进程进程→内核→进程(仅内核拷贝,无网络开销)性能有封装/解包开销,延迟一般延迟极低、吞吐量高(本地首选)配置/安全需IP/端口,需开放防火墙仅需.sock路径,无端口/防火墙风险资源占用占用端口/网络连接资源仅占用磁盘文件,资源消耗可忽略通俗类比:TCP/IP是「同城快递(走网点流程)」,UNIX Socket是「邻居串门(直接沟通)」。二、核心原理(PHP开发只需掌握3点).sock文件是通信标识,非普通文件,不存传输数据,删除会直接中断通信;数据全程在内核空间拷贝,跳过网卡、TCP握手、IP封装等网络环节(性能高的根本原因);遵循C/S客户端-服务端模型,和TCP使用逻辑一致:服务端绑定.sock文件监听,客户端连接.sock文件通信,通信后文件保留(服务端停止则销毁)。三、PHP开发核心使用场景(生产环境标配)场景1:PHP连接本地MySQL/MariaDB(替代127.0.0.1:3306)步骤1:查询MySQL的.sock文件路径(3种方法)查配置文件:/etc/my.cnf//etc/mysql/my.cnf 中的socket配置项;MySQL命令行:mysql -uroot -p -e "show variables like 'socket';";系统查找:find / -name "*.sock" | grep mysql。步骤2:PHP代码写法(PDO/Mysqli/框架对比)核心变化:去掉host/port,新增unix_socket指定.sock路径。// 1. PDO(TCP vs Socket) $pdo_tcp = new PDO('mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8mb4', 'root', '123456'); $pdo_sock = new PDO('mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=test;charset=utf8mb4', 'root', '123456'); // 2. Mysqli(TCP vs Socket) $mysqli_tcp = new mysqli('127.0.0.1', 'root', '123456', 'test', 3306); $mysqli_sock = new mysqli(null, 'root', '123456', 'test', 0, '/var/run/mysqld/mysqld.sock'); // 3. Laravel框架(.env配置,其他框架同理) # TCP配置 DB_HOST=127.0.0.1 DB_PORT=3306 # Socket配置(注释上面,新增下面) DB_UNIX_SOCKET=/var/run/mysqld/mysqld.sock场景2:Nginx通过UNIX Socket连接PHP-FPM(替代127.0.0.1:9000)步骤1:配置PHP-FPM的.sock(/etc/php-fpm.d/www.conf); 注释TCP监听 ; listen = 127.0.0.1:9000 ; 开启Socket监听,指定路径 listen = /var/run/php-fpm/www.sock ; 关键:设置权限(Nginx和PHP-FPM统一用户,如www-data) listen.owner = www-data listen.group = www-data listen.mode = 0660步骤2:配置Nginx的Socket转发(站点配置)location ~ \.php$ { # 核心:替换为PHP-FPM的.sock路径 fastcgi_pass unix:/var/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }步骤3:重启生效systemctl restart php-fpm && systemctl restart nginx四、核心优势(PHP生产环境必用的原因)性能提升:本地通信延迟降低20%-50%,高并发下吞吐量优势更明显;配置简单:无需配置IP/端口,避免端口占用、防火墙开放等问题;更安全:不涉及网络传输,无端口扫描、远程恶意连接风险;开发零成本:仅需替换配置/参数,使用逻辑和TCP完全一致,无需额外学习;资源高效:不占用端口/网络资源,高并发下减少系统开销。五、避坑重点(3个高频问题,必记)1. 系统限制:仅支持Linux/Unix,Windows不支持开发环境(Windows/XAMPP/WAMP):只能用TCP/IP(127.0.0.1);生产环境(Linux服务器):放心用UNIX Socket(所有服务均支持);特殊:WSL2(基于Linux内核)支持,WSL1不支持。2. 权限问题:客户端必须有.sock文件的读/写权限(最常踩坑)现象:连接时报「权限不足/连接拒绝」(如Nginx连PHP-FPM、PHP连MySQL)。解决方法(推荐生产环境方案1):统一用户/用户组:让客户端和服务端进程归属同一用户(如Nginx/PHP-FPM均为www-data,将PHP进程加入mysql用户组):usermod -aG mysql www-data # 加组 systemctl restart php-fpm mysql # 重启服务临时修改.sock权限(服务端重启后失效):chmod 660 /var/run/mysqld/mysqld.sock # 读写权限 chown mysql:www-data /var/run/mysqld/mysqld.sock # 所属用户/组3. 存储问题:.sock文件需放在本地高速目录,且磁盘不能满推荐路径:/var/run/(内存文件系统,读写快,不占磁盘空间,也是MySQL/PHP-FPM默认路径);禁止:将.sock放在网络磁盘(如NFS),内核不支持跨网络的Socket通信;注意:.sock所在磁盘分区满了,会导致进程无法创建/写入文件,直接中断通信。六、拓展场景(PHP开发可了解)除MySQL/PHP-FPM外,本地常用服务均支持UNIX Socket,配置逻辑一致:Redis:配置unixsocket /var/run/redis/redis.sock,PHP用predis/phpredis连接时指定sock路径;Memcached:本地通信可配置Socket,替代127.0.0.1:11211;本地微服务:同一服务器内的微服务进程,用Socket替代TCP提升通信性能。七、核心总结(PHP开发必记5句话)UNIX Socket是Linux本地进程通信方式,核心优势是无网络开销、高性能;本地通信优先用Socket,跨服务器通信必须用TCP/IP;PHP使用只需替换参数:去掉host/port,指定.sock文件路径;生产环境核心配置:PHP连本地MySQL、Nginx连PHP-FPM,全量替换为UNIX Socket;避坑核心:Linux专属、权限正确、存/var/run/目录。八、生产环境实操清单(一键落地)检查所有本地服务(MySQL/PHP-FPM/Redis)的.sock路径并记录;修改PHP代码/框架配置,将本地TCP连接替换为Socket连接;配置Nginx+PHP-FPM的Socket通信,统一进程用户;给所有.sock文件配置正确权限,将相关进程加入对应用户组;重启所有服务,测试连接是否正常。
2026年02月06日
3 阅读
0 评论
0 点赞
2026-02-06
【Nginx】Nginx + php-fpm 运行原理详解
深入理解 Nginx + PHP-FPM 的协同运行原理,搞清楚这两个组件各自的作用、数据如何流转,以及核心的通信和进程管理逻辑,本篇文章从组件分工、核心运行流程、通信方式、进程管理四个核心维度,用通俗易懂的方式详解,兼顾原理和实际运行细节。一、先明确核心组件的分工(为什么需要Nginx+PHP-FPM)PHP 是解释型脚本语言,本身无法直接处理 HTTP 请求、监听端口,也不擅长做静态资源解析、高并发网络通信;而 Nginx 是高性能的 HTTP 服务器/反向代理,擅长处理静态请求、高并发连接、TCP/IP 网络通信,但完全不能解析PHP脚本。PHP-FPM 是 PHP 官方推出的FastCGI 进程管理器(FastCGI Process Manager),是 FastCGI 协议的PHP实现,核心作用是管理PHP解析进程、接收并处理来自Nginx的PHP脚本解析请求、返回解析结果。简单总结分工:Nginx:前端「门卫+快递员」,负责接收所有客户端HTTP请求,过滤静态请求(html/css/js/图片等)自己直接处理,动态PHP请求转发给PHP-FPM,最后把PHP-FPM的解析结果返回给客户端。PHP-FPM:后端「脚本解析工头」,管理一群PHP解析进程,接收Nginx的转发请求,分配给子进程解析PHP脚本,生成HTML等动态内容后回传给Nginx。PHP解析进程:PHP-FPM的「工人」,实际执行PHP代码、完成脚本解析的最小单元。补充:FastCGI 是一种通信协议(属于应用层协议),作用是让「Web服务器(Nginx)」和「脚本解析器(PHP)」这两个独立进程能标准化通信,替代了早期效率极低的CGI协议(每次请求都创建新进程,高并发下性能暴跌)。二、Nginx+PHP-FPM 核心运行流程(一次PHP请求的完整流转)以用户访问 http://域名/index.php?name=test 为例,从客户端发起请求到最终收到响应的完整步骤,每一步都标注核心动作,流程清晰无冗余:客户端(浏览器/Postman) → 网络层(TCP/IP) → Nginx → FastCGI协议 → PHP-FPM → PHP解析进程 → 回传结果 → Nginx → 客户端逐步骤拆解(关键步骤标粗):客户端发起HTTP请求:用户输入URL后,客户端与Nginx建立TCP连接(默认80/443端口),发送HTTP请求(包含请求方法、URL、请求头、参数等)。Nginx接收并解析请求:Nginx监听80/443端口,接收到请求后,通过nginx.conf配置的location规则匹配请求路径:如果是静态资源(如/css/index.css),Nginx直接从本地磁盘读取文件,通过TCP连接返回给客户端,全程不涉及PHP-FPM;如果是PHP动态请求(如/index.php),Nginx触发FastCGI转发规则,准备将请求信息封装成FastCGI协议格式。Nginx封装请求并转发给PHP-FPM:Nginx根据配置的PHP-FPM地址(IP+端口/UNIX套接字),将HTTP请求的核心信息(脚本路径、请求参数、请求头、环境变量如REQUEST_METHOD/REQUEST_URI)按照FastCGI协议规范封装,发送给PHP-FPM。PHP-FPM接收请求并分配进程:PHP-FPM监听自己的端口(默认9000)或UNIX套接字,接收到FastCGI请求后,由主进程(master process) 分配给空闲的PHP子进程(worker process)(如果没有空闲子进程,会根据进程管理规则创建新进程或让请求排队)。PHP子进程解析执行脚本:空闲的PHP子进程接收请求后,执行以下操作:读取指定路径的PHP脚本文件(如/var/www/html/index.php);解释执行PHP代码,处理业务逻辑(如连接数据库、处理参数、生成动态HTML);执行完成后,将执行结果(动态HTML内容、响应状态码、响应头)按照FastCGI协议封装。PHP-FPM回传结果给Nginx:PHP子进程将封装好的解析结果返回给PHP-FPM主进程,再由主进程回传给Nginx。Nginx接收结果并返回给客户端:Nginx接收到PHP-FPM的回传数据后,将FastCGI格式的结果转换回HTTP协议格式(补充HTTP响应头、状态码),通过最初建立的TCP连接,将最终的响应内容(动态HTML)发送给客户端。释放连接/资源:客户端接收响应后,关闭TCP连接(或根据HTTP/1.1的Keep-Alive保持连接);Nginx和PHP-FPM的相关进程回到空闲状态,等待下一次请求。核心关键点:整个流程中,Nginx只做「转发和返回」,不碰PHP代码;PHP-FPM只做「接收和分配」,不碰HTTP协议;真正执行PHP代码的是PHP子进程,三者解耦,各司其职,这也是该架构高性能的核心原因。三、Nginx与PHP-FPM的两种核心通信方式Nginx和PHP-FPM之间的通信是整个架构的关键环节,配置在Nginx的fastcgi_pass指令中,主要有两种方式,各有优劣,适用于不同场景,也是实际部署中最常配置的部分:方式1:UNIX域套接字(UNIX Socket)配置格式:fastcgi_pass unix:/var/run/php-fpm/www.sock;(sock文件路径由PHP-FPM配置)通信原理:基于本地文件的进程间通信(IPC),不经过网络协议栈(无需IP/端口),直接通过内核交换数据,延迟更低、性能更高。适用场景:Nginx和PHP-FPM部署在同一台服务器(绝大多数生产场景)。注意事项:需要保证sock文件的权限正确(Nginx进程用户如www-data需要有读/写权限),否则会出现「连接拒绝」错误;sock文件存储在磁盘临时目录,需避免磁盘IO瓶颈。方式2:TCP/IP套接字(网络端口)配置格式:fastcgi_pass 127.0.0.1:9000;(如果PHP-FPM在另一台服务器,填远程IP如192.168.1.100:9000)通信原理:基于TCP/IP协议的网络通信,即使是本地127.0.0.1,也会经过内核的网络协议栈封装/解包,延迟略高,但兼容性更好。适用场景:Nginx和PHP-FPM部署在不同服务器(分布式部署场景),或需要跨服务器转发PHP请求。注意事项:PHP-FPM需要配置监听远程IP(默认只监听127.0.0.1,需改为0.0.0.0:9000),并开放服务器9000端口(防火墙/安全组);存在网络传输的安全风险,建议搭配内网访问或加密。性能对比:同一服务器下,UNIX Socket > TCP/IP(127.0.0.1),生产环境优先用UNIX Socket。四、PHP-FPM的核心:进程管理机制(高性能的关键)PHP-FPM的性能核心在于进程管理,由主进程(master)统一管理子进程(worker),避免了CGI「每次请求创建进程」的低效问题,支持三种进程管理模式,配置在PHP-FPM的配置文件(如/etc/php-fpm.d/www.conf)的pm指令中,不同模式适配不同的并发量场景。先明确两个基础配置(所有模式都需要设置):pm.max_children:PHP-FPM允许创建的最大子进程数(核心配置,决定最大并发处理能力,需根据服务器CPU/内存配置,如4核8G服务器一般设20-40);pm.start_servers:PHP-FPM启动时默认创建的空闲子进程数(无需等待请求再创建,提升首次请求响应速度)。模式1:静态模式(pm = static)核心逻辑:PHP-FPM启动后,直接创建pm.max_children个固定数量的子进程,运行期间子进程数不增不减,主进程只负责将请求分配给空闲子进程。优点:进程数固定,无进程创建/销毁的开销,性能最稳定,适合高并发、请求量稳定的场景(如电商、直播平台)。缺点:即使没有请求,所有子进程也会占用内存,内存利用率较低(如果服务器空闲,大量子进程占内存但无工作)。关键配置:仅需设置pm.max_children和pm.start_servers(start_servers ≤ max_children)。模式2:动态模式(pm = dynamic)核心逻辑:子进程数根据请求量动态调整,介于pm.min_spare_servers(最小空闲子进程数)和pm.max_children之间,主进程会根据空闲子进程数自动创建/销毁子进程:当空闲子进程数 < 最小空闲数:创建新的子进程;当空闲子进程数 > 最大空闲数(pm.max_spare_servers):销毁多余的空闲子进程。优点:内存利用率高,空闲时销毁多余进程,节省内存,适合请求量波动大的场景(如企业官网、小型应用)。缺点:请求量突增时,主进程需要创建新进程,存在短暂的进程创建开销,极端情况下可能影响响应速度。关键配置:pm.min_spare_servers(最小空闲)、pm.max_spare_servers(最大空闲)、pm.max_children(最大进程)。模式3:按需模式(pm = ondemand)核心逻辑:最极致的动态模式,PHP-FPM启动后不创建任何子进程,只有当有请求进来时,主进程才会创建子进程处理请求;请求处理完成后,子进程会在指定时间(pm.process_idle_timeout)内空闲,超时后自动销毁。优点:内存利用率极致高,空闲时几乎不占内存,适合请求量极低、偶尔有访问的场景(如个人博客、测试环境)。缺点:首次请求响应慢(需要创建子进程),请求量突增时进程创建开销大,不适合高并发场景。关键配置:pm.max_children(最大进程)、pm.process_idle_timeout(子进程空闲超时时间,默认10s)。进程管理核心原则:pm.max_children的设置是关键,不能过大也不能过小:过小:请求数超过最大进程数,后续请求会排队,导致页面加载慢、超时;过大:每个PHP子进程占用约20-50M内存,过多进程会导致服务器内存耗尽,触发OOM(内存溢出),进程被内核杀死,服务崩溃。五、补充:Nginx的FastCGI核心配置(必配项)Nginx转发PHP请求时,需要在nginx.conf或站点配置中添加FastCGI核心配置,否则PHP-FPM无法正确解析请求,核心配置如下(实际部署可直接复用):server { listen 80; server_name 你的域名; root /var/www/html; # PHP项目根目录 index index.php index.html; # 匹配PHP请求,转发给PHP-FPM location ~ \.php$ { fastcgi_pass unix:/var/run/php-fpm/www.sock; # 通信方式(UNIX Socket),替换为127.0.0.1:9000则为TCP fastcgi_index index.php; # 核心:传递PHP脚本真实路径给PHP-FPM(必须配,否则PHP-FPM找不到脚本) fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; # 加载FastCGI默认配置(包含请求头、环境变量等) include fastcgi_params; } # 禁止直接访问PHP源码目录 location ~ /\.ht { deny all; } }核心必配项:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,作用是将Nginx解析到的PHP脚本绝对路径传递给PHP-FPM,否则PHP-FPM会因找不到脚本返回404或502错误。六、常见异常:502 Bad Gateway(最常遇到)Nginx+PHP-FPM架构中,502错误是最常见的异常,本质是Nginx无法连接到PHP-FPM,核心原因主要有4种,排查顺序从易到难:PHP-FPM服务未启动/已崩溃:执行systemctl status php-fpm查看状态,重启systemctl restart php-fpm;通信方式配置错误:Nginx的fastcgi_pass与PHP-FPM的监听地址(listen指令)不匹配,或端口/套接字被占用;PHP-FPM进程数耗尽:pm.max_children设置过小,请求量超过最大进程数,需调大该值并重启PHP-FPM;权限问题:UNIX Socket文件的权限不足,Nginx进程用户无法读写,执行chmod 660 /var/run/php-fpm/www.sock并chown www-data:www-data /var/run/php-fpm/www.sock(匹配Nginx和PHP-FPM的运行用户)。总结(核心关键点回顾)分工解耦:Nginx处理HTTP和静态资源,PHP-FPM管理PHP进程,PHP子进程执行脚本,三者通过FastCGI协议通信,是高性能的核心;运行流程:客户端→Nginx(解析/转发)→PHP-FPM(分配进程)→PHP子进程(执行脚本)→回传Nginx→客户端,全程两次协议转换(HTTP→FastCGI→HTTP);通信方式:同一服务器优先用UNIX Socket(高性能),跨服务器用TCP/IP(兼容性);进程管理:PHP-FPM主进程管理子进程,支持静态(高并发稳定)、动态(内存高效)、按需(极低请求)三种模式,pm.max_children是核心配置;核心配置:Nginx必须配SCRIPT_FILENAME传递脚本绝对路径,否则会出现502/404错误。整个架构的设计思路是「专业的事交给专业的组件」,Nginx发挥高并发网络通信的优势,PHP-FPM解决PHP脚本的进程管理和解析效率问题,两者结合成为目前PHP Web开发的工业级标准架构,支撑绝大多数PHP生产项目(如WordPress、Laravel、ThinkPHP项目)。
2026年02月06日
4 阅读
0 评论
0 点赞
2025-07-16
【Nginx】Nginx需具体配置示例(涵盖了复杂场景下的高级应用)
以下是 Nginx 常见场景的具体配置示例,配置文件可存放在 /etc/nginx/conf.d/ 目录下(Linux)或直接修改 nginx.conf(Windows):一、基础配置:静态网站托管配置文件(/etc/nginx/conf.d/mysite.conf)server { listen 80; server_name example.com www.example.com; # 替换为你的域名 # 网站根目录 root /var/www/html; index index.html index.htm; # 日志配置 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # 静态文件缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; # 静态资源缓存30天 } # 错误页面 error_page 404 /404.html; error_page 500 502 503 504 /50x.html; }操作步骤创建网站目录:sudo mkdir -p /var/www/html添加测试文件:echo "Hello, Nginx!" > /var/www/html/index.html验证配置:nginx -t重载配置:nginx -s reload二、反向代理:转发到后端服务场景1:代理到本地 Node.js 应用(端口3000)server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost: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; # 超时设置 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; } }场景2:代理到多个后端服务器(负载均衡)# 定义后端服务器组 upstream backend_servers { server backend1.example.com weight=5; # 权重5 server backend2.example.com weight=3; # 权重3 server backend3.example.com backup; # 备份服务器 } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; # 其他 proxy_set_header 配置同上 } }三、HTTPS 配置(使用 Let's Encrypt 证书)前提条件已安装 Certbot:sudo apt install certbot python3-certbot-nginx域名已解析到服务器 IP自动配置(推荐)sudo certbot --nginx -d example.com -d www.example.comCertbot 会自动修改 Nginx 配置并设置证书自动更新。手动配置示例server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; # 强制 HTTPS } server { listen 443 ssl http2; server_name example.com www.example.com; # 证书路径(Let's Encrypt 默认路径) ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # SSL 优化配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # 其他配置(如 root、location 等)同 HTTP 配置 }四、URL 重写与跳转示例1:www 到非 www 跳转server { listen 80; server_name www.example.com; return 301 https://example.com$request_uri; }示例2:路径重写location /old-path/ { rewrite ^/old-path/(.*)$ /new-path/$1 permanent; # 301 永久重定向 }示例3:基于参数跳转if ($args ~* "id=([0-9]+)") { return 301 https://example.com/item/$1; }五、限流配置(防爬/防刷)限制单个 IP 的请求频率# http 块中定义限流规则 http { limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s; server { listen 80; server_name example.com; location /api/ { limit_req zone=mylimit burst=20 nodelay; # 每秒最多10个请求,突发最多20个,超出的请求直接返回503 } } }六、WebSocket 代理支持配置示例server { listen 80; server_name ws.example.com; location /ws/ { proxy_pass http://backend_websocket_server; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; # 防止 WebSocket 连接超时 proxy_read_timeout 86400; } }七、多站点配置(虚拟主机)在同一服务器托管多个域名# 站点1 server { listen 80; server_name site1.com www.site1.com; root /var/www/site1; } # 站点2 server { listen 80; server_name site2.com www.site2.com; root /var/www/site2; }八、静态文件优化配置配置 Gzip 压缩http { gzip on; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_buffers 16 8k; gzip_http_version 1.1; }九、常见问题处理配置1. 解决跨域请求(CORS)location /api/ { add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization' always; # OPTIONS 请求直接返回 204 if ($request_method = 'OPTIONS') { return 204; } }2. 隐藏 Nginx 版本信息http { server_tokens off; # 隐藏响应头中的 Nginx 版本 }配置验证与重载每次修改配置后,务必执行:nginx -t # 验证配置语法 nginx -s reload # 重载配置(不中断服务)以上配置可根据实际需求组合使用,例如同时配置 HTTPS、反向代理和限流。如需更复杂的场景(如 A/B 测试、灰度发布),可进一步扩展配置。以下是 Nginx 更高级的扩展配置示例,适用于复杂场景:十、A/B 测试与灰度发布基于 Cookie 的流量分发http { # 定义变量存储分流规则 map $cookie_ab_test $backend { default backend_a; "b" backend_b; } upstream backend_a { server backend1.example.com; } upstream backend_b { server backend2.example.com; } server { listen 80; server_name example.com; # 首次访问设置 Cookie if ($cookie_ab_test = "") { set $ab_test $random % 2; # 随机分为两组 if ($ab_test = 0) { add_header Set-Cookie "ab_test=a; path=/; domain=.example.com"; } if ($ab_test = 1) { add_header Set-Cookie "ab_test=b; path=/; domain=.example.com"; } } location / { proxy_pass http://$backend; } } }十一、基于用户区域的流量路由根据 IP 地理位置分发请求# 需要安装 ngx_http_geoip2_module 模块 http { geoip2 /path/to/GeoLite2-Country.mmdb { $geoip2_data_country_code country iso_code; } map $geoip2_data_country_code $backend { default backend_global; "CN" backend_china; "US" backend_usa; } upstream backend_global { server global.example.com; } upstream backend_china { server china.example.com; } upstream backend_usa { server usa.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://$backend; } } }十二、内容缓存配置配置代理缓存(如缓存 API 响应)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 api.example.com; location /static-api/ { proxy_pass http://backend_api; proxy_cache my_cache; proxy_cache_key "$scheme$request_method$host$request_uri"; proxy_cache_valid 200 302 12h; # 成功响应缓存12小时 proxy_cache_valid 404 1m; # 404缓存1分钟 # 缓存命中时添加响应头,便于调试 add_header X-Cache $upstream_cache_status; } } }十三、健康检查与自动剔除故障节点配置主动健康检查(需 nginx-plus 或 lua 模块)http { upstream backend_servers { server backend1.example.com max_fails=3 fail_timeout=30s; server backend2.example.com max_fails=3 fail_timeout=30s; # 健康检查(Nginx Plus 功能) zone backend 64k; health_check interval=5s fails=3 passes=2 uri=/health; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } } }使用 Lua 模块实现健康检查(开源版)# 需要安装 ngx_lua 模块 http { lua_shared_dict healthcheck 1m; init_by_lua_block { local hc = require "resty.healthcheck" local checker = hc.new({ name = "backend_checker", shm_name = "healthcheck", type = "http", http_req = "GET /health HTTP/1.0\r\nHost: backend\r\n\r\n", interval = 2000, # 2秒检查一次 timeout = 1000, # 超时时间1秒 fall = 3, # 连续3次失败标记为不可用 rise = 2, # 连续2次成功标记为可用 }) -- 添加后端服务器 checker:add_target("backend1.example.com", nil, 80, true) checker:add_target("backend2.example.com", nil, 80, true) -- 启动后台检查 local ok, err = checker:start() if not ok then ngx.log(ngx.ERR, "failed to start health checker: ", err) return end } upstream backend_servers { server backend1.example.com; server backend2.example.com; # 使用 Lua 脚本判断服务器是否健康 server 0.0.0.1; # 防止 upstream 为空 balancer_by_lua_block { local hc = require "resty.healthcheck" local checker = hc.new({ name = "backend_checker", shm_name = "healthcheck", type = "http", }) local ok, err = checker:get_reachable() if not ok then ngx.log(ngx.ERR, "no reachable backend server: ", err) return ngx.exit(500) end -- 设置要代理的服务器 local host, port = ok.host, ok.port local ok, err = ngx.balancer.set_current_peer(host, port) if not ok then ngx.log(ngx.ERR, "failed to set current peer: ", err) return ngx.exit(500) end } } }十四、请求限流与熔断基于漏桶算法的限流http { # 定义漏桶限流规则 limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s; # 每秒5个请求 server { listen 80; server_name api.example.com; location /api/ { limit_req zone=api_limit burst=10 nodelay; # 突发10个请求 # 超过限流时返回自定义错误页面 error_page 503 @api_blocked; } location @api_blocked { default_type application/json; return 503 '{"error":"Too many requests","code":429}'; } } }熔断机制(当后端服务不可用时)upstream backend_servers { server backend1.example.com; server backend2.example.com; # 当后端服务器返回500、502、503、504时,将请求转发到其他服务器 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; }十五、WebSocket 集群与会话保持基于 IP Hash 的会话保持upstream websocket_backend { ip_hash; # 相同IP的请求始终转发到同一后端服务器 server backend1.example.com:8080; server backend2.example.com:8080; } server { listen 80; server_name ws.example.com; location /ws/ { proxy_pass http://websocket_backend; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; # 保持长连接 proxy_read_timeout 3600s; } }十六、自定义日志格式与分析JSON 格式日志http { log_format json_log '{ "timestamp": "$time_iso8601", "remote_addr": "$remote_addr", "host": "$host", "request": "$request", "status": $status, "body_bytes_sent": $body_bytes_sent, "request_time": $request_time, "upstream_response_time": "$upstream_response_time", "http_referer": "$http_referer", "http_user_agent": "$http_user_agent" }'; server { listen 80; server_name example.com; access_log /var/log/nginx/access_json.log json_log; } }十七、HTTP/2 与 TLS 优化配置HTTP/2 与 OCSP 装订server { listen 443 ssl http2; server_name example.com; # 证书配置 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # 启用 OCSP 装订 ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # TLS 优化 ssl_protocols TLSv1.3 TLSv1.2; 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"; # HTTP/2 优化 http2_push_preload on; # 启用 HTTP/2 预推送 }十八、自定义错误页面配置全局错误页面http { # 定义错误页面路径 error_page 400 /errors/400.html; error_page 401 /errors/401.html; error_page 403 /errors/403.html; error_page 404 /errors/404.html; error_page 500 502 503 504 /errors/50x.html; server { listen 80; server_name example.com; location /errors/ { internal; # 只允许内部重定向访问 root /var/www/html; } } }十九、Nginx 与 Lua 脚本集成示例:请求签名验证# 需要安装 ngx_lua 模块 server { listen 80; server_name api.example.com; location /api/ { # 验证请求签名 access_by_lua_block { local secret_key = "your_secret_key" local request_time = ngx.var.arg_timestamp local signature = ngx.var.arg_signature # 检查时间戳是否过期(防止重放攻击) local current_time = os.time() if not request_time or math.abs(current_time - tonumber(request_time)) > 300 then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"Invalid timestamp"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end # 验证签名 local args = ngx.req.get_uri_args() local sorted_keys = {} for k, _ in pairs(args) do if k ~= "sign" then table.insert(sorted_keys, k) end end table.sort(sorted_keys) local sign_str = "" for _, k in ipairs(sorted_keys) do sign_str = sign_str .. k .. "=" .. args[k] .. "&" end sign_str = sign_str .. "key=" .. secret_key local resty_sha1 = require "resty.sha1" local str = require "resty.string" local sha1 = resty_sha1:new() sha1:update(sign_str) local digest = sha1:final() local calculated_sign = str.to_hex(digest) if calculated_sign ~= signature then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"Invalid signature"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end } proxy_pass http://backend_api; } }二十、基于 JWT 的认证JWT 验证示例# 需要安装 lua-resty-jwt 模块 server { listen 80; server_name auth.example.com; location /api/ { access_by_lua_block { local jwt = require "resty.jwt" local secret = "your_jwt_secret" -- 从请求头中获取 JWT local auth_header = ngx.var.http_Authorization if not auth_header then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"Authorization header missing"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end -- 提取 token local _, _, token = string.find(auth_header, "Bearer%s+(.+)") if not token then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"Invalid token format"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end -- 验证 JWT local jwt_obj = jwt:verify(secret, token) if not jwt_obj.verified then ngx.status = ngx.HTTP_UNAUTHORIZED ngx.say('{"error":"' .. jwt_obj.reason .. '"}') ngx.exit(ngx.HTTP_UNAUTHORIZED) end -- 将用户信息传递给后端 ngx.req.set_header("X-User-ID", jwt_obj.payload.user_id) ngx.req.set_header("X-User-Role", jwt_obj.payload.role) } proxy_pass http://backend_api; } }配置验证与重载每次修改配置后,务必执行:nginx -t # 验证配置语法 nginx -s reload # 重载配置(不中断服务)以上配置涵盖了复杂场景下的高级应用,可根据实际需求组合使用。对于生产环境,建议先在测试环境验证配置,确保稳定性。
2025年07月16日
106 阅读
0 评论
0 点赞
2025-07-16
【Nginx】Nginx安装与运行
以下是在不同操作系统上安装和运行 Nginx 的详细步骤:一、Ubuntu/Debian 系统1. 安装 Nginx# 更新包索引 sudo apt update # 安装 Nginx sudo apt install nginx # 验证安装 nginx -v # 输出类似: nginx version: nginx/1.18.02. 控制 Nginx 服务# 启动服务 sudo systemctl start nginx # 设置开机自启 sudo systemctl enable nginx # 检查服务状态 sudo systemctl status nginx # 停止服务 sudo systemctl stop nginx # 重启服务(修改配置后常用) sudo systemctl restart nginx # 重新加载配置(不中断现有连接) sudo systemctl reload nginx3. 防火墙配置# 允许 HTTP 和 HTTPS 流量 sudo ufw allow 'Nginx HTTP' # 仅允许 80 端口 sudo ufw allow 'Nginx HTTPS' # 仅允许 443 端口 sudo ufw allow 'Nginx Full' # 同时允许 80 和 443 端口二、CentOS/RHEL 系统1. 安装 Nginx# 添加 Nginx 官方仓库 sudo tee /etc/yum.repos.d/nginx.repo <<EOF [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=0 enabled=1 EOF # 安装 Nginx sudo yum install nginx # 验证安装 nginx -v2. 控制 Nginx 服务# 启动服务 sudo systemctl start nginx # 设置开机自启 sudo systemctl enable nginx # 其他命令(与 Ubuntu 相同) sudo systemctl {stop|restart|reload|status} nginx3. 防火墙配置# 允许 HTTP 和 HTTPS 流量 sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload三、macOS(使用 Homebrew)1. 安装 Homebrew(如未安装)/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. 安装和管理 Nginx# 安装 Nginx brew install nginx # 启动服务 brew services start nginx # 后台运行并开机自启 # 或临时启动(不设开机自启) nginx # 停止服务 brew services stop nginx # 或直接杀进程 killall nginx # 配置文件位置 /usr/local/etc/nginx/nginx.conf # 访问测试 http://localhost:8080 # macOS 默认监听 8080 端口四、Windows 系统1. 下载与安装访问 Nginx 官网下载页面,下载 Windows 版本(.zip 文件)。解压到指定目录(如 C:\nginx)。2. 控制 Nginx# 进入 Nginx 目录 cd C:\nginx # 启动 Nginx start nginx.exe # 停止 Nginx nginx.exe -s stop # 快速停止 # 或 nginx.exe -s quit # 优雅停止 # 重新加载配置 nginx.exe -s reload # 验证配置文件语法 nginx.exe -t3. 访问测试打开浏览器访问 http://localhost,若看到 "Welcome to nginx!" 页面,则安装成功。五、验证安装是否成功浏览器访问: 打开浏览器,输入 http://服务器IP地址(或 http://localhost),若看到 Nginx 欢迎页面,则安装成功。检查进程:ps -ef | grep nginx # 应看到 master 和 worker 进程端口监听:netstat -tulpn | grep :80 # 检查 80 端口是否被监听六、配置文件位置Linux:/etc/nginx/nginx.conf(主配置),/etc/nginx/conf.d/(站点配置)macOS(Homebrew):/usr/local/etc/nginx/nginx.confWindows:C:\nginx\conf\nginx.conf七、常见问题端口冲突:若 80 端口被占用,修改 nginx.conf 中的 listen 指令(如改为 8080)。权限问题:Linux 下若无法监听 80/443 端口,可使用 sudo 或调整 SELinux/AppArmor 配置。配置语法错误:修改配置后,使用 nginx -t 检查语法,再 nginx -s reload 重新加载。八、下一步配置虚拟主机:创建多个网站配置文件(.conf)放在 /etc/nginx/conf.d/ 目录下。配置 HTTPS:使用 Let's Encrypt 免费证书实现 HTTPS。负载均衡:配置 upstream 模块将请求分发到多个后端服务器。
2025年07月16日
90 阅读
0 评论
0 点赞
2025-07-16
【Nginx】什么是反向代理?
反向代理(Reverse Proxy)是一种服务器端代理技术,用于接收客户端的请求并将其转发到后端的多个目标服务器,然后将目标服务器的响应返回给客户端。与正向代理(如VPN)不同,反向代理对客户端是透明的,客户端无需感知代理服务器的存在,直接与反向代理服务器通信。核心概念与原理工作流程客户端向反向代理服务器(如Nginx、Apache)发送请求(如访问https://example.com)。反向代理服务器根据配置规则(如URL路径、请求头)将请求转发给后端的目标服务器(如Tomcat、Node.js应用)。目标服务器处理请求并返回响应给反向代理服务器。反向代理服务器将响应返回给客户端,客户端认为直接与目标服务器通信。关键特点隐藏后端服务器:客户端只能看到反向代理服务器的IP地址,无法直接访问后端服务器,增强安全性。统一入口:反向代理作为所有请求的唯一入口,简化了客户端与后端的交互。负载均衡:可将请求分发到多个后端服务器,平衡负载,提高可用性。反向代理的主要作用安全防护屏蔽后端服务器的真实IP,防止外部直接攻击(如DDOS、端口扫描)。集中进行访问控制(如IP黑名单、请求过滤)和安全加固(如WAF功能)。负载均衡将请求按策略(如轮询、IP哈希、响应时间)分发到多个后端服务器,避免单点故障,提升系统吞吐量。结合健康检查机制,自动剔除故障节点,保证服务可用性。性能优化缓存静态内容:缓存HTML、CSS、JS、图片等静态资源,减少后端服务器压力。压缩与优化:对响应内容进行Gzip压缩、HTTP/2升级等,加速数据传输。SSL/TLS卸载:由反向代理统一处理HTTPS加密和解密,减轻后端服务器计算负担。流量控制与路由根据请求特征(如URL、用户区域)将流量导向不同的后端服务(如A/B测试、灰度发布)。实现跨域请求(CORS)处理、请求限流(如限制IP访问频率)等。协议转换与兼容性将HTTP请求转换为其他协议(如WebSocket、gRPC),适配不同后端服务。处理不同API版本的路由,支持向后兼容。典型应用场景大型网站与应用如Google、Facebook等通过反向代理分发全球流量,隐藏内部架构。微服务架构作为API网关,统一管理微服务的访问,实现认证、限流、日志等公共逻辑。容器化与云原生在Kubernetes集群中,通过Ingress Controller(基于Nginx、Traefik等)实现服务暴露和流量路由。企业内网应用将内部系统(如OA、CRM)通过反向代理暴露到公网,同时保证安全性。对比正向代理与反向代理特性正向代理反向代理代理对象代理客户端(用户)代理服务器(服务端)客户端感知需要手动配置(如浏览器代理)透明,客户端无感知主要用途突破限制、隐藏客户端IP负载均衡、安全防护、性能优化典型场景VPN、翻墙工具Nginx、Apache、CDN节点技术选型常见的反向代理软件包括:Nginx:高性能、轻量,适合高并发场景,支持HTTP/2、WebSocket等。Apache HTTP Server:功能全面,适合复杂配置和模块化扩展。HAProxy:专注于负载均衡,支持TCP和HTTP协议。Traefik:专为微服务和容器环境设计,自动发现后端服务。Envoy:云原生架构中的高性能代理,支持动态配置和可观测性。总结反向代理是现代分布式系统的核心组件,通过隐藏后端架构、负载均衡、安全防护和性能优化,显著提升了系统的可用性、可扩展性和安全性。无论是企业级应用还是互联网产品,反向代理都是构建高并发、高可靠服务的关键技术之一。
2025年07月16日
75 阅读
0 评论
0 点赞
2025-04-29
【Nginx】什么是Nginx
Nginx(发音为“engine x”)是一款高性能的开源Web服务器、反向代理服务器,同时也支持HTTP缓存、负载均衡、邮件代理等功能。它由俄罗斯工程师Igor Sysoev于2004年开发,旨在解决高并发场景下的性能问题,2011年成立Nginx公司(现属于F5 Networks),目前广泛应用于全球大型网站和复杂分布式系统中。核心功能与特点高性能与高并发处理采用事件驱动的异步非阻塞模型(Epoll/Kqueue),能高效处理海量并发连接(单台服务器可支持数万并发),内存占用低,适合高流量场景。对比传统服务器(如Apache),在静态资源处理和反向代理场景下性能优势显著。反向代理与负载均衡反向代理:接收客户端请求,转发至后端多个服务器(如Tomcat、Node.js、Django等),隐藏后端架构细节,提升安全性。负载均衡:支持轮询、加权轮询、IP哈希、最少连接数等策略,将流量均匀分配到后端服务器,避免单点压力。HTTP缓存与静态资源处理内置缓存机制(如Proxy Cache),可缓存静态文件(HTML、CSS、JS、图片等),减少后端服务器压力,加速客户端响应。直接高效处理静态资源,无需依赖额外模块。丰富的功能扩展支持HTTPS(SSL/TLS加密)、URL重写、Gzip压缩、跨域请求(CORS)、限流(如限制IP访问频率)等。可通过插件(如Lua脚本、Nginx Plus模块)实现自定义逻辑,满足复杂业务需求。轻量与灵活配置文件简洁(nginx.conf),支持热加载(无需重启服务即可更新配置)。资源消耗低,适合运行在容器(Docker)或资源受限的环境中。典型应用场景Web服务器:直接托管静态资源,或通过FastCGI协议处理动态请求(如PHP、Python应用)。反向代理服务器:作为前端入口,转发请求到后端多个应用服务器,实现高可用性和扩展性。负载均衡器:在分布式系统中分发流量,避免单节点过载,提升整体吞吐量。API网关:在微服务架构中作为统一入口,处理路由、认证、限流等逻辑。缓存服务器:通过缓存静态或动态内容,降低后端压力,优化用户访问速度。知名应用案例国内外大型网站:Google、Facebook、Twitter、京东、淘宝、新浪、网易、知乎等均使用Nginx作为核心服务器组件。云计算与CDN:AWS、阿里云、腾讯云等云服务商的CDN节点大量部署Nginx,用于边缘节点的内容分发。总结Nginx以高性能、低资源消耗、高可扩展性成为现代Web架构的核心组件,尤其适合高并发、分布式系统和微服务场景。无论是作为独立Web服务器,还是与其他技术(如Tomcat、Kubernetes)结合使用,都能有效提升系统的稳定性和性能。
2025年04月29日
94 阅读
0 评论
0 点赞
2022-08-29
【Nginx】Nginx泛解析配置-站群推广
通常情况下,我们新建一个二级域名都需要去域名提供商的控制面板新建记录,比如我现在有个baidu.com的域名,但是我有好几家分公司,分别是1.baidu.com,2.baidu.com,3.baidu.com。。。。这样就需要建很多二级域名,显然很麻烦,我们只需要在控制台建一个解析记录,使用*就行,如下图新建解析记录然后nginx的配置如下server { listen 80; # 这是你的域名 server_name *.home.baidu.top; location / { # 泛域名开始配置 if ( $host ~* (.*)\.(.*)\.(.*)\.(.*) ) { set $domain $1; #获取当前的 域名前缀 } # 这里的domain就是获取当前域名前缀,然后指向到该前缀名称的目录 root /home/customerpage/$domain; index index.html index.htm; } }看到如上配置我是指定到我/home/customerpage/目录下的如图下面新建两个子目录每个目录里都有一个html页面然后我就需要这样访问第一个 和文件名一样 hejie.home.baidu.tophttps://www.cnblogs.com/hjieone/p/12323405.html
2022年08月29日
454 阅读
0 评论
0 点赞
2022-06-17
【Nginx】Nginx Log日志统计分析常用命令
IP相关统计统计IP访问量(独立ip访问数量) awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时间段的IP访问量(4-5点) grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l 查看访问最频繁的前100个IP awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 100 查看访问100次以上的IP awk '{print $1}' access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn 查询某个IP的详细访问情况,按访问频率排序 grep '127.0.01' access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100 页面访问统计查看访问最频的页面(TOP100) awk '{print $7}' access.log | sort |uniq -c | sort -rn | head -n 100 查看访问最频的页面([排除php页面】(TOP100) grep -v ".php" access.log | awk '{print $7}' | sort |uniq -c | sort -rn | head -n 100 查看页面访问次数超过100次的页面 cat access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less 查看最近1000条记录,访问量最高的页面 tail -1000 access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less每秒请求量统计统计每秒的请求数,top100的时间点(精确到秒) awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100每分钟请求量统计统计每分钟的请求数,top100的时间点(精确到分钟) awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100每小时请求量统计统计每小时的请求数,top100的时间点(精确到小时) awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100性能分析在nginx log中最后一个字段加入$request_time 列出传输时间超过 3 秒的页面,显示前20条 cat access.log|awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20 列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条 cat access.log|awk '($NF > 1 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100蜘蛛抓取统计统计蜘蛛抓取次数 grep 'Baiduspider' access.log |wc -l 统计蜘蛛抓取404的次数 grep 'Baiduspider' access.log |grep '404' | wc -lTCP连接统计查看当前TCP连接数 netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l 用tcpdump嗅探80端口的访问看看谁最高 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr
2022年06月17日
245 阅读
0 评论
0 点赞