nginx-php工作原理
2016-08-01 10:53
381 查看
原理:nginx通过nginx的配置文件,接收以php为后缀的文件名的http请求,将http请求转发给指定端口号的服务器(域名或者ip地址加上端口号),在转发之前你可以做一些操作,比如可以做一个地址rewrite或者跳转到index模块等等,而对于服务器的ip或者端口的进程管理是由fastcgi和php-fpm进程管理去实现的;
fastcgi:(1),描述:是一个可升缩、高速的在http server 和 动态编程语言之间通信的接口,快速通用网关接口(Fast Common Gateway Interface/FastCGI),Apache和nginx都支持fastcgi,它是一个C/S结构形式的,可以有效地将http服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个守护进程处理请求,获得返回结果之后返回给浏览器;FastCGI致力于减少Web服务器与CGI程式之间互动的开销,从而使服务器可以同时处理更多的Web请求。与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI进程管理器管理,而不是web服务器。
(2),配置:这个文件一般在/usr/local/nginx/conf/目录fcgi.conf,如果没有就创建该文件
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
PHP-FPM:描述:PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析;
优化配置如下:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1 //监听ip地址
listen.owner = www
listen.group = www
listen.mode = 0666 //FastCGI的进程数,小于2GB内存的服务器,可以开启64个进程,4GB以上内存的服务器可以开启200个进程
user = www //FastCGI进程的用户这个参数要和nginx配置的用户一致
group = www //FastCGI进程的用户组这个参数要和nginx配置的用户一致
pm = dynamic
pm.max_children = 10 //最大子进程数
pm.start_servers = 2 //初始worker进程数
pm.min_spare_servers = 1 //空闲worker进程数
pm.max_spare_servers = 6 //最大worker进程数
request_terminate_timeout = 100 //最长执行时间
request_slowlog_timeout = 0
slowlog = var/log/slow.log
pm.max_requests = 10240 //最大处理请求数最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露
fastcgi:(1),描述:是一个可升缩、高速的在http server 和 动态编程语言之间通信的接口,快速通用网关接口(Fast Common Gateway Interface/FastCGI),Apache和nginx都支持fastcgi,它是一个C/S结构形式的,可以有效地将http服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个守护进程处理请求,获得返回结果之后返回给浏览器;FastCGI致力于减少Web服务器与CGI程式之间互动的开销,从而使服务器可以同时处理更多的Web请求。与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI进程管理器管理,而不是web服务器。
(2),配置:这个文件一般在/usr/local/nginx/conf/目录fcgi.conf,如果没有就创建该文件
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
PHP-FPM:描述:PHP-FPM也是一个第三方的FastCGI进程管理器,它是作为PHP的一个补丁来开发的,在安装的时候也需要和PHP源码一起编译,也就是说PHP-FPM被编译到PHP内核中,因此在处理性能方面更加优秀;同时它在处理高并发方面也比spawn-fcgi引擎好很多,因此,推荐Nginx+PHP/PHP-FPM这个组合对PHP进行解析;
优化配置如下:
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1 //监听ip地址
listen.owner = www
listen.group = www
listen.mode = 0666 //FastCGI的进程数,小于2GB内存的服务器,可以开启64个进程,4GB以上内存的服务器可以开启200个进程
user = www //FastCGI进程的用户这个参数要和nginx配置的用户一致
group = www //FastCGI进程的用户组这个参数要和nginx配置的用户一致
pm = dynamic
pm.max_children = 10 //最大子进程数
pm.start_servers = 2 //初始worker进程数
pm.min_spare_servers = 1 //空闲worker进程数
pm.max_spare_servers = 6 //最大worker进程数
request_terminate_timeout = 100 //最长执行时间
request_slowlog_timeout = 0
slowlog = var/log/slow.log
pm.max_requests = 10240 //最大处理请求数最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露
相关文章推荐
- apNginx 0.5.35 + PHP 5.2.5(FastCGI)搭建胜过Apache 10倍的Web服务器
- session的工作原理(转载 http://www.libing.net.cn/read.php?1143)
- Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器(第4版)
- CentOS+Nginx+PHP+Mysql(4)(转)
- 搭建高性能Web服务器Nginx,10倍于Apache---Nginx+Php(FastCgi模式)
- 在CentOs 5.1中使用rpm安装NGINX+php+mysql
- Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建高性能web服务器
- CentOS+Nginx+PHP+Mysql(1)(转)
- CentOS+Nginx+PHP+Mysql(3)(转)
- 理解动态网站的工作原理---平台是PHP+APACH+MYSQL
- 在Ubuntu 8.04 LTS(hardy)下安装配置nginx和fastcgi方式的php
- nginx+apache+mysql+php+memcached+squid搭建门户网站
- Nginx 0.7.x + PHP 5.2.6(FastCGI)搭建胜过Apache十倍的Web服务器
- Ubuntu8.04下 nginx+php+mysql+zend
- 在CentOs 5.1中使用rpm安装NGINX+php+mysql(一)
- [转]Nginx 0.5.33 + PHP 5.2.5(FastCGI)搭建胜过Apache 10倍的Web服务器(第2版)
- 利用Nginx的X-Accel-Redirect头实现下载控制(附带php和rails实例)
- nginx+php+fastcg+xcache+mysql+openx
- Linux+Nginx+Php架设高性能WEB服务器
- CentOS+Nginx+PHP+Mysql