nginx 3.nginx+fastcgi
死磕nginx 3.nginx+fastcgi
互联网服务器有个非常典型的架构lamp(linux+apache+mysql+php),由于其开源和强大的兼容性而风靡一时,不过随着nginx的横空出世,lamp逐渐被lnmp替代,即Linux+nginx+mysql+php
fastcgi:fastcgi是语言无关的,可伸缩架构的CGI开放扩展,其主要的行为将CGI解释器进程保持在内存中并因此获得较高的性能,众所周知,CGI的反复加载时CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程金鼎管理调度,则可提供良好的性能、伸缩性、Fail-Over特性等。
1、FastCGI的工作原理
- FastCGI进程管理器自身初始化,启动多个CGI解释器进程(多个php-cgi进程)并等待来自webserver的请求,在本文中,采用PHP-FPM进程管理器启动多个php-cgi FastCGI进程,启动php-cgi FastCGI进程时,可以配置TCP和UNIX套接字两种方式启动
- 当客户端请求到达web服务器(nginx)时,web服务器将采用TCP协议或者UNIX套接字方式转到FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器(子进程),web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi
- FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回到web服务器(nginx),当FastCGI子进程关闭连接时,请求便告知处理完成,。FastCGI子进程接着等待来自FastCGI管理器的下一个连接,而在一般普通的CGI模式中,php-cgi在此时便退出了。
所以你可以想象普通的CGI模式有多慢,每一个web请求PHP都必须重新解析php.ini、重新载入全部扩展并重新初始化全部数据结构。使用FastCGI,所有的这些都只在进程启动时发生一次,一个额外的好处是,持续数据库连接可以工作。
php FastCGI的优点
- PHP脚本运行速度更快,PHP解释程序被载入内存而不用每次都需要从存储器中读取,此举极大提升了依靠脚本运行站点的性能。
- 需要使用的系统资源更少,由于服务器不用每次都需要载入PHP解释程序,你可以将站点传输速度提升而不必增加CPU负担。
- 不需要对现有代码进行任何改变
部署lnmp环境示例
组件版本
linux:centos6.5
php:5.5
nginx:1.8
mysql:5.5.18
nginx的安装
可以参考nginx的第一篇文章
mysql的安装
1、依赖
yum -y install cmake gcc-c++ make bison-devel ncurses-devel
增加用户
useradd mysql
2、解压安装 安装包自行下载
tar -zxf mysql-5.5.18.tar.gz
cd mysql-5.5.18
cmake \
-DCMAKE_INSTALL_PREFIX=/home/nick/mysql \
-DMYSQL_UNIX_ADDR=/home/nick/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/nick/mysql/data
make && make install
cd /home/nick/mysql && mkdir etc tmp var log
3、重命名系统自带的my.cnf
mv /etc/my.cnf /etc/my.cnf.bak
4、配置文件 复制到/home/nick/mysql/etc/my.cnf里面
[client]
port = 3306
socket = /home/nick/mysql/mysql.sock
default-character-set = utf8mb4
[mysqld]
port = 3306
socket = /home/nick/mysql/mysql.sock
basedir = /home/nick/mysql
datadir = /home/nick/mysql/data
pid-file = /home/nick/mysql/log/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1
init-connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4
#skip-name-resolve
#skip-networking
back_log = 300
max_connections = 100
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 1M
binlog_cache_size = 1M
max_heap_table_size = 2M
tmp_table_size = 4M
read_buffer_size = 1M
read_rnd_buffer_size = 2M
sort_buffer_size = 2M
join_buffer_size = 2M
key_buffer_size = 1M
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 2M
query_cache_limit = 1M
ft_min_word_len = 4
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30
log_error = /home/nick/mysql/log/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /home/nick/mysql/log/mysql-slow.log
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1
skip-external-locking
default_storage_engine = InnoDB
#default-storage-engine = MyISAM
innodb_file_per_table = 1
innodb_open_files = 500
innodb_buffer_pool_size = 16M
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 1M
innodb_log_file_size = 8M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 1G
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
[mysqldump]
quick
max_allowed_packet = 8M
5、初始化数据库
/home/nick/mysql/scripts/mysql_install_db
6、启动数据库
home/qfpay/mysql/bin/mysqld_safe &
7、supervisr的启动方式
[program:mysql]
command= /home/nick/mysql/bin/mysqld --defaults-file=/home/nick/mysql/etc/my.cnf
directory=/home/nick/mysql
user=nick
PHP的安装
下载程序
wget wget http://cn2.php.net/get/php-5.5.33.tar.gz
先装第三方源
yum install epel-release
安装依赖
yum install -y gd gd-devel libmcrypt libmcrypt-devel libtool-ltdl libtool-ltdl-devel libxml2 libxml2-devel curl curl-devel t1lib t1lib-devel openssl openssl-devel
解压安装
/configure \
--disable-debug \
--prefix=/usr/local/php5.5 \
--enable-shmop \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-libxml-dir \
--with-t1lib \
--with-zlib \
--with-mcrypt \
--with-mysqli=mysqlnd \
--with-mysql=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-sockets \
--with-iconv \
--enable-mbstring \
--enable-mbregex \
--enable-ftp \
--enable-gd-native-ttf \
--with-curl \
--enable-fpm \
--enable-pcntl \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-zip \
--with-freetype-dir \
--enable-exif \
--with-openssl \
--with-pear \
make && make install
拷贝php.ini:
cp php.ini-development /usr/local/php/lib/php.ini
#php-fpm 的简单配置
;this configuration is for PHP 5.5 for heavy loaded servers
[global]
error_log = syslog
log_level = error
rlimit_files = 655360
rlimit_core = 0
[php-nick219]
user = nobody
group = nobody
#使用tcp
listen = 127.0.0.1:9000
#使用sock
#listen = fpm.sock
#listen.allowed_clients = 127.0.0.1
#listen.mode = 666
pm = dynamic
pm.max_children = 1000
pm.start_servers = 20 ;20
pm.min_spare_servers = 10 ;10
pm.max_spare_servers = 30 ;30
pm.max_requests = 500
; system max load (request number) = max_children * max_requests = 500,000
pm.status_path = /fpm_status
ping.path = /status
ping.response = ok
slowlog = /data/phplogs/phpfpm_slow.log
request_slowlog_timeout = 3s
listen.backlog = 4096
request_terminate_timeout = 5m
rlimit_files = 655360
rlimit_core = 0
security.limit_extensions = .php .html
php_admin_value['date.timezone'] = 'Asia/Shanghai'
;include rigger ENV files
include=env.conf
;add conf overrides from yaml
nginx配置
一个简单的配置,直接从server[...]开始
server
{
listen 80;
server_name nick219.com;
index index.html index.htm index.php;
root /home/nick/www/nick219;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi.conf
}
#下面可以配置日志,缓存或者其它位置
}
nginx+fastcgi的配置结束
nginx 3.nginx+fastcgi的更多相关文章
- nginx下面部署fast-cgi和C++【原】
1.cgi文件的代码 #include "fcgi_stdio.h" #include <stdlib.h> #include <stdio.h> int ...
- nginx上用fastcgi配置python环境
费了2天的功夫,翻阅了无数的中文.英文资料,终于搞定.写下此文留待以后翻阅用 本文环境,centOS 5.4 ,Nignx-0.8.49, Python 2.6.5 ========== ...
- linux后台server开发环境的部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))
linux后台server开发环境部署配置 引言 背景 随着互联网业务的不断增多.开发环境变得越来越复杂,为了便于统一server端的开发部署环境,特制定本配置文档. 使用软件 CentOS 6.3( ...
- Nginx使用教程(六):使用Nginx缓存之FastCGI缓存
启用FastCGI缓存 <br\>编辑必须启用缓存的虚拟主机配置文件. nano /etc/nginx/sites-enabled/vhost 将以下行添加到server{}指令之外的文件 ...
- Nginx配置文件nginx.conf中文详解(转)
######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...
- Nginx research, nginx module development
catalog . 初探nginx架构 . handler模块 . Nginx编译.安装.配置 . Hello World模块开发 1. 初探nginx架构 nginx在启动后,在unix系统中会以d ...
- Nginx配置文件nginx.conf中文详解【转】
PS:Nginx使用有两三年了,现在经常碰到有新用户问一些很基本的问题,我也没时间一一回答,今天下午花了点时间,结合自己的使用经验,把Nginx的主要配置参数说明分享一下,也参考了一些网络的内容,这篇 ...
- linux下Nginx配置文件(nginx.conf)配置设置详解(windows用phpstudy集成)
linux备份nginx.conf文件举例: cp /usr/local/nginx/nginx.conf /usr/local/nginx/nginx.conf-20171111(日期) 在进程列表 ...
- 【nginx】nginx配置文件结构,内置变量及参数调优
Nginx的配置文件是一个纯文本文件,它一般位于Nginx安装目录的conf目录下,整个配置文件是以block的形式组织的.每个block一般以一个大括号“{”来表示.block 可以分为几个层次,整 ...
随机推荐
- 安装 php-gd
安装cmd提示不支持GD模块,不能使用缩略图功能,需要安装php-gd 1.安装 php-gd yum list php-gd yum install php-gd 2.重启 httpd servic ...
- 将与系统时间格式不同的字符串格式化为DATETIME类型
若系统时间格式为2012/03/05 08:12:12,那么若将("2012-03-05 08:12:12")格式化为时间变量时会报错,在转化之前先将系统时间格式改变再转换就不会报 ...
- function的粗浅理解
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Mahout
http://blog.csdn.net/yueyedeai/article/details/26567379
- library cache lock
SESSION 34 执行存储过程: SESSION 43 编译存储过程: SESSION 25 删除存储过程: 1.查询查看library cache lock等待事件的相关会话 SQL> s ...
- VIJOS P1543极值问题
已知m.n为整数,且满足下列两个条件:① m.n∈1,2,…,K② (n^ 2-mn-m^2)^2=1编一程序,对给定K,求一组满足上述两个条件的m.n,并且使m^2+n^2的值最大.例如,若K=19 ...
- HDU 4627 There are many unsolvable problem in the world.It could be about one or about zero.But this time it is about bigger number.
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82974#problem/E 解题思路:数论,从一个数的中间开始往两边找,找到两 ...
- Java的内存管理与内存泄露
作为Internet最流行的编程语言之一,Java现正非常流行.我们的网络应用程序就主要采用Java语言开发,大体上分为客户端.服务器和数据库三个层次.在进入测试过程中,我们发现有一个程序模块系统内存 ...
- UVAlive11324 The Largest Clique(scc+dp)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=30726 [思路] 强连通分量+动归. 求scc后缩点,以scc中的 ...
- Java高级特性之反射学习总结
老规矩我们还是先提出几个问题,一门技术必然要能解决一定的问题,才有去学习掌握它的价值 一. 什么是反射? 二.反射能做什么? 一. 什么是反射? 用在Java身上指的是我们可以于运行时加载.探知.使用 ...