ubuntu10.04配置 nginx+php-fpm模式的详解_php实例

ppa安装php-fpm
安装工具包

复制代码 代码如下:

$ sudo apt-get install python-software-properties  

添加ppa源

复制代码 代码如下:

$ sudo add-apt-repository ppa:yola/php5

安装php5-fpm

复制代码 代码如下:

sudo  apt-get  update
sudo  apt-get install  php5-fpm

其它必要的软件安装接

复制代码 代码如下:

sudo   apt-get   install   nginx

配置php-fpm
php-fpm的解析器是C/S结构,它的配置文件位于:
(1)/etc/php5/fpm/php-fpm.conf
(2)/etc/php5/fpm/pool.d/
一般没什么严格的配置的要求,或者说这块我还没有具体的研究每个配置参数的意义
我采用了tcp模式与fastcgi进程进行连接,因此我修改了tcp监听的地址和端口,修改了一下监视目录的名称,这里不做具体详细解释了,大家可以参考官方文档根据自己的需求进行配置
重启php5-fpm

配置nginx
前言
nginx本身并不会对php语言进行解析,这个区别于apache(apache有在带的mod_php模块进行php解析).nginx是通过fastcgi将客户端的php请求交给后台的php5-fpm进程管理器,php5-fpm具有解析php的功能
nginx的主配置文件
文件位置:/etc/nginx/nginx.conf,我的配置参数如下:

复制代码 代码如下:

