fastcgi_params 与 fastcgi.conf的差异

fastcgi.conf

对比下fastcgi.conf与fastcgi_params文件,可以看出只有以下差异:

Java代码  

  1. tctq4master@ddd:/etc/nginx$ diff fastcgi.conf  fastcgi_params
  2. 2d1
  3. < fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
  4. 25a25,26
  5. >
  6. > fastcgi_param  SCRIPT_FILENAME    $request_filename;

即fastcgi.conf只比fastcgi_params多了一行

Java代码

  1. fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;

原本只有fastcgi_params文件,fastcgi.conf是nginx 0.8.30 (released: 15th of December 2009)才引入的。主要为是解决以下问题(参考:http://www.dwz.cn/x3GIJ):

原本Nginx只有fastcgi_params,后来发现很多人在定义SCRIPT_FILENAME时使用了硬编码的方式。

例如,fastcgi_param  SCRIPT_FILENAME  /var/www/foo$fastcgi_script_name。

于是为了规范用法便引入了fastcgi.conf。

过这样的话就产生一个疑问:

为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?

这是因为fastcgi_param指令是数组型的,和普通指令相同的是:内层替换外层;

和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。

换句话说,如果在同级定义两次SCRIPT_FILENAME,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。

因此不再建议大家使用以下方式(搜了一下,网上大量的文章,并且nginx.conf的默认配置也是使用以下方式):

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

而使用最新的方式:

include fastcgi.conf;

php问题 以下两种方式,选用第二种

location ~ \.php$ {

root           html;

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

include        fastcgi_params

}

location ~ \.php$ {

root           html;

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

include        fastcgi.conf;

}

原文网址:http://www.cnblogs.com/skynet/p/4146083.html

============================================================================

Java代码  

  1. fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;

这句话其实就是定义php中用到的服务器变量 ——$_SERVER

http://wiki.nginx.org/NginxHttpFcgiModule 这个网址下有这么一句话:

This module allows Nginx to interact with FastCGI processes and control what parameters are passed to the process。

意思是 “服务器” 向你的处理php的cgi传递过去他需要的一些参数,而至少要有下面的两个参数php才能执行起来。

以下是例子

Below is an example of the minimally necessary parameters for PHP:

Java代码  

  1. fastcgi_param SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;
  2. fastcgi_param QUERY_STRING $query_string;

Parameter SCRIPT_FILENAME is used by PHP for determining the name of script. to execute, and QUERY_STRING contains the parameters of the request.

所以 我们在没有定义SCRIPT_FILENAME这个系统变量的时候 php是没法解释执行的

这个变量的定义可以写在nginx的配置文件nginx.conf里 也可以写在外部 用include的方式在nginx.conf里包含进来。

时间: 2024-12-10 17:13:21

fastcgi_params 与 fastcgi.conf的差异的相关文章

centos+nginx+php-fpm+php include fastcgi_params php页面能访问但空白,被fastcgi_params与fastcgi.conf害惨了

今天在centos上折腾这块是发现老是访问页面时,浏览器中提示是200 ok.且访问html后缀却是正常出现内容. 但是访问php后缀却返回空白页面,同时查看所有的log没有发现任何出错信息; 再在nginx.conf中的server中写如果 路径不存在就return 405这样的断句来调试,发现我的配置还是正常能走到那个405. 就是没有内容返回.... 找了几个小时.头都快晕了. 还是没有搞明白怎么回事. 最后想想和比较了下fastcgi_params与fastcgi.conf,头已经晕了,

centos+nginx+php-fpm+php include fastcgi_params php页面能訪问但空白,被fastcgi_params与fastcgi.conf害慘了

今天在centos上折腾这块是发现老是訪问页面时,浏览器中提示是200 ok.且訪问html后缀却是正常出现内容. 可是訪问php后缀却返回空白页面,同一时候查看全部的log没有发现不论什么出错信息; 再在nginx.conf中的server中写假设 路径不存在就return 405这种断句来调试,发现我的配置还是正常能走到那个405. 就是没有内容返回.... 找了几个小时.头都快晕了. 还是没有搞明确怎么回事. 最后想想和比較了下fastcgi_params与fastcgi.conf,头已经

python3 实现对比conf 文件差异

用法: ./conf.py  nginx1.conf  nginx2.conf > diff.html conf.py #!/usr/bin/python import difflib import sys ####   Usage: compare_nginx.conf.py filename1 filename2 >diff.html try:     textfile1 = sys.argv[1]     textfile2 = sys.argv[2] except Exception 

如何正确配置Nginx+PHP及正确的nginx URL重写

对很多人而言,配置Nginx+PHP无外乎就是搜索一篇教程,然后拷贝粘贴.听上去似乎也没什么问题,可惜实际上网络上很多资料本身年久失修,漏洞百出,如果大家不求甚解,一味的拷贝粘贴,早晚有一天会为此付出代价. 假设我们用PHP实现了一个前端控制器,或者直白点说就是统一入口:把PHP请求都发送到同一个文件上,然后在此文件里通过解析「REQUEST_URI」实现路由. 此时很多教程会教大家这样配置Nginx+PHP: server { listen 80; server_name foo.com; r

ubuntu php5.6源码安装

今天又花了一天时间装了php,感觉php的源码安装也挺麻烦的,整个过程各种报错. 下篇文章准备整合所有查找到的报错和解决方法. php和nginx一样,在安装前需要装一堆的依赖.有libmcrypt.mcrypt.mhash.其实远不止这三个包,在后面的configure和make中还会陆陆续续安装一些依赖. 1.安装libmcrypt.mcrypt.mhash(整个过程都在/usr/local/src/php目录下) #创建/usr/local/src/php目录并进入mkdir /usr/l

centos 6.8 安装LNMP环境(linux+nginx+mysql+php)

Nginx 特性 Nginx 性能稳定.功能丰富.运维简单.处理静态文件速度快且消耗系统资源极少.1.相比 Apache,用 Nginx 作为 Web 服务器:使用资源更少,支持更多并发连接,效率更高.2.作为负载均衡服务器:Nginx 既可在内部直接支持 Rails 和 PHP,也可支持作为 HTTP 代理服务器对外进行服务.Nginx 用 C 编写而成, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多.3.作为邮件代理服务器:Nginx 同时也是一款非常优秀的邮件代理

CentOS源码安装搭建LNMP全过程(包括nginx,mysql,php,svn)

服务器环境为:CentOS6.5 64位 目标:搭建LNMP(Linux + Nginx + MySQL + PHP +SVN),其中svn是用来代替ftp,方便开发中调试同步代码 相关目录:所有软件都安装到/www/目录下,在www目录下新建web文件夹作为网站的根路径,www目录下新建wwwsvn作为svn的仓库地址./www/software用来放nginx,mysql,php的安装包和源码.nginx运行分组和账户www:www 一,安装前的准备 yum -y install ntp m

yii2的安装

因为兴趣,一直想自己做一个项目,可以自己修改,升级,就像是呵护自己的产品一样,万事开头难,筹备了很久,进度及其缓慢,因为项目一开始是打算使用yii框架的,于是今天着手准备安装yii2,虽然遇到了一些情况,但最终还是完成了,说一下遇到的状况吧,以防后面会再次遇到,因为这个情况我不是第一个遇到的,百度了一下,有遇到和我一样情况的开发者,将它的分享贴出: 原文地址[http://www.tuicool.com/articles/iauq2qN] 这里只讲 linux下安装Yii2的方法 , windo

zabbix监控之基于LNMP环境安装

本文描述zabbix在lnmp环境中的搭建过程,为减少配置难度,mysql,php采用yum安装. 本安装过程以直接高效的方式叙述. 1.Yum安装mysql mysql使用yum安装方式 yum install mysql-servermysql-devel mysql /etc/init.d/mysqld start 2.Yum安装php yum安装后的php配置文件是/etc/php.ini. yum install -y php php-mysqlphp-gd libjpeg* php-