首页
学习
活动
专区
圈层
工具
发布

理解 Nginx 与 PHP-FPM 通信的工作机制

请求动态脚本 Browser请求http://xxx.com/bb.php -> Web Server(Nginx/Apache)分发 -> PHP解析器(PHP-CGI程序)-> 返回处理结果给Web...原理:服务器根据配置文件,知道这是一个PHP脚本文件,需要去找PHP解析器来处理。 PHP解析器会解析php.ini文件初始化执行环境,然后处理请求,再以标准的数据格式返回处理结果,最后退出进程。...动态地生成内容,保证了传递过来的数据是标准格式的(规定了以什么样的格式传哪些数据(URL、查询字符串、POST数据、HTTP header等等)),方便了开发者。...为了能够使Nginx理解FastCGI协议,Nginx提供了FastCGI模块来将http请求映射为对应的FastCGI请求。...Nginx的FastCGI模块提供了fastcgi_param指令来主要处理这些映射关系,下面 是Nginx的一个配置文件实例,其主要完成的工作是将Nginx中的变量翻译成PHP中能够理解的变量。

89440

PHP中getenv()函数

“argv” 传递给该脚本的参数。当脚本运行在命令行方式时,argv 变量传递给程序C 语言样式的命令行参数。当调用GET 方法时,该变量包含请求的数据。...“argc” 包含传递给程序的命令行参数的个数(如果运行在命令行模式)。 “GATEWAY_INTERFACE” 服务器使用的CGI 规范的版本。例如,“CGI/1.1”。...“QUERY_STRING” 查询(query)的字符串(URL 中第一个问号? 之后的内容)。 “DOCUMENT_ROOT” 当前运行脚本所在的文档根目录。在服务器配置文件中定义。...注: 如果脚本在CLI 中被执行,作为相对路径,例如file.php 或../file.php,$_SERVER['SCRIPT_FILENAME'] 将包含用户指定的相对路径。...“SERVER_ADMIN” 该值指明了Apache 服务器配置文件中的SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。

2.1K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP中$_SERVER详解参数&说明

    $_SERVER['argv'] 1、cli模式(命令行)下,第一个参数$_SERVER['argv'][0]是脚本名,其余的是传递给脚本的参数 2、web网页模式下 在web页模式下必须在php.ini...$_SERVER参数详解 $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document root相关。 $_SERVER['argv'] #传递给该脚本的参数。...$_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。 $_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。...例如,“CGI/1.1”。 $_SERVER['SERVER_NAME'] #当前运行脚本所在服务器主机的名称。...$_SERVER['QUERY_STRING'] #查询(query)的字符串。 $_SERVER['DOCUMENT_ROOT'] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。

    2.2K40

    PHP 连接方式介绍以及如何攻击 PHP-FPM

    : CGI 模式 此时 php 是一个独立的进程比如 php-cgi.exe,web 服务器也是一个独立的进程比如 apache.exe,然后当 Web 服务器监听到 HTTP 请求时,会去调用 php-cgi...进程,他们之间通过 cgi 协议,服务器把请求内容转换成 php-cgi 能读懂的协议数据传递给 cgi 进程,cgi 进程拿到内容就会去解析对应 php 文件,得到的返回结果在返回给 web 服务器...简而言之,CGI 模式是 apache2 接收到请求去调用 CGI 程序,而 fastcgi 模式是 fastcgi 进程自己管理自己的 cgi 进程,而不再是 apache 去主动调用 php-cgi...,包括 php 手册规定的: 《php.ini 配置选项列》 https://www.php.net/manual/zh/ini.list.php fastcgi 协议中只可以传输配置信息及需要被执行的文件名及客户端传进来的...,如果是 base64 数据传输换成 base64encode,如果直接传的话把 gopher 的字符串去掉 *CTF echohub 从 echohub 这道题来说,题目环境装了 apache 服务器和

    2.7K20

    PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析

    除了fpm,最常见的sapi应该是用于Apache的mod_php,这个sapi用于php和apache之间的数据交换。 php-cgi也是一个sapi。...基于bash、perl等语言的web应用多半都是以这种方式来执行,这种执行方式一般就被称为cgi,在安装Apache的时候默认有一个cgi-bin目录,最早就是放置这些cgi脚本用的。...也就说,我们可以像perl一样,让web容器直接fork一个php-cgi进程执行某脚本;也可以在后台运行php-cgi -b 127.0.0.1:9000(php-cgi作为fastcgi的管理器),...这个漏洞简单来说,就是用户请求的querystring被作为了php-cgi的参数,最终导致了一系列结果。...探究一下原理,RFC3875中规定,当querystring中不包含没有解码的=号的情况下,要将querystring作为cgi的参数传入。所以,Apache服务器按要求实现了这个功能。

    3.3K30

    Nginx运行FastCGI程序(ngx_http_fastcgi_module模块、fcgi库、spwan-fcgi进程管理器)

    递交表单的文本的 URL,不是所有的浏览器都发出这个信息, 不要依赖它 PATH_INFO 传递给 CGI 程序的路径信息 QUERY_STRING 传递给 CGI 程序的请求参数,也就是用”?...得到所有的信息,再没有信息大小的限制了 使用场景:例如牛客网等平台中的在线编程工具,网页客户端将数据当做输入传递给后端的cgi程序,cgi程序处理完成之后将结果作为输出返回给客户端 cgi与server...;#脚本文件请求的路径 QUERY_STRING $query_string; #请求的参数;如?...六、spawn-fcgi(FasiCGI进程管理器) Nginx不能像Apache那样直接执行外部可执行程序,但Nginx可以作为代理服务器,将请求转发给后端服务器,这也是Nginx的主要作用之一...备注:如果出现访问错误,应该是Nginx配置文件的缩进没写对,在shell中Tab缩进不是4字符 八、编程演示案例 让Nginx运行FastCGI程序的工作原理大致为: 第一步:先编写一个FastCGI

    3.4K20

    nginx+php-fpm工作原理

    (录入视频转换、统计处理等); 动态/静态子进程产生; 基本 SAPI 运行状态信息(类似Apache的 mod_status); 基于 php.ini 的配置文件。...保证了传递过来的数据是标准格式的(规定了以什么样的格式传哪些数据(URL、查询字符串、POST数据、HTTP header等等)),方便了开发者。...FastCGI FastCGI,顾名思义为更快的 CGI,它允许在一个进程内处理多个请求,而不是一个请求处理完毕就直接结束进程,性能上有了很大的提高。...为了能够使 Nginx 理解 fastcgi 协议,Nginx 提供了 fastcgi 模块来将 http 请求映射为对应的 fastcgi 请求。...Nginx的FastCGI模块提供了fastcgi_param指令来主要处理这些映射关系,下面 是Nginx的一个配置文件实例,其主要完成的工作是将Nginx中的变量翻译成PHP中能够理解的变量。

    2.2K20

    P001PHP开发之PHP实现取得HTTP请求的原文相关信息

    $_SERVER['argv'] #传递给该脚本的参数。 $_SERVER['argc'] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。...$_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。...$_SERVER['QUERY_STRING'] #查询(query)的字符串。 $_SERVER['DOCUMENT_ROOT'] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。...$_SERVER['SERVER_ADMIN'] #管理员信息 $_SERVER['SERVER_PORT'] #服务器所使用的端口 $_SERVER['SERVER_SIGNATURE'] #包含服务器版本和虚拟主机名的字符串...$_SERVER['AUTH_TYPE'] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。

    73720

    C语言CGI编程入门(一)

    比如送入数据库、判断输入的信息是否合法等。     主流的CGI程序用Perl编写,Perl是一款强大的脚本语言,不过我这里不太懂,我也不去比较某两个语言间的优劣。...看到那个“cgi-bin”了吗,这是默认的cgi程序目录。当然,我们也可以手动设置其位置:用记事本打开conf/httpd.conf,这是Apache的配置文件。...;     当然也可以用C++的cout来代替printf输出。先别急着编译,我们先在工程上点右键,选择属性: ?     在配置设置-常规中,更改输出目录为cgi-bin下。...(也包括windowsAPI)     比如,用户填写好了注册表单,将信息传递给我的CGI程序,我就可以调用ODBC的函数,连接数据库,将信息写入数据库。...后的所有内容:getenv("QUERY_STRING"))     关于这个函数的所有用法我放在附件里,下载可查。

    4.6K40

    全面了解CGI、FastCGI、PHP-FPM

    来加载php5_module,就是把php作为apache的一个子模块来运行。...被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程池) 所以,以上的apache调用php执行的过程如下: apache -> httpd -> php5_module -> sapi...URL、查询字符串、POST数据、HTTP header都会有。所以,CGI就是规定要传哪些数据,以什么样的格式传递给后方处理这个请求的协议。也就是说,CGI就是专门用来和 web 服务器打交道的。...(CGI程序和FastCGI程序,可以理解成遵循CGI协议和FastCGI协议编写的程序) FastCGI的工作原理: FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程...这种方式可以让HTTP服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。 ?

    3.2K12

    全面了解CGI、FastCGI、PHP-FPM

    来加载php5_module,就是把php作为apache的一个子模块来运行。...被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程池) 所以,以上的apache调用php执行的过程如下: apache -> httpd -> php5_module -> sapi ...URL、查询字符串、POST数据、HTTP header都会有。所以,CGI就是规定要传哪些数据,以什么样的格式传递给后方处理这个请求的协议。也就是说,CGI就是专门用来和 web 服务器打交道的。...(CGI程序和FastCGI程序,可以理解成遵循CGI协议和FastCGI协议编写的程序) FastCGI的工作原理: FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程...这种方式可以让HTTP服务器专一地处理静态请求,或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

    1.1K00

    PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)分析与复现

    如果get发送的请求字符串中不包含”=”,那么Apache就会把请求传到命令行作为cgi的参数。...但这会导致恶意请求就可以将命令行参数传递给php,如果直接处理传参,那么会影响到以独立脚本方式运行的PHP脚本。所以只有当开头是-的时候(跳过所有空白符号)才阻止传递参数。...> Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe" 上面这些配置处理的都是一个类似的场景,就是apache...结合上面的特性,你可以通过传%ad来传入一个-,这样在-之后的部分就会成为php-cgi的参数,构成参数注入。...将PHP的执行程序暴露在外 - XAMPP默认配置 这个场景要特别一些,相比直接把PHP的二进制直接放在web目录下,可能更常见的还是xampp的默认配置。

    6.2K310
    领券