nginx和php-fpm连接超时的相关配置以及Nginx中的try_files以及root、alias的使用

一、nginx和php-fpm连接超时的相关配置

    线上的PHP服务器架构大都是nginx proxy->nginx web->php-fpm。在服务器运行正常,服务器之间的连接正常,未被防火墙阻止的情况下,对这种架构排查504报错时需要注意以下几个地方的参数。

1是nginx proxy服务器中nginx.conf配置文件里的三项proxy..timeout配置。

        此配置表示proxy向上游请求时的超时时间,s为秒。

proxy_connect_timeout 30s; #nginx连接上游的proxy的超时时间
proxy_send_timeout 30s;    #nginxt往上游proxy发送数据的超时时间
proxy_read_timeout 30s;    #nginxt从上游proxy读取数据的超时时间

2是nginx web服务器中nginx.conf配置里的fastcgi..timeout超时配置,

        此配置表示nginx向上游php请求的超时时间,s为秒。

fastcgi_connect_timeout 30s; #nginx连接fastcgi的超时时间
fastcgi_send_timeout 30s;    #nginx往fastcgi发送参数的超时时间
fastcgi_read_timeout 30s;    #nginx从fastcig获取数据的超时时间

3是php-fpm配置中的request_terminate_timeout配置

        此配置表示多少秒之后php-fpm会终止对应的php子进程。request_terminate_timeout。这个配置属于php-fpm,控制的是一个request执行的最长时间,超过这个时间worker进程将被killed。
request_terminate_timeout=120s

        在后端执行时间超过请求方的时间设定时间时,请求方会主动断开连接,后端服务器日志会记录499,关于499的报错这里不再展开,之前也有篇文章 nginx出现499错误码的原因以及proxy_ignore_client_abort配置 及 nginx日志配置变量大全意义详解_nginx 499-CSDN博客 服务端可以通过设置proxy_ignore_client_abort on来忽略客户端中断请求,从而不再记录499日志,改为200,但这样只是让表象上看起来请求正常,前端还是请求超时了的。

    在解决服务器超时的问题时,首先按照上面的这些配置项去逐一排查,如果一切没问题,直接请求服务器时理论是OK的了,这时如果再有超时问题,需要排查域名解析到你的服务器的中间环节会不会有超时设置问题,比如CDN上的回源请求超时等待时间以及其它的中间负载均衡出的问题。

二、Nginx中的try_files以及root、alias的使用

    nginxtry_files基本是nginx配置中必定用到的一个命令,但如果没有深入了解,也许你就只知道默认配置文件中的那行代码,就是尝试请求一下uri,然后如果没有找到就转到程序框架的入口文件上。try_files的作用域在server、location,其语法如下:

#语法1,一直寻找文件,找不到定义的uri上。
try_files file ... uri 
#语法2,一直寻找文件,找不到就返回一个状态码
try_files file ... = code
#示例
index index.html index.php;
try_files $uri /cache/ /data/files/ $uri /app.php;
try_files $uri /cache/ /data/files/ $uri =404;

    如上示例中,我们向服务端发送一个请求拿程序生成的一个图片/makejpg/102.jpg,它将先检查WEB目录 下/makejpg/102.jpg图片文件是否存在 ,如果不存在检测设定的root下/cache/makejpg/102.jpg 之后没有再请求root下 /data/files/makejpg/102.jpg ,最后没有的话就去请求/app.php去生成102.jpg这么一张图片。下面一个请求如果是静态服务器则没找到就直接返回404了。

    try_files除了上述在此服务器寻找文件以及找到请求处理之外,也可以直接重定向其它的location,其它的location就可以自由配置处理了,甚至可以转发到upstream请求,纯缓存服务器配置这种比较合适,即所有的数据都是后端生成的,经过一次就缓存下来,如果缓存失效就去后端拿数据。有点CDN的感觉。

location ^~ /images/ {
    root /image/cache/;
    try_files $uri @image_backend;
}
location @image_backend {
    proxy_pass http://192.168.1.10:80;
}

    最后上面提到的try_files查找路径的事情,nginx中对路径的指令有root和alias,root会持续继成,在location中匹配后,会将匹配的location中的root路径替换访问url的host从而得到文件的真实地址。而alise它不会替换匹配后的url地址,而是替换匹配部分的url。alias指令也可以有多个,有些配置中使用alias会省不少事,示例如下:

#请求http://47.3.3.36/mobile/index.php  -> /home/wwwroot/mobile/index.php
location /mobile/ {
    root /home/wwwroot/ 
}

#请求http://47.3.3.36/mobile/index.php  -> /home/wwwroot/mobile/index.php
location /mobile/ {
    alias /home/wwwroot/mobile/
}

http://www.niftyadmin.cn/n/5666839.html

相关文章

C++学习笔记(32)

三十四、双链表 示例&#xff1a; #include <iostream> using namespace std; typedef int ElemType; // 自定义链表的数据元素为整数。 struct LNode // 双链表的结点。 { ElemType data; // 存放结点的数据元素。 struct LNode* prior,*next; // 前驱和后继结点的指针。…

Windows10安装cuda11.3.0+cudnn8.5.0,以及创建conda虚拟环境(pytorch)

1、检查电脑驱动版本为561.09&#xff0c;选择cuda版本&#xff0c;下图可知cuda版本<12.6。 nvidia-smi #查看驱动版本&#xff0c;以及最大可以安装的cuda版本 2、Anaconda3-2024.06-1-Windows-x86_64.exe下载&#xff1a; 官网&#xff1a;https://www.baidu.com/link?…

php的require() 和 require_once() 之间的主要区别

PHP 中的 require() 和 require_once() 语句都用于在执行脚本之前插入一个文件的内容到另一个文件中。然而&#xff0c;它们之间有一个关键的区别&#xff0c;这个区别主要体现在它们如何处理被包含文件的重复包含问题上。 require()&#xff1a; 当使用 require() 语句时&…

C语言 | Leetcode C语言题解之第419题棋盘上的战舰

题目&#xff1a; 题解&#xff1a; int countBattleships(char** board, int boardSize, int* boardColSize){int row boardSize;int col boardColSize[0];int ans 0;for (int i 0; i < row; i) {for (int j 0; j < col; j) {if (board[i][j] X) {if (i > 0 &…

江协科技STM32学习- P14 示例程序(定时器定时中断和定时器外部时钟)

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

卡车配置一键启动无钥匙进入手机控车

‌ 卡车智能一键启动无钥匙进入手机控车&#xff0c;通过手机应用程序与汽车内置硬件、软件的无线通信&#xff0c;实现对汽车的远程控制‌。 卡车改装一键启动的步骤包括安装门把手的感应装置、拆卸仪表台和门板&#xff0c;取出内部的待接线束&#xff0c;并将一键启动…

spring与springmvc整合

文章目录 spring与springmvc整合重复创建bean容器关系获取spring容器上下文 spring与springmvc整合 在项目中使用springmvc的时候&#xff0c;由于spring和springmvc是同源的&#xff0c;有时候大家会把所有的配置都扔到springmvc的配置文件中&#xff0c;而不去区分spring和s…

电气自动化入门03:安全用电

视频链接&#xff1a;2.1 电工知识&#xff1a;触电原因与防触电措施_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW/?p4&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电流对人体的危害 电击&#xff1a;电流通过人体。 电伤&#xff1a;电流热效应…