如何配置服务器以使用 FastCGI 模式高效运行 PHP7?
- 内容介绍
- 文章标签
- 相关推荐
本文共计849个文字,预计阅读时间需要4分钟。
众所周知,常用的与PHP搭配的Web服务器主要有两个:Apache和Nginx。编译完服务器后,需要配置以下内容才能正常解析PHP文件。
下面我们来分别看看这两种服务器是如何解析PHP文件的。
Nginx
1. 配置Nginx模块:确保Nginx安装了`ngx_http_php_module`模块。
2.创建PHP-FPM进程池:配置PHP-FPM,创建一个或多个进程池,以便Nginx可以与PHP-FPM交互。
3.配置Nginx服务器块:
- 在服务器块中,设置`fastcgi_pass`指向PHP-FPM进程池的地址。 - 设置`fastcgi_param`传递必要的PHP环境变量,如`PHP_VALUE`。 - 配置`location`块,使其匹配PHP文件扩展名(如`.php`)。示例配置:
nginxserver { listen 80; server_name example.com;
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }}
Apache
1. 安装PHP模块:确保Apache安装了`mod_php`模块。
2.配置Apache模块:
- 在`httpd.conf`或`.htaccess`文件中,启用`mod_php`模块。 - 设置`AddType application/x-httpd-php .php`,以便Apache识别PHP文件。示例配置:
apacheLoadModule php7_module modules/libphp7.soAddType application/x-httpd-php .php
通过以上配置,Nginx和Apache都可以正常解析PHP文件。
众所周知,常用的跟php搭配的web server 有两个,apache 和nginx,编译完server之后需要配置下才可以正常解析php文件。下面我们来看下两种服务器是如何解析php文件。
Nginx
一、主流的nginx+php的运行原理如下:
1、nginx的worker进程直接管理每一个请求到nginx的网络请求。
2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。
3、关于fastcgi:fastcgi是一种进程管理器,管理cgi进程。市面上有多种实现了fastcgi功能的进程管理器,php-fpm就是其中的一种。再提一点,php-fpm作为一种fast-cgi进程管理服务,会监听端口,一般默认监听9000端口,并且是监听本机,也就是只接收来自本机的端口请求,所以我们通常输入命令netstat -nlpt|grep php-fpm 会得到:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1078/php-fpm
4、关于fastcgi的配置文件,目前fastcgi的配置文件一般放在nginx.conf同级目录下,配置文件形式,一般有两种:fastcgi.conf 和 fastcgi_params。不同的nginx版本会有不同的配置文件,这两个配置文件有一个非常重要的区别:fastcgi_parames文件中缺少下列配置:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
我们可以打开fastcgi_parames文件加上上述行,也可以在要使用配置的地方动态添加。使得该配置生效。
5、当需要处理php请求时,nginx的worker进程会将请求移交给php-fpm的worker进程进行处理,也就是最开头所说的nginx调用了php,其实严格得讲是nginx间接调用php。
二、nginx 配置
来看一个host的简单配置:
server { listen 80; server_name example.com; location ~ \.php?.*$ { root /home/mark/www; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
1、第一个大括号 server{ }不必多说,代表一个独立的server
2、listen 80代表该server监听8011端口
3、location ~ \.php?.*${ }代表一个能匹配对应uri的location,用于匹配一类uri,并对所匹配的uri请求做自定义的逻辑、配置。这里的location,匹配了所有带.php的uri请到该location内的uri请求看做是cgi程序,并将请求发送到9000端口,交由php-fpm处理。
6、fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 动态添加了一行fastcgi配置,配置内容为SCRIPT_FILENAME,告知管理进程,cgi脚本名称。由于我的nginx中只有fastcgi_params文件,没有fastcgi.conf文件,所以要使php-fpm知道SCRIPT_FILENAME的具体值,就必须要动态的添加这行配置。
7、include fastcgi_params 引入fastcgi配置文件
本文共计849个文字,预计阅读时间需要4分钟。
众所周知,常用的与PHP搭配的Web服务器主要有两个:Apache和Nginx。编译完服务器后,需要配置以下内容才能正常解析PHP文件。
下面我们来分别看看这两种服务器是如何解析PHP文件的。
Nginx
1. 配置Nginx模块:确保Nginx安装了`ngx_http_php_module`模块。
2.创建PHP-FPM进程池:配置PHP-FPM,创建一个或多个进程池,以便Nginx可以与PHP-FPM交互。
3.配置Nginx服务器块:
- 在服务器块中,设置`fastcgi_pass`指向PHP-FPM进程池的地址。 - 设置`fastcgi_param`传递必要的PHP环境变量,如`PHP_VALUE`。 - 配置`location`块,使其匹配PHP文件扩展名(如`.php`)。示例配置:
nginxserver { listen 80; server_name example.com;
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }}
Apache
1. 安装PHP模块:确保Apache安装了`mod_php`模块。
2.配置Apache模块:
- 在`httpd.conf`或`.htaccess`文件中,启用`mod_php`模块。 - 设置`AddType application/x-httpd-php .php`,以便Apache识别PHP文件。示例配置:
apacheLoadModule php7_module modules/libphp7.soAddType application/x-httpd-php .php
通过以上配置,Nginx和Apache都可以正常解析PHP文件。
众所周知,常用的跟php搭配的web server 有两个,apache 和nginx,编译完server之后需要配置下才可以正常解析php文件。下面我们来看下两种服务器是如何解析php文件。
Nginx
一、主流的nginx+php的运行原理如下:
1、nginx的worker进程直接管理每一个请求到nginx的网络请求。
2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。
3、关于fastcgi:fastcgi是一种进程管理器,管理cgi进程。市面上有多种实现了fastcgi功能的进程管理器,php-fpm就是其中的一种。再提一点,php-fpm作为一种fast-cgi进程管理服务,会监听端口,一般默认监听9000端口,并且是监听本机,也就是只接收来自本机的端口请求,所以我们通常输入命令netstat -nlpt|grep php-fpm 会得到:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1078/php-fpm
4、关于fastcgi的配置文件,目前fastcgi的配置文件一般放在nginx.conf同级目录下,配置文件形式,一般有两种:fastcgi.conf 和 fastcgi_params。不同的nginx版本会有不同的配置文件,这两个配置文件有一个非常重要的区别:fastcgi_parames文件中缺少下列配置:fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
我们可以打开fastcgi_parames文件加上上述行,也可以在要使用配置的地方动态添加。使得该配置生效。
5、当需要处理php请求时,nginx的worker进程会将请求移交给php-fpm的worker进程进行处理,也就是最开头所说的nginx调用了php,其实严格得讲是nginx间接调用php。
二、nginx 配置
来看一个host的简单配置:
server { listen 80; server_name example.com; location ~ \.php?.*$ { root /home/mark/www; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
1、第一个大括号 server{ }不必多说,代表一个独立的server
2、listen 80代表该server监听8011端口
3、location ~ \.php?.*${ }代表一个能匹配对应uri的location,用于匹配一类uri,并对所匹配的uri请求做自定义的逻辑、配置。这里的location,匹配了所有带.php的uri请到该location内的uri请求看做是cgi程序,并将请求发送到9000端口,交由php-fpm处理。
6、fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 动态添加了一行fastcgi配置,配置内容为SCRIPT_FILENAME,告知管理进程,cgi脚本名称。由于我的nginx中只有fastcgi_params文件,没有fastcgi.conf文件,所以要使php-fpm知道SCRIPT_FILENAME的具体值,就必须要动态的添加这行配置。
7、include fastcgi_params 引入fastcgi配置文件

