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 相关文章推荐
phpMyAdmin 安装及问题总结
May 28 PHP
PHP IN_ARRAY 函数使用注意事项
Jul 24 PHP
php下清空字符串中的HTML标签的代码
Sep 06 PHP
php类常量的使用详解
Jun 08 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
Oct 26 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
Nov 25 PHP
PHP随机生成信用卡卡号的方法
Mar 23 PHP
php微信公众号开发之快递查询
Oct 20 PHP
PHP+RabbitMQ实现消息队列的完整代码
Mar 20 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
Oct 18 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
mysql limit查询优化分析
2008/11/12 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
centos系统升级python 2.7.3
2014/07/03 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
举例讲解Python中的算数运算符的用法
2015/05/13 Python
Python中文竖排显示的方法
2015/07/28 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Python测试模块doctest使用解析
2019/08/10 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
波兰珠宝品牌:YES
2019/08/09 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
自动一体化专业求职信
2014/03/15 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
西安兵马俑导游词
2015/02/02 职场文书
教师节老师寄语
2015/05/28 职场文书
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技
MySQL外键约束(Foreign Key)案例详解
2022/06/28 MySQL
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL