nginx0.8 + php-5.3.4 + memcached#-- 编码转换库 Unicode和其他的传统编码之间转换的需求 --#wget http://mozbuildtools.googlecode.com/files/libiconv-1.13.1.tar.gztar -zxvf libiconv-1.13.1.tar.gzcd libiconv-1.13.1./configure --prefix=/usr/local && make && make install#-- 修改动态链接载入的目录查找文件 --#echo "/usr/local/lib" >> /etc/ld.so.conf/sbin/ldconfig#-- libmcrypt是加密算法扩展库 --#wget http://www.sfr-fresh.com/unix/privat/libmcrypt-2.5.8.tar.gztar -zxvf libmcrypt-2.5.8.tar.gzcd libmcrypt-2.5.8/./configure && make && make install/sbin/ldconfigcd libltdl/./configure --enable-ltdl-install && make && make install#-- 支持多种哈稀演算法的函数库(php使用哈稀) --#wget http://cdnetworks-kr-1.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.gztar -zxvf mhash-0.9.9.9.tar.gz cd mhash-0.9.9.9./configure && make && make installln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config#-- mcrypt是一个双向加密算法 函数库 (php) --#wget http://www.sfr-fresh.com/unix/privat/mcrypt-2.6.8.tar.gztar -zxvf mcrypt-2.6.8.tar.gzcd mcrypt-2.6.8LD_LIBRARY_PATH=/usr/local/lib ./configure && make && make install***********************************************************#-- libevent作为一个事件与回调框架,它提供了一些接口,同时也提供了一些处理IO与信号的流程 --#wget http://monkey.org/~provos/libevent-2.0.9-rc.tar.gztar -zxvf libevent-2.0.9-rc.tar.gzcd libevent-2.0.9-rc./configure --prefix=/usr/local/libevent && make && make install出的。。wget http://jaist.dl.sourceforge.net/project/buluoos/0.1/src/jpegsrc.v8b.tar.gztar xzvf jpegsrc.v8b.tar.gzcd jpegsrc.v8b./configure --enable-static --enable-shared && make && make installwget http://www.sfr-fresh.com/unix/misc/libpng-1.2.44.tar.gztar xzvf libpng-1.2.44.tar.gzcd libpng-1.2.44./configure && make && make install安装报错:没有找到libpng.so文件时,需要安装libpng-devel和freetype-devel两个包wget http://www.libgd.org/releases/gd-2.0.35.tar.gztar xzvf gd-2.0.35.tar.gzcd gd-2.0.35./configure --with-png --with-freetype --with-jpeg make (如果出错,就执行make clean,然后再make) make install#-- memcached (memcache 服务端)--#wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gztar -zxvf memcached-1.4.5.tar.gz cd memcached-1.4.5./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent && make && make installln -s /usr/local/libevent/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5/usr/local/memcached/bin/memcached -d -m 128 -l 0.0.0.0 -p 11211 -u root #启动memcached *****(-d 以守护程序(daemon)方式运行 memcached; #启动参数说明-m 设置 memcached 可以使用的内存大小,单位为 M;-M 设置memcached 不LRU-l 设置监听的 IP 地址,如果是本机的话,通常可以不设置此参数;-p 设置监听的端口,默认为 11211,所以也可以不设置此参数;-u 指定用户,如果当前为 root 的话,需要使用此参数指定用户。-P 记录memcache运行的PID到文件/usr/local/bin/memcached.pid-n 设置初始chunk的大小-f chunk size factor的增长因子,默认是1.25)#--nginx pcre 包含了perl兼容的正规表达式库,些在执行正规表达式模式匹配时用 --#wget http://www.sfr-fresh.com/unix/misc/pcre-8.11.tar.gztar -zxvf pcre-8.11.tar.gzcd pcre-8.11./configure && make && make install#-- nginx --#wget http://nginx.org/download/nginx-0.8.54.tar.gztar -zxvf nginx-0.8.54.tar.gzcd nginx-0.8.54./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_modulemake && make install附加:如果nginx安装有错误,就是zlib库、openssl库、pcre库没有安装,需要安装后才开始安装nginx,可以选择tar包安装,也可以进行yum安装,执行yum语句:yum -y install pcre-devel yum -y install openssl openssl-devel yum -y install zlib zlib-devel openssl openssl--devel pcre pcre-devel yum -y install gcc gcc-c++ autoconf automake#-- libjpeg --#locate libjpeg.socd /usr/lib/ln -s /usr/lib/libjpeg.so.62 /usr/lib/libjpeg.soln -s /usr/lib64/libjpeg.so.62 /usr/lib64/libjpeg.so#-- php php-5.3.3 或 以上已经包含了php-fpm--#wget http://at2.php.net/distributions/php-5.3.4.tar.gztar -zxvf php-5.3.4.tar.gz cd php-5.3.4./configure \--prefix=/usr/local/php \--with-config-file-path=/usr/local/php/etc \--with-curl \--with-curlwrappers \--enable-gd-native-ttf \--with-gd \--with-jpeg-dir \--with-png-dir \--with-freetype-dir \--with-iconv-dir=/usr/local/libiconv \--with-libxml-dir=/usr/local/ \--with-mhash \--with-mcrypt \--with-mysql=mysqlnd \--with-mysqli=mysqlnd \--with-openssl \--with-xmlrpc \--with-zlib \--disable-debug \--disable-rpath \--enable-bcmath \--enable-fpm \--enable-inline-optimization \--enable-mbregex \--enable-mbstring \--enable-pcntl \--enable-safe-mode \--enable-shmop \--enable-soap \--enable-sockets \--enable-sysvsem \--enable-xml \--enable-zip \--with-libdir=lib64 \--without-pear#-- --with-libdir=lib64 64位系统添加此项 否则去掉 --#安装报错:没有找到libpng.so文件时,需要安装libpng-devel和freetype-devel两个包可以利用yum来安装make ZEND_EXTRA_LIBS='-liconv' && make installcp ./php.ini-production /usr/local/php/etc/php.ini#-- zlib 数据压缩库 --#wget http://www.p_w_picpathmagick.org/download/delegates/zlib-1.2.5.tar.gztar zxvf zlib-1.2.5.tar.gzcd zlib-1.2.5./configure --prefix=/usr/local/zlib --64 --libdir=/usr/libmake && make install#-- php 扩展memcache (memcache 客户端) --# #####wget http://pecl.php.net/get/memcache-3.0.5.tgztar -zxvf memcache-3.0.5.tgzcd memcache-3.0.5/usr/local/php/bin/phpize#(如果没有configure文件,就执行:yum -y install autoconf)./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir=/usr/local/zlibmake && make install 会出现下面的消息:(Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/)#-- apc 用于加速php APC提供两种缓存功能 提供一些接口将用户数据驻留在内存中 --#wget http://pecl.php.net/get/APC-3.1.4.tgztar -zxvf APC-3.1.4.tgz cd APC-3.1.4/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmake && make installcp /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/apc.so /usr/local/php/lib/php/extensions/apc.so # xxxxno-debug-non-zts-20090626 是编译apc 成功后输出信息chmod 755 /usr/local/php/lib/php/extensions/apc.so#-- 安装完毕 开始配置 --##-- php.ini 配置 --#vi /usr/local/php/etc/php.ini#extension_dir = "ext" 在这行下添加 以下 路径是extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/" ###extension=apc.soextension=imagick.soextension=memcache.so#再查找output_buffering=Off#修改为output_buffering=On再查找;cgi.fix_pathinfo=1修改为cgi.fix_pathinfo=0,防止Nginx文件类型错误解析漏洞# 按 shift+g 键 跳到文件未尾 添加以下[APC]apc.enabled=1apc.ttl=7200apc.shm_size=128M #每个共享内存块的大小(以MB为单位,建议值为128~256)。 #要开启上传文件功能时要添加以下参数apc.cache_by_default = on #是否默认对所有文件启用缓冲apc.shm_segments = 1 #为编译器缓冲区分配的共享内存块数量(建议值为1)。 apc.ttl = 600 #缓存条目在垃圾回收表中能够存在的秒数apc.user_ttl = 600 #类似于apc.ttl,只是针对每个用户而言,建议值为7200~36000apc.num_files_hint = 0 #Web服务器上可能被包含或被请求的不同源文件的大致数量(建议值为1024~4096)。能确定,则设为 0apc.write_lock = On #是否启用写入锁apc.max_file_size = 1000M #设置apc所支持上传文件的大小upload_max_filesize = 1000M ##-- php-fpm 配置 --#cd /usr/local/php/etc/cp php-fpm.conf.default php-fpm.confvi php-fpm.conf;emergency_restart_threshold = 0 -> emergency_restart_threshold = 10 // 错误的php进程线;emergency_restart_interval = 0 -> emergency_restart_interval = 1m // 表示在(60)秒内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过emergency_restart_threshold个,php-fpm就会重启;process_control_timeout = 0 -> process_control_timeout = 5s //请求处理超时时间;daemonize = yes -> daemonize = yes //yes 后台运行,no 前台运行listen = 127.0.0.1:9000user = nobody -> user = www //更改运行用户为wwwgroup = nobody -> group = wwwpm = dynamic //设置进程管理器如何管理子进程,static - 子进程的数量是固定的,dynamic - 子进程的数量在下面配置的基础上动态设置pm.max_children = 200 //子进程的数量 1个略占2MB内存,pm 设置为 static 时表示创建的,pm 设置为 dynamic 时表示最大可创建的pm.start_servers = 50 //设置启动时创建的子进程数目. 仅在 pm 设置为 dynamic 时使用pm.min_spare_servers = 30 //设置空闲服务进程的最低数目,pm 设置为 dynamic 时使用pm.max_spare_servers = 100 //设置空闲服务进程的最大数目pm.max_requests = 1024 //每个子进程重生之前服务的请求数,对于可能存在内存泄漏的第三方模块来说是非常有用的,如果设置为 '0' 则一直接受请求#500request_terminate_timeout = 5m //设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用request_slowlog_timeout = 30s //当一个请求该设置的超时时间后,就会将对应的PHP调用堆栈信息完整写入到慢日志中rlimit_files = 65535 //设置文件打开描述符的rlimit限制,默认值: 系统定义值rlimit_core = 0 //设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值;chdir = /var/www //设置启动目录,启动时会自动Chdir到该目录. 所定义的目录需要是绝对路径 在这里不需要slowlog = log/$pool.log.slow (新添加的)#------------------------- end -----------------------# /usr/local/php/sbin/php-fpm start #启动PHP ******* #-------- nginx.conf 配置 -----------------------------#vi /usr/local/nginx/conf/nginx.confuser www www; #运行用户和组worker_processes 8; #进程的数量,一般推荐为处理器的个数. 可以适当增加,以避免进程在堵塞在IO等待中error_log logs/error.log; #错误日志pid logs/nginx.pid; #pid文件位置worker_rlimit_nofile 65535;events { use epoll; #Linux 下机能最好的 event 模式 #指定 nginx 处理进程的个数,根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行#其与总处理量的关系用公式表达如下:#MaxClient = worker_processes * worker_connections#因此这两个数的乘积若大于系统最大可用tcp/ip栈数是没有意义.worker_connections 4096;}#-------- HTTP 请求设置 ---------#http { include mime.types; #载入mime类型default_type application/octet-stream; #默认类型#------------- 日志的格式 -----------------# #log_format main '$remote_addr - $remote_user [$time_local] $request ' # '"$status" $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #-- 设定请求缓冲 --# server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 8m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; 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; #-- 开启gzip模块 --# gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; limit_zone crawler $binary_remote_addr 10m; #限制宽带 10MB limit_conn crawler 10; #限制单个IP 并发数 10 proxy_set_header X-Real-IP $remote_addr; #获取真实ip #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #获取代理者的真实ip #---- 服务器设置 ---#server {listen 80; #监听端口server_name localhost; #WEB服务主机名(域名)#charset utf-8;access_log logs/localhost.access.log access; #访问日志#-- 请求规则 默认请求 --#location / {root /home/www/www; #WEB根目录index index.html index.htm index.php; #默认索引文件名#保留用户真实信息 include proxy.conf; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }error_page 404 /404.html; #页面不存在处理error_page 500 502 503 504 /50x.html; #服务器错误定向location = /50x.html {root /home/www/www;}#--- PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置 ---#location ~ \.php$ {root /home/www/www;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;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 REQUEST_URI $request_uri;#保留用户真实信息 include proxy.conf; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; include fastcgi_params;}# jsp javalocation ~* \.(jsp|do)$ { #auth_basic "this is sports center"; #auth_basic_user_file /usr/local/www/nginx_passwd; apache 密码认证 nginx_passwd apache 密码文件 proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 50m; client_body_buffer_size 256k; proxy_connect_timeout 30; proxy_send_timeout 30; proxy_read_timeout 60; proxy_buffer_size 256k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; proxy_max_temp_file_size 128m; proxy_pass http://localhost:8080/; }#------ 禁止访问 .htxxx 文件 ------#location ~ /\.ht {deny all;}#------ 禁止IP访问 ------#server{ server_name _; return 404;}#---------------------------- end -----------------------------------------------------------------##----- 这个是反向代理的例子 ---#server { listen 80; server_name www.vinbet.com vinbet.com; location / { proxy_pass http://www.vinbet.com/; # vi /etc/host serverIP www.vinbet.com proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } access_log logs/proxy.access.log ;}#------- 静态文件,nginx自己处理 -------#location ~ ^/(p_w_picpaths|javascript|js|css|flash|media|static)/ { root /var/www/virtual/big.server.com/htdocs;#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。expires 30d;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; }location ~ .*\.(js|css)?$ { expires 1h; }#---- 把请求转发给后台web服务器,反向代理和fastcgi的区别是,反向代理后面是web服务器,fastcgi后台是fasstcgi监听进程,当然,协议也不一样 --#location / {proxy_pass http://127.0.0.1:8080;}}#-- upstream的负载均衡,weight是权重,可以根据机器配置定义权重。据说nginx可以根据后台响应时间调整。后台需要多个web服务器 --#upstream big_server_com {server 127.0.0.3:8000 weight=5;server 127.0.0.3:8001 weight=5;server 192.168.0.1:8000;server 192.168.0.1:8001;} server {listen 80;server_name big.server.com;access_log logs/big.server.access.log main; #--- Nginx 状况监控设置装备摆设 ---# location ~ ^/NginxStatus/ { stub_status on; access_log off; } #--- 禁止访问SEB-INF 目录 ---# location ~ ^/(WEB-INF)/ { deny all; } location / {proxy_pass http://big_server_com;}}#------- upstream的负载均衡 end ----------------------##------ Nginx 监控 ---------------------##--- Nginx 状况监控 ---# location ~ ^/NginxStatus/ { stub_status on; access_log off; } http://localhost/NginxStatus/ 就可以监控到 Nginx 的运行信息,表现的内容如下Active connections: 70server accepts handled requests 14553819 14553819 19239266Reading: 0 Writing: 3 Waiting: 67 NginxStatus 表现的内容意思如下:•active connections – 当前 Nginx 正处置的勾当毗连数。•server accepts handled requests — 统共处置了 14553819 个毗连 , 乐成建立 14553819 次握手 ( 证实中心没有失败的 ), 统共处置了 19239266 个恳求 ( 均匀每次握手处置了 1.3 个数据恳求 )。•reading — nginx 读取到客户真个 Header 信息数。•writing — nginx 返回给客户真个 Header 信息数。•waiting — 开启 keep-alive 的环境下,这个值即是 active – (reading + writing),意思便是 Nginx 已经处置完正在等待下一次恳求指令的驻留毗连。*****注意文件的权限问题*****