user  www-data;
#主动开启cpu多核功能
worker_processes  2;
worker_cpu_affinity 01 10;
#指定nginx进程可以打开的最大文件描述符数量
worker_rlimit_nofile 65535;
pid /var/run/nginx.pid;
events {
 #使用epoll的I/O模型
 use epoll;
 #工作单进程的并发连接数,总体并发连接数 = worker_connections * worker_processes
 worker_connections 2048;
 #multi_accept在Nginx接到一个新连接通知后调用accept()来接受尽量多的连接
 multi_accept on;
}
http {
 include       /etc/nginx/mime.types;
 default_type  application/octet-stream;
 charset utf-8;

 server_names_hash_bucket_size 128;
 client_header_buffer_size 2k;
 large_client_header_buffers 4 4k;
 #通过nginx上传文件的大小
 client_max_body_size 8m;

#$remote_addr:记录ip地址;$remote_user:记录远程客户端用户名称;$request:请求的url和http协议;$status:用于记录请求状态;$body_bytes_sent:用于记录发送给客户端文件主体内容的大小;$http_referer:跳转链接;$http_x_forwarded_for:客户的真实ip地址
 log_format  main  '$server_name$remote_addr$remote_user[$time_local]"$request"'
                      '$status$body_bytes_sent"$http_referer"'
                      '"$http_user_agent""$http_x_forwarded_for"';
 access_log /var/log/nginx/access.log  main;
 error_log /var/log/nginx/error.log;

 sendfile        on;
 tcp_nopush     on;
 #keepalive的超时时间
 keepalive_timeout  60;
 open_file_cache max=204800 inactive=20s;
 open_file_cache_min_uses 1;
 open_file_cache_valid 30s;
     tcp_nodelay on;
     gzip  on;
     include /etc/nginx/conf.d/*.conf;
}

日志格式之间是用不可打印符号进行分隔的,ctrl+v && ctrl+a
nginx虚拟主机配置文件

复制代码 代码如下:

upstream haolianxi_php {
 server 127.0.0.1:9444;
}
server {
 listen 192.168.1.137:7777;

 access_log /var/log/nginx/haolianxi/haolianxi.access.log main;
 error_log /var/log/nginx/haolianxi/haolianxi.error.log;
 #通用匹配 
 location / {
  root /srv/www/php/;
  autoindex on;
  autoindex_exact_size off;
  autoindex_localtime on;
  access_log /var/log/nginx/haolianxi/location.default.access.log main; 
  error_log /var/log/nginx/haolianxi/location.default.error.log;
  allow 192.168.1.0/24;
  deny all;
 }
 #正则表达式匹配 
 #proxy the php scripts to php-fpm
 location ~ \.php$ {
  root /srv/www/php/;
  include /etc/nginx/fastcgi_params;
  fastcgi_pass haolianxi_php; # The upstream determined above
  fastcgi_index index.php;
 }
 #php-fpm status monitor
 location = /phpfpm_status {
  fastcgi_pass 127.0.0.1:9444;
  fastcgi_index index.php;
  include /etc/nginx/fastcgi_params;
  allow 192.168.1.127;
  allow 127.0.0.1;
  deny all;
 }
 ## Compression
 # src: http://www.ruby-forum.com/topic/141251
 # src: http://wiki.brightbox.co.uk/docs:nginx
     gzip on;
     gzip_http_version 1.0;
     gzip_comp_level 2;
     gzip_proxied any;
     gzip_min_length  1100;
     gzip_buffers 16 8k;
     gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

     # Some version of IE 6 don't handle compression well on some mime-types, so just disable for them
     gzip_disable "MSIE [1-6].(?!.*SV1)";

     # Set a vary header so downstream proxies don't send cached gzipped content to IE6
     gzip_vary on;
     ## /Compression
}

注意:
include /etc/nginx/fastcgi_params中一个参数设置需要修改,修改如下:

复制代码 代码如下:

fastcgi_param   SCRIPT_NAME             $document_root$fastcgi_script_name;

因为脚本的名称不加上$document_root,php5-fpm是无法找到需要执行的php脚本的绝对路径的
重启nginx

复制代码 代码如下:

sudo  /etc/init.d/nginx  restart

测试fastcgi_finish_request()函数

复制代码 代码如下:

<?php
echo "OK";
fastcgi_finish_request(); /* 响应完成, 关闭连接 */
sleep(5);
file_put_contents("/tmp/fastcgi.log", "hello",FILE_APPEND);
sleep(5);
file_put_contents("/tmp/fastcgi.log", "world",FILE_APPEND);
?>

说明:
用最大的白话说,fastcgi_finish_request()可以提前关闭和客户端的连接,把需要返回的数据返回给客户端,但是函数之后的分支业务逻辑还是继续在后台运行!
php5-fpm日志按天分割脚本

复制代码 代码如下:

#!/bin/bash -
#1.php5-fpm日志存放路径
php5_fpm_logs_path="/var/log/php5-fpm/"
category_array=("access" "error")
#2.php5-fpm日志名后缀
postfix=`date -d '-1 days' +%Y%m%d`".log"
#3.php5-fpm日志切割
for category in ${category_array[*]}
do
 if [ -e $php5_fpm_logs_path/php5-fpm.$category.log ]
 then
  mv $php5_fpm_logs_path/php5-fpm.$category.log \
   $php5_fpm_logs_path/php5-fpm.$category.$postfix
 fi
done
#4.查找php5-fpm进程号,让其产生新的日志文件
php5fpm_pid=`ps -aux |grep -E 'php-fpm: master process'|grep -v 'grep'|awk '{print $2}'`
#USR1:Reopen log files,刷新nginx日志文件
kill -USR1 $php5fpm_pid

时间: 2024-09-25 16:42:40

ubuntu10.04配置 nginx+php-fpm模式的详解_php实例的相关文章

thinkPHP中配置的读取与C方法详解_php实例

本文实例讲述了thinkPHP中配置的读取与C方法.分享给大家供大家参考,具体如下: 1.项目公共配置 Conf/config.php 内容如下 <?php /** *项目公共配置 *@package *@author **/ return array( 'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay', 'APP_AUTOLOAD_PATH' =>

thinkPHP中钩子的两种配置调用方法详解_php实例

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

配置Nginx+PHP的正确思路与过程_php实例

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

PHP7+Nginx的配置与安装教程详解_php实例

系统环境:centos6.5 x64 软件版本:nginx-1.10.0 php-7.0.6 安装 Nginx Nginx官网:http://nginx.org/ 先安装编译依赖的一些组件 复制代码 代码如下: yum install pcre pcre-devel openssl openssl-devel -y 1.解压程序包 复制代码 代码如下: tar xf nginx-1.10.0.tar.gz cd nginx-1.10.0 2.预编译配置参数 复制代码 代码如下: ./config

ubuntu下配置nginx+php+mysql详解_php实例

1.更新 www.jb51.net 复制代码 代码如下: sudo apt-get update 2.安装nginx 复制代码 代码如下: sudo apt-get intsall nginx Ubuntu安装之后的文件结构大致为: * 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下  www.jb51.net  *程序文件在/usr/sbin/nginx * 日志放在了/var/log/nginx中 *并已经在/et

基于php在各种web服务器的运行模式详解_php实例

一.php在apache中运行模式 php在apache中一共有三种工作方式:CGI模式.FastCGI模式.Apache 模块DLL以下分别比较:1. CGI模式与模块模式比较:php在apache中两种工作方式的区别(CGI模式.Apache 模块DLL)这两种工作方式的安装:PHP 在 Apache 2.0 中的 CGI 方式ScriptAlias /php/ "c:/php/"AddType application/x-httpd-php .php# 对 PHP 4 用这行Ac

PHP APC缓存配置、使用详解_php实例

一.APC缓存简介APC,全称是Alternative PHP Cache,官方翻译叫"可选PHP缓存".它为我们提供了缓存和优化PHP的中间代码的框架. APC的缓存分两部分:系统缓存和用户数据缓存.系统缓存它是指APC把PHP文件源码的编译结果缓存起来,然后在每次调用时先对比时间标记.如果未过期,则使用缓存的中间代码运行.默认缓存 3600s(一小时).但是这样仍会浪费大量CPU时间.因此可以在php.ini中设置system缓存为永不过期(apc.ttl=0).不过如果这样设置,

ubuntu 12.04 安装 Nginx+PHP5 (PHP-FPM) +MySQL主机详解

很长时间没有在 Ubuntu 安装实际操作安装web服务器了,今天想练练手,在虚拟机上做个试验,我不该保证你也一定会成功,做参考吧! 现象我介绍一下基本系统情况: 虚拟机(Oracle VM) 操作系统 Ubuntu 12.04 server (该系统安装时我只选择了ssh server) 真机与虚拟机使用桥接方式 设置为静态IP:192.168.1.208 适情况个人设置 1.首先为了安装方便,我切换到root账户,输入命令: sudo su 2 安装 MySQL 5 apt-get inst

深入php-fpm的两种进程管理模式详解_php实例

php-fpm的两种进程管理模式php-fpm的进程数也是可以根据设置分为动态和静态的.一种是直接开启指定数量的php-fpm进程,不再增加或者减少:另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限.这两种不同的执行方式,可以根据服务器的实际需求来进行调整.这里先说一下涉及到这个的几个参数吧,他们分别是pm.pm.max_children.pm.start_servers.pm.min_sp