Nginx+php配置文件及原理解析


Posted in PHP onDecember 09, 2020

采用nginx+PHP作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置。这一步对新手而言一般需要网上查资料,对于一般的熟手而言,也有不少同学并没有搞透彻为何要如此这般配置。本文的主要内容为如何在nginx server中正确配置php调用方法,以及配置的基本原理。

一、nginx+php运行原理:

首先简单的讲一讲原理,目前主流的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 1057/php-fpm

这里的127.0.0.1:9000 就是监听本机9000端口的意思。

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中配置php调用方法就变得易如反掌。

二、配置文件:

直接贴上代码逐行进行讲解,此处贴出一个能正常启动php脚本的最简nginx vhost配置:

server { 
  listen    8011; 
  server_name test.cn; 
  location ~ \.php?.*$ { 
    root      /share/test; 
    fastcgi_pass  127.0.0.1:9000; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include    fastcgi_params; 
  } 
}

1、第一个大括号 server{ }:不必多说,代表一个独立的server,

2、listen 8011:代表该server监听8011端口

3、location ~ \.php?.*${ }:代表一个能匹配对应uri的location,用于匹配一类uri,并对所匹配的uri请求做自定义的逻辑、配置。这里的location,匹配了所有带.php的uri请求,例如:http://192.168.244.128:8011/test.php/asdasd http://192.168.244.128:8011/index.php等

4、root /share/test:请求资源根目录,告诉匹配到该location下的uri到/share/teset文件夹下去寻找同名资源。

5、fastcgi_pass 127.0.0.1:9000:这行开始是本文的重点:这行代码的意思是,将进入到该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配置文件

以上就是最简洁版的nginx启动php脚本的最简配置,当重启nginx之后,在/share/test目录下创建一个xx.php文件,输入<?php echo "hello world"; ?>保存,然后在浏览器中访问localhost:8011/xx.php 就可以在网页上显示hello world了。

三、总结:

其实对于调用php这类cgi脚本程序,只要理解了我开头提到的5点原理,然后结合5-7行配置讲解,完全可以较清晰的明白为什么需要这样配置了。对于新手而言,往往被fastcgi,php-fpm cgi程序搞得一头雾水,胡乱配置已通,跑通上线,也不去深究其原理。所以希望写在这里的东西能对读者带来一点点的帮助。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP 网页过期时间的控制代码
Jun 29 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
Dec 16 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
用PHP实现Ftp用户的在线管理
Feb 16 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
php str_replace替换指定次数的方法详解
May 05 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
PHP中localeconv()函数的用法
Mar 26 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
Dec 16 PHP
thinkphp诸多限制条件下如何getshell详解
Dec 09 #PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 09 #PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 #PHP
PHP大文件分割分片上传实现代码
Dec 09 #PHP
PHP rsa加密解密算法原理解析
Dec 09 #PHP
PHP如何解决微信文章图片防盗链
Dec 09 #PHP
PHP sdk文档处理常用代码示例解析
Dec 09 #PHP
You might like
十天学会php之第八天
2006/10/09 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
Vue.js基础知识汇总
2016/04/27 Javascript
Jquery为DIV添加click事件的简单实例
2016/06/02 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python中__call__用法实例
2014/08/29 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
Python reversed函数及使用方法解析
2020/03/17 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
中专自我鉴定范文
2013/10/16 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
医药销售自我评价200字
2014/09/11 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
教师工作证明范本
2015/06/12 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
生日祝酒词大全
2015/08/10 职场文书
Python3.10的一些新特性原理分析
2021/09/15 Python
MyBatis 动态SQL全面详解
2021/10/05 MySQL
美元符号 $
2022/02/17 杂记
cypress测试本地web应用
2022/06/01 Javascript