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边学边教》(02.Apache+PHP环境配置――上篇)
Dec 13 PHP
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
MySQL数据源表结构图示
Jun 05 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
Apr 28 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
php socket实现的聊天室代码分享
Aug 16 PHP
CI框架给视图添加动态数据
Dec 01 PHP
php操作MongoDB类实例
Jun 17 PHP
php遍历树的常用方法汇总
Jun 18 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
使用PHP进行微信公众平台开发的示例
Aug 21 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 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开启安全模式后禁用的函数集合
2011/06/26 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
jquery 插件学习(四)
2012/08/06 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
微信小程序点击保存图片到本机功能
2019/12/13 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
python rsa 加密解密
2017/03/20 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Pyqt5实现英文学习词典
2019/06/24 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
公司司机岗位职责范本
2014/03/03 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL