Nginx中FastCGI如何配置优化

FastCGI:

FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。另外传统的CGI接口方式安全性也很差,现在已经很少被使用了。

FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。

Nginx不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP)必须通过FastCGI接口来调用。FastCGI接口在Linux下是socket,(这个socket可以是文件socket,也可以是ip socket)。为了调用CGI程序,还需要一个FastCGI的wrapper(wrapper可以理解为用于启动另一个程序的程序),这个wrapper绑定在某个固定socket上,如端口或者文件socket。当Nginx将CGI请求发送给这个socket的时候,通过FastCGI接口,wrapper接纳到请求,然后派生出一个新的线程,这个线程调用解释器或者外部程序处理脚本并读取返回数据;接着,wrapper再将返回的数据通过FastCGI接口,沿着固定的socket传递给Nginx;最后,Nginx将返回的数据发送给客户端,这就是Nginx+FastCGI的整个运作过程。详细的过程,如图所示。

例子:

Nginx中FastCGI参数的优化配置实例

在配置完成Nginx+FastCGI之后,为了保证Nginx下PHP环境的高速稳定运行,需要添加一些FastCGI优化指令。下面给出一个优化实例,将下面代码添加到Nginx主配置文件中的HTTP层级。

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_cache TEST;
fastcgi_cache_valid 200 302 1h;
fastcgi_cache_valid 301 1d;
fastcgi_cache_valid any 1m;

上述代码的含义:

  • 第一行代码是为FastCGI缓存指定一个文件路径、目录结构等级、关键字区域存储时间和非活动删除时间。
  • fastcgi_connect_timeout指定连接到后端FastCGI的超时时间。
  • fastcgi_send_timeout指定向FastCGI传送请求的超时时间,这个值是已经完成两次握手后向FastCGI传送请求的超时时间。
  • fastcgi_read_timeout指定接收FastCGI应答的超时时间,这个值是已经完成两次握手后接收FastCGI应答的超时时间。
  • fastcgi_buffer_size用于指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小。
  • fastcgi_buffers指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。
  • fastcgi_busy_buffers_size的默认值是fastcgi_buffers的两倍。
  • fastcgi_temp_file_write_size表示在写入缓存文件时使用多大的数据块,默认值是fastcgi_buffers的两倍。
  • fastcgi_cache表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502错误的发生,但是开启缓存也会引起很多问题,要视具体情况而定。
  • fastcgi_cache_valid、fastcgi用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时,将301应答缓存1天,其他应答均缓存1分钟。

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

(0)

相关推荐

  • 在Mac OS上部署Nginx和FastCGI以及Flask框架的教程

    最近在学习Flask,本文介绍一下如何部署Flask开发的应用,同时也学习一下Nginx的使用,这只是在Mac上的一个实验. 应用 这里使用的应用就是官方的文档中给出的Flaskr. 安装Nginx 使用HomeBrew安装Nginx: $ brew install nginx HomeBrew会自动安装Nginx及其依赖的程序.在我的电脑上安装的是Nginx 1.6.2,配置文件的路径是/usr/local/etc/nginx/nginx.conf. 启动Nginx的命令: $ nginx N

  • nginx FastCGI错误Primary script unknown解决办法

    在centos上成功编译安装nginx 1.4.php 5.4并成功启动nginx和php-fpm后,访问php提示"File not found.",同时在错误日志中看到: 复制代码 代码如下: 2013/10/22 20:05:49 [error] 12691#0: *6 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, cl

  • Nginx+PHP(FastCGI)搭建高并发WEB服务器(自动安装脚本)第二版

    本文是依照张宴的 Nginx 0.7.x + PHP 5.2.10(FastCGI)搭建胜过Apache十倍的Web服务器(第5版) 编写 原文地址 http://blog.s135.com/nginx_php_v5/ 因为编译过程和等待时间繁琐,于是就自己写了个全自动安装的shell脚本,此脚本可以随意修改,转载请注明出处. 这篇文章为这个系列的第二版,在第一版的基础上加入 1.日志切割 2.智能选择yum或者rpm安装 下载地址 注意:如果不能使用yum源,请放入系统光盘,单张dvd的,如果

  • PHP+FastCGI+Nginx配置PHP运行环境

    CGI的英文全称为Common Gateway Interface(公共网关接口),是Nginx和动态脚本程序的桥梁,Nginx通过FastCGI接口将动态请求发送给FastCGI,FastCGI中的Wrapper进程生成一个线程,将请求交给脚本解释程序执行,然后通过原来的socket将解释执行后的结果原路返回给Nginx,之后Nginx将结果交给客户端. Nginx是通过套接字文件socket来将动态请求发送给wrapper,使用的是Tcp协议.wrapper通过CGI接口来接受请求.这样we

  • PHP(FastCGI)在Nginx的alias下出现404错误的解决方法

    本文讲述了PHP(FastCGI)在Nginx的alias下出现404错误的解决方法.分享给大家供大家参考,具体如下: 在Nginx的官方wiki中如下描述 The alias directive cannot be used inside a regex-specified location. If you need to do this you must use a combination of rewrite and root. 在实际使用中alias下面的php返回404,而html确可

  • 批处理代码搞定Windows下Nginx+PHP(FastCGI)管理

    注意修改下开始头部的几个变量的值 程序代码 复制代码 代码如下: SET NGINX_PATH=D: SET NGINX_DIR=D:\nginx-0.7.63\ SET PHP_DIR=D:\PHP\ ++++++++++++++++++代码开始++++++++++++++++ cls @ECHO OFF SET NGINX_PATH=D: SET NGINX_DIR=D:\nginx-0.7.63\ SET PHP_DIR=D:\PHP\ color 0a TITLE Nginx+PHP 管

  • Nginx(PHP/fastcgi)的PATH_INFO问题

    在Apache中, 当不加配置的时候, 对于PHP脚本, AcceptPathInfo是默认接受的, 也就是说: 如果在服务器在存在一个/laruence/index.php 那么, 对于如下请求, 复制代码 代码如下: /laruence/index.php/dummy /laruence/dumm Apache都接受, 都会认为是对info.php的访问, 并会设置PATH_INFO为dummy 而对于Nginx下, 是不支持PATH INFO的, 也就是它不会默认设置PATH_INFO.

  • 解决Nginx + PHP(FastCGI)遇到的502 Bad Gateway错误

    我让按照以下两个步骤去解决,最后在第2步中将FastCGI的timeout时间增加为300,问题解决: PS:比较羡慕迅雷的Web服务器,16G内存. -------------------------------------------------------------------------------- 1.查看当前的PHP FastCGI进程数是否够用: netstat -anpo | grep "php-cgi" | wc -l 如果实际使用的"FastCGI进程

  • Nginx中FastCGI如何配置优化

    FastCGI: FastCGI是从CGI发展改进而来的.传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器.这在处理高并发访问时,几乎是不可用的.另外传统的CGI接口方式安全性也很差,现在已经很少被使用了. FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程.当HTTP服务器每次遇到动态程序时,可以将其直接交付给Fast

  • nginx中path模式配置示例

    nginx服务器默认是不支持pathinfo模式的,即类似index.php/index形式的url会提示404.在这里,需要对nginx配置文件中需要开启pathinfo模式的server予以修改配置,修改nginx.conf文件如下: 复制代码 代码如下: server{  server_name   blog.com;  listen        80;  root          /home/wwwroot/blog;  index         index.php index.h

  • Nginx中泛域名配置的实例教程

    原本准备换Linux服务器,所以数据迁移暂时需要使用静态页面临时代替一下,之前的article.asp?id=xxx都要重定向到静态文件 article/xxx.htm,nginx的rewrite比apache的强大很多,还可以用if语句,很容易理解,下面看看Nginx是如何进行Rewrite的! 提示:以下rewrite指令写在 nginx.conf 配置的 server { - } 中 最常见的: 静态地址重定向到带参数的动态地址 rewrite "^(.*)/service/(.*)/.h

  • Nginx的一些常用配置汇总

    目录 Nginx配置文件结构 Nginx日志切割 root 与 alias 使用GZIP压缩提升请求效率 location匹配规则解析 使用SwitchHosts模拟本地域名解析 Nginx跨域配置支持 Nginx防盗链支持 Nginx负载均衡 upstream指令参数 Keepalived 提高吞吐量 Nginx的缓存 Nginx的反向代理缓存 使用Nginx配置HTTPS域名证书 总结 Nginx配置文件结构 1.设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录

  • Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化第1/2页

    对其用户和应用程序来讲,每一个VPS平台的运行和管理都与一台独立主机完全相同,因为每一个VPS均可独立进行重启并拥有自己的root访问权限.用户.IP地址.内存.过程.文件.应用程序.系统函数库以及配置文件.VPS服务器最重要的指标就是内存大小,多个VPS服务器可以共享一颗CPU,但不能共享同一块内存.内存越大,价格越贵. 下面,以我的博客所在的VPS为例,介绍在128M内存下对 Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 的优化. 至于 Nginx

  • ubuntu上配置Nginx+PHP5 FastCGI服务器配置

    首先安装或编译Nginx.安装Nginx源码包可以在官方主页上下载.Ubuntu 9.04可以直接通过apt安装,也可以从这里下载最新的deb包:sudo apt-get install nginx如果要自己编译的话,需要确保自己已经有编译器和PCRE的库(用于Nginx的rewrite模块,如果不需要这个模块可以在configure时使用./configure –without-rewrite).编译方法如下:wget http://sysoev.ru/nginx/nginx-0.5.34.t

  • Nginx防盗链与服务优化配置的全过程

    目录 隐藏nginx版本号 查看版本号 隐藏版本信息 修改用户与组 缓存时间 日志分割 配置Nginx实现连接超时 更改Nginx运行进程数 配置Nginx实现网页优化压缩功能 压缩功能参数 配置防盗链 补充:面试题:用过哪些nginx的模块和做过哪些优化 总结 隐藏nginx版本号 查看版本号 方法一:curl命令 可以在 CentOS 中使用命令 curl -I http://192.168.80.130 显示响应报文首部信息. curl -I http://192.168.80.130 方

  • nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)

    一.服务器基础配 置 远程链接服务器 ssh 用户名@公网ip 默认的用户名是root,假如公网 ip 是 a.b.c.d, 那链接命名就是 ssh root@a.b.c.d 下载安装基础库 yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake yum -y install wget httpd-tools vim 关闭 iptables 查看iptables规则 iptables -L 或 iptables -t n

  • 实现Nginx中使用PHP-FPM时记录PHP错误日志的配置方法

    nginx与apache不一样,在apache中可以直接指定php的错误日志,那样在php执行中的错误信息就直接输入到php的错误日志中,可以方便查询. 在nginx中事情就变成了这样:nginx只对页面的访问做access记录日志.不会有php的error log 信息.nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog. 原因是php-fpm的配

  • Nginx配置优化详解

    大多数的Nginx安装指南告诉你如下基础知识--通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了!而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能很好地工作了.然而,如果你真的想挤压出nginx的性能,你必须更深入一些.在本指南中,我将解释Nginx的那些设置可以微调,以优化处理大量客户端时的性能.需要注意一点,这不是一个全面的微调指南.这是一个简单的预览--那些可以通过微调来提高性能设置的概述.你的情况可能不同. 基本的(优化过的)配置 我

随机推荐