1.1 nginx概述nginx简介
Nginx是俄罗斯⼈编写的⼗分轻量级的HTTP服务器,Nginx,它的发⾳为“engine X”, 是⼀个⾼性能的HTTP和反向代理服务器,同时也是⼀个IMAP/POP3/SMTP 代理服务器.Nginx是由俄罗斯⼈ Igor Sysoev为俄罗斯访问量第⼆的 Rambler.ru站点开发的,它已经在该站点运⾏超过两年半了。Igor Sysoev在建⽴的项⽬时,使⽤基于BSD许可。
在⾼并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使⽤。
1.2 nginx安装准备 1.2.1 nginx环境准备
1.系统要求:Linux 2.6+ 内核,本⽂中的Linux操作系统为redhat AS 5.3。2.获取程序并安装
RedHat等其他Linux发⾏版可从安装光盘中找到这些程序库的RPM包RedHat可以直接利⽤CentOS的RPM包安装。可以⽤rpm安装以下包,如有关联包,安装时⼀起安装。
gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-develglib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-developenssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers以上包如果安装了的话,不需要再安装了。
4.其它准备⼯作
如果采⽤半RPM安装的话,PHP的⼀些⽀持包,之前应该事先安装好,全部采⽤tar包安装的话,中间出现问题的可能性⽐较⼤。所以应事先安装好dg库的⽀持包,也可以采⽤tar安装。
1.2.2 nginx软件包准备
Nginx所需要的软件包可以从下⾯位置获取,也可以记住名字在google中搜索。nginx-0.7.61.tar.gzphp-5.2.10.tar.gz
php-5.2.10-fpm-0.5.11.diff.gzmysql-5.1.35.tar.gzlibiconv-1.13.tar.gzlibmcrypt-2.5.8.tar.gzmcrypt-2.6.8.tar.gzmemcache-2.2.5.tgzmhash-0.9.9.9.tar.gzpcre-7.9.tar.gz
eaccelerator-0.9.5.3.tar.bz2PDO_MYSQL-1.0.2.tgzImageMagick.tar.gzimagick-2.2.2.tgz
1.3 FastCGI安装
Fastcgi可以安装到其它的电脑上,可以实现分步式处理,需要修改相关配置⽂件来实现,本章内容讲的是⼀台电脑上实现所有功能。1.3.1 PHP⽀持环境准备
编译安装PHP 5.2.10所需的⽀持库:1.安装libiconv
对⽂本进⾏编码间的转换,⽤它来处理中⽂各种编码之间的转换。#tar zxvf libiconv-1.13.tar.gz#cd libiconv-1.13/
#./configure --prefix=/usr/local#make
#make installcd ../
2.安装libmcrypt 实现加密功能的库。# tar zxvf libmcrypt-2.5.8.tar.gz # cd libmcrypt-2.5.8/# ./configure# make
# make install# /sbin/ldconfig
# 注:这⾥不要退出去了。# cd libltdl/
# ./configure --enable-ltdl-install# make
# make install# cd ../../
3. 安装mhash(哈稀函数库)# tar zxvf mhash-0.9.9.9.tar.gz# cd mhash-0.9.9.9/# ./configure# make
# make install# cd ../
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.laln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.soln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.aln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.laln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.soln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.14. 安装mcrypt
# tar zxvf mcrypt-2.6.8.tar.gz# cd mcrypt-2.6.8/# /sbin/ldconfig#./configure# make
# make install# cd ../
注:DG库所需要安装包,可以采⽤rpm包来安装,减少时间,由于php已经集成GD库,但前提⽀持包应事先安装,如zlib,png,jpeg,freetype等。如果完全想采⽤tar包安装的话,请参考lamp相关内容。1.3.2 MySql环境准备
建⽴mysql组,建⽴mysql⽤户并且加⼊到mysql组中# groupadd mysql
# useradd mysql -g mysql
# tar zxvf mysql-5.1.24-rc.tar.gz# cd mysql-5.1.24-rc
# ./configure --prefix=/usr/local/mysql--without-debug
--with-extra-charsets=gbk--with-extra-charsets=all --enable-assembler --with-pthread
--enable-thread-safe-client
--with-mysqld-ldflags=-all-static /*不带共享库的形式编译mysqld*/--with-client-ldflags=-all-static--with-big-tables
--with-readline /*要采⽤rpm⽅式安装ncurses或tar包安装*/--with-ssl /*要采⽤rpm⽅式安装openssl*/--with-embedded-server --enable-local-infile --with-plugins=innobase# make && make install
# /usr/local/mysql/bin/mysql_install_db --user=mysql #以mysql⾝份初始化数据库
# cp ./support-files/mysql.server /etc/init.d/mysql #复制Mysql启动服务⾄系统
# cp ./support-files/my-medium.cnf /etc/my.cnf# chmod 755 /etc/init.d/mysql
# cd /usr/local/mysql/ #切换到cd /usr/local/mysql/⽬录下# chown -R root . #改变当前⽬录下的所有者为mysql⽤户# chown -R mysql var #修改数据库⽬录的权限
# chgrp -R mysql . #改变当前⽬录下的mysql⽤户的⽂件为mysql组# /usr/local/mysql/bin/mysqld_safe --user=mysql&
# /usr/local/mysql/bin/mysqladmin -u root password 'admin' #设置管理员密码# /usr/local/mysql/bin/mysql -u root -p #测试密码输⼊Enter password:
Welcome to the MySQL monitor. Commands end with ; or \\g.Your MySQL connection id is 6
Server version: 5.1.36-log Source distributionType 'help;' or '\\h' for help.mysql> \\q /*退出mysql*/
# chkconfig --add mysql #添加mysqld服务到系统# chkconfig mysql on #打开myslqd服务# service mysql start #启动Mysql
#/usr/local/mysql/bin/mysqladmin shutdown #关闭数据库
#查看mysql端⼝的打开情况# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/P name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2936/ #查看是否启动:#ps -ef | grep mysql
注:在配置过程中,整体的配置思路从上往下,其中的⼀些功能可以⽤在实际的配置过程中,主要⽤于测试环节中。Mysql的优化部分这⾥没有给出,需要参考其它资料。
1.3.3 PHP安装⽀持FastCGI模式1.编译安装PHP(FastCGI模式)# tar zxvf php-5.2.10.tar.gz
# gzip -cd php-5.2.10-fpm-0.5.11.diff.gz | patch -d php-5.2.10 -p1# cd php-5.2.10/
# ./configure --prefix=/usr/local/php
--with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-gd
--enable-gd-native-ttf --with-libxml-dir=/usr --enable-xml --disable-rpath
--enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem
--enable-inline-optimization --with-curl
--with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm
--enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap
--with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear
#注:make的时候⼀定要加上后⾯的参数,才能成功。# make ZEND_EXTRA_LIBS='-liconv'
# make install
# cp php.ini-dist /usr/local/php/etc/php.ini# cd ../
注:在安装过程中采⽤了tar包与rpm混合安装的情况,对于库的指定确实出现了很⼤的⿇烦。如果采⽤rpm安装的话,不需要指定⽀持包的位置就可以了,tar安装的话,需要指定安装位置。
1.3.4编译安装PHP5扩展模块1.安装memcache
# tar zxvf memcache-2.2.5.tgz# cd memcache-2.2.5/# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config# make
# make install
# 说明:memcache库的位置Installing shared extensions:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/# cd ..
2.安装eaccelerator php加速
# tar jxvf eaccelerator-0.9.5.3.tar.bz2# cd eaccelerator-0.9.5.3/# /usr/local/php/bin/phpize
# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config# make
# make install
Installing shared extensions:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/# cd ../
3.安装PDO_MYSQL(数据库连接的⽀持)# tar zxvf PDO_MYSQL-1.0.2.tgz# cd PDO_MYSQL-1.0.2/# /usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config--with-pdo-mysql=/usr/local/mysql# make
# make install
Installing shared extensions:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/# cd ../
4.安装ImageMagick是Linux下⾮常强⼤的图象处理函数与GD类似.# tar zxvf ImageMagick.tar.gz# cd ImageMagick-6.5.1-2/#./configure# make
# make install# cd ../
5.安装imagick(连接PHP和ImageMagick的通道)# tar zxvf imagick-2.2.2.tgz# cd imagick-2.2.2/
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config# make
# make install
Installing shared extensions:
/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/# cd ../
6.修改php.ini⽂件,已使php⽀持扩展的功能vi /usr/local/php/etc/php.ini查找
extension_dir = \"./\"修改为
extension_dir=\"/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/\"并在此⾏后增加以下⼏⾏,然后保存:
extension = \"memcache.so\"extension = \"pdo_mysql.so\"extension = \"imagick.so\"再查找output_buffering = Off修改为output_buffering = On
7.配置eAccelerator加速PHP:
mkdir -p /usr/local/eaccelerator_cachevi /usr/local/php/etc/php.ini
到配置⽂件的最末尾,粘上以下内容:[eaccelerator]
zend_extension=\"/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so\"eaccelerator.shm_size=\"64\"
eaccelerator.cache_dir=\"/usr/local/eaccelerator_cache\"eaccelerator.enable=\"1\"eaccelerator.optimizer=\"1\"eaccelerator.check_mtime=\"1\"eaccelerator.debug=\"0\"eaccelerator.filter=\"\"
eaccelerator.shm_max=\"0\"eaccelerator.shm_ttl=\"3600\"
eaccelerator.shm_prune_period=\"3600\"eaccelerator.shm_only=\"0\"eaccelerator.compress=\"1\"
eaccelerator.compress_level=\"9\"
1.3.5 PHP-fpm配置
1. 创建php-fpm配置⽂件
php-fpm是为PHP打的⼀个FastCGI管理补丁,可以平滑变更php.ini配置⽽⽆需重启php-cgi:在/usr/local/php/etc/⽬录中创建php-fpm.conf⽂件,也可以在原有的基础上进⾏修改。如果您安装 Nginx + PHP ⽤于程序调试请将以下的
#/usr/sbin/useradd -u 48 -g www www
rm -f /usr/local/php/etc/php-fpm.confvi /usr/local/php/etc/php-fpm.conf
################################输⼊或者是修改为以下内容:
###############################
2.php-fpm启动与管理
/usr/local/php/sbin/php-fpm start
注:/usr/local/php/sbin/php-fpm还有其他参数,包括:
start|stop|quit|restart|reload|logrotate,修改php.ini后不重启php-cgi,重新加载配置⽂件使⽤reload,就保持了在php的fastcgi进程持续运⾏的状态下,⼜重新加载了php.ini。
1.4 Nginx安装 1.4.1 nginx安装
Nginx只是web服务器,配合php技术实现的fastcgi来提⾼性能。1、安装rewrite模块⽀持包pcre库:# tar zxvf pcre-7.8.tar.gz# cd pcre-7.8/# ./configure
# make && make installcd ../
2、安装Nginx
说明:创建www⽤户组及www⽤户,如果之前php-fpm没有创建,这⾥要创建。# /usr/sbin/groupadd www
# /usr/sbin/useradd -g www www
# tar zxvf nginx-0.7.59.tar.gz# cd nginx-0.7.59/
#./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module nginx path prefix: \"/usr/local/nginx\"
nginx binary file: \"/usr/local/nginx/sbin/nginx\" nginx configuration prefix: \"/usr/local/nginx/conf\"
nginx configuration file: \"/usr/local/nginx/conf/nginx.conf\" nginx pid file: \"/usr/local/nginx/logs/nginx.pid\" nginx error log file: \"/usr/local/nginx/logs/error.log\"
nginx http access log file: \"/usr/local/nginx/logs/access.log\"
nginx http client request body temporary files: \"client_body_temp\" nginx http proxy temporary files: \"proxy_temp\" nginx http fastcgi temporary files: \"fastcgi_temp\"# make && make install# cd ../
3.Nginx 安装后只有⼀个程序⽂件,本⾝并不提供各种管理程序,它是使⽤参数和系统信号机制对 Nginx 进程本⾝进⾏控制的。 Nginx 的参数包括有如下⼏个:
-c -t:测试配置⽂件是否正确,在运⾏时需要重新加载配置的时候,此命令⾮常重要,⽤来检测所修改的配置⽂件是否有语法错误。-v:显⽰ nginx 版本号。 -V:显⽰ nginx 的版本号以及编译环境信息以及编译时的参数。 例如我们要测试某个配置⽂件是否书写正确,我们可以使⽤以下命令sbin/nginx -t -c conf/nginx.conf 1.4.2 nginx配置 1.在/usr/local/nginx/conf/⽬录中创建nginx.conf⽂件:rm -f /usr/local/nginx/conf/nginx.confvi /usr/local/nginx/conf/nginx.conf =======================================nginx.conf才是nginx web服务器的配置⽂件 =======================================user www www; /*启动nginx服务的⽤户与组*/worker_processes 8; /*启动nginx服务的⼯作进程*/ error_log logs/nginx_error.log crit; /*错误⽇志,以及等级*/pid /usr/local/nginx/nginx.pid; /*nginx服务进程PID*/worker_rlimit_nofile 51200; events { use epoll; /*⼯作模式*/ worker_connections 51200; /*每进程允许最⼤的同时连接数*/} http { include mime.types; default_type application/octet-stream; #charset gb2312; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; 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 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; #limit_zone crawler $binary_remote_addr 10m; server { listen 80; /*监听端⼝*/ server_name localhost; /*服务器名称*/ index index.html index.htm index.php; /*缺省主页名称*/ root /usr/local/nginx/html; /*⽹站根⽬录,也可以采⽤下⾯内容*/#也可以采⽤相对路径,下⾯注释部分*/ #location / { # root html; # index index.html index.htm; # } #limit_conn crawler 20; #通过FastCGI⽅式⽀持PHP,php页⾯由fastcgi代理处理,这也是反向代理的⼀个应⽤,这⾥可以是jsp/asp等脚本。 location ~ .*\\.(php|php5)?$ { #fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_pass 127.0.0.1:9000; /*fastcgi监听端⼝*/ fastcgi_index index.php; include fcgi.conf; /*fastcgi配置⽂件,修改为以下内容*/ } #对于某⼀类型的⽂件,设置过期时间,静态的页⾯通常设置长⼀点。 #静态⽂件,nginx⾃⼰处理 location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ { expires 30d; } #⽇志的格式 log_format access '$remote_addr - $remote_user [$time_local] \"$request\" ' '$status $body_bytes_sent \"$http_referer\" ' '\"$http_user_agent\" $http_x_forwarded_for'; access_log logs/access.log access; }} 说明:以上配置⽂件只是基本配置⽂件,要实现其它功能的话,需要在此基础上进⾏修改。2.在/usr/local/nginx/conf/⽬录中创建fcgi.conf⽂件:说明:可以直接粘贴以下内容。vi /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-redirectfastcgi_param REDIRECT_STATUS 200;1.4.3 nginx启动与管理1.启动nginx /usr/local/nginx/sbin/nginx 2.测试nginx配置⽂件 修改/usr/local/nginx/conf/nginx.conf配置⽂件后,请执⾏以下命令检查配置⽂件是否正确:# /usr/local/nginx/sbin/nginx -t 如果屏幕显⽰以下两⾏信息,说明配置⽂件正确: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully3.查看Nginx主进程号 ps -ef | grep \"nginx: master process\" | grep -v \"grep\" | awk -F ' ' '{print $2}'屏幕显⽰的即为Nginx主进程号,例如:6302 这时,执⾏以下命令即可使修改过的Nginx配置⽂件⽣效:kill -HUP 6302 或者⽆需这么⿇烦,找到Nginx的Pid⽂件:kill -HUP `cat /usr/local/nginx/logs/nginx.pid`4.配置开机⾃动启动Nginx + PHPvi /etc/rc.local加⼊以下内容:ulimit -SHn 51200 /usr/local/php/sbin/php-fpm start/usr/local/nginx/sbin/nginx 1.4.4 nginx配置总结 nginx对我来说是⼀个新的内容,安装的包⽐较多,在经过了⼀段时间对nginx的了解之后,才真正的配置成功,本⽂只是实现了⼀个最基本的功能,对于nginx⾼性能的使⽤在配置⽂件中没有实现。在以后的学习过程中还需要更深⼊的去了解,⽐如:反向代理,以及nginx+fastcgi分步式的环境配置。 1.5 Nginx基本配置管理1.5.1 nginx配置基础1、正则表达式匹配 ~ 区分⼤⼩写匹配 ~* 不区分⼤⼩写匹配 !~和!~*分别为区分⼤⼩写不匹配及不区分⼤⼩写不匹配 ^ 以什么开头的匹配 $ 以什么结尾的匹配 \\ 转义字符。可以转. * ?等 * 代表任意字符 2、⽂件及⽬录匹配 -f和!-f⽤来判断是否存在⽂件 -d和!-d⽤来判断是否存在⽬录 -e和!-e⽤来判断是否存在⽂件或⽬录 -x和!-x⽤来判断⽂件是否可执⾏例: location = / #匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配location ^~ /images/ { # 匹配任何已/images/开头的任何查询并且停⽌搜索。任何正则表达式将不会被测试。location ~* \\.(gif|jpg|jpeg)$ { # 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求3、⼀些可⽤的全局变量$args $content_length$content_type$document_root$document_uri$host $http_user_agent$http_cookie$limit_rate $request_body_file$request_method$remote_addr$remote_port$remote_user $request_filename$request_uri $query_string$scheme $server_protocol$server_addr$server_name$server_port$uri 1.5.2 nginx切割⽇志 1、创建脚本/usr/local/nginx/sbin/cut_nginx_log.sh,输⼊以下内容:#!/bin/bash # This script run at 00:00 # The Nginx logs path logs_path=\"/usr/local/nginx/logs/\" mkdir -p ${logs_path}$(date -d \"yesterday\" +\"%Y\")/$(date -d \"yesterday\" +\"%m\")/ mv ${logs_path}access.log ${logs_path}$(date -d \"yesterday\" +\"%Y\")/$(date -d \"yesterday\" +\"%m\")/access_$(date -d \"yesterday\"+\"%Y%m%d\").log kill -USR1 `cat /usr/local/nginx/logs/nginx.pid` 2、设置crontab,每天凌晨00:00切割nginx访问⽇志crontab -e 输⼊以下内容: 00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh1.5.3 nginx状态监控 在nginx.conf根⽬录下加⼊以下内容,过程如下:1.修改配置⽂件 vi /usr/local/nginx/conf/nginx.conf #以下⾯加⼊以下内容location /NginxStatus { stub_status on; access_log on; auth_basic \"NginxStatus\";} 2.重启nginx服务 (1)kill -HUP `cat /usr/local/nginx/logs/nginx.pid`(2)如果不⾏的话,先杀,再启动 1.5.4 nginx⽬录浏览 在nginx.conf根⽬录下加⼊以下内容,过程如下:1.修改配置⽂件 vi /usr/local/nginx/conf/nginx.conf #以下⾯加⼊以下内容 #⾥⾯有要这⼀句就可以了,其它可以注释#注:与 { 要有空格,否则会出错location / {autoindex on;} 2.重启nginx服务 (1)kill -HUP `cat /usr/local/nginx/logs/nginx.pid`(2)如果不⾏的话,先杀,再启动 1.5.5 nginx禁⽌访问某类⽂件 在nginx.conf根⽬录下加⼊以下内容,过程如下:修改配置⽂件如下 vi /usr/local/nginx/conf/nginx.conf#以下⾯加⼊以下内容 #⾥⾯有要这⼀句就可以了,其它可以注释#注:与 { 要有空格,否则会出错⽅法⼀: location ~* \\.(txt|doc)$ {if (-f $request_filename) {root /usr/local/nginx/html/test;break;}} ⽅法⼆ location ~* \\.(txt|doc)$ { root /usr/local/nginx/html/test;deny all;} 说明:⽤正则表达式进⾏匹配,来执⾏相应的处理。1.5.6 nginx静态⽂件处理 第⼀种⽅法:根据⽂件类型expires location ~* \\.(js|css|jpg|jpeg|gif|png|swf)$ {if (-f $request_filename) {root /usr/local/nginx/html/;expires 1d;} break;} 第⼆种⽅法:根据判断某个⽬录 location ~ ^/(images|javascript|js|css|flash|media|static)/ {root /usr/local/nginx/html/;expires 30d;} ⽰例2: 反向代理负载均衡的应⽤架构 #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。据说nginx可以根据后台响应时间调整。后台需要多个web服务器。nginx的upstream⽬前⽀持4种⽅式的分配1)、轮询(默认) 每个请求按时间顺序逐⼀分配到不同的后端服务器,如果后端服务器down掉,能⾃动剔除。2)、weight 指定轮询⼏率,weight和访问⽐率成正⽐,⽤于后端服务器性能不均的情况。2)、ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问⼀个后端服务器,可以解决session的问题。3)、fair(第三⽅) 按后端服务器的响应时间来分配请求,响应时间短的优先 每个设备的状态设置为: (1)down 表⽰单前的server暂时不参与负载 (2)weight 默认为1.weight越⼤,负载的权重就越⼤。 (3)max_fails :允许请求失败的次数默认为1.当超过最⼤次数时,返回proxy_next_upstream 模块定义的错误(4)fail_timeout:max_fails次失败后,暂停的时间。 (5)backup:其它所有的⾮backup机器down或者忙的时候,请求backup机器。所以这台机器压⼒会最轻。nginx⽀持同时设置多组的负载均衡,⽤来给不⽤的server来使⽤。 2、fastcgi⽀持 ⽰例1:分布式fastcgi的架构的应⽤ 注:配置⽂件中有相关默认⽰例,只需要打开相关的注释就可以实现php页⾯的解析了。以下⽰例只是应⽤于nginx与fastcgi安装在同⼀台电脑的情况, location ~ \\.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fcgi.conf;} 如果fastcgi安装在其它主机上实现有是分布是的架构,如上图,对于php页⾯的处理需要修改,⼀共需要修改⼏个地⽅:(1)修改nginx.conf⽂件如下:location ~ \\.php$ { root html; fastcgi_pass 192.168.129.22:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /opt/www/$fastcgi_script_name; include fcgi.conf;} 两处说明:⼀个是访问nginx,nginx把请求转发到fastcgi处理,但是php页⾯⼜是在fastcgi那台机器上的/opt/www⽬录中,所以需要修改以上两个地⽅才能实现php页⾯的解析。(2)修改/usr/local/php/etc/php-fpm.conf⽂件注:在安装fastcgi主机上: 第⼀处监听本机的9000端⼝,默认是127.0.0.1,由于是分布式应⽤,需要修改。第⼆处只允许nginx发来的请求给予解析,也需要修改。⽰例2: 这段配置亦可改成location /abc/ { root /home/html/; /*是abc的上级⽬录*/} ⽰例3: 把alias的配置改成:location /abc/ { alias /home/html/def/;} 那么nginx将会从/home/html/def/取数据,这段配置还不能直接使⽤root配置,如果⾮要配置,只有在/home/html/下建⽴⼀个 def->abc的软link(快捷⽅式)了。说明: 1、使⽤alias时⽬录名后⾯⼀定要加 / 2、nginx、resin当虚拟⽬录名与真实⽬录同名时,虚拟⽬录⽐真实⽬录优先级要⾼。1.5.10 nginx虚拟主机 虚拟主机通常有三种情况:⼀、多ip地址 ⼆、单ip多端⼝实现 三、单ip⼀个端⼝多主机头(或者是多域名实现)在这⾥只是实现后两种虚拟主机的配置⽅法:⽅法⼀: 1.修改配置⽂件 vi /usr/local/nginx/conf/nginx.conf #注释原有server内容,加⼊以下内容,相关内容省略,如⽇志出错提⽰等。server { listen 99; server_name localhost; location / { index index.html; root /usr/local/www1/htdocs; }} server { listen 88; server_name localhost; location / { index index.html; root /usr/local/www2/htdocs; }} 2.其它准备⼯作 mkdir -p /usr/local/www1/htdocscd /usr/local/www1/htdocs echo \"web server 1\" >index.htmlmkdir -p /usr/local/www2/htdocscd /usr/local/www2/htdocs echo \"web server 2\">index.html 3.重启nginx服务 (1)kill -HUP `cat /usr/local/nginx/logs/nginx.pid`(2)如果不⾏的话,先杀,再启动 ⽅法⼆: ⽅法⼆采⽤的是⽐较常⽤的虚拟主机配置,如单IP,80端⼝,通过域名来实现区分不同的⽹站主页。在⽅法⼀的基础上修改为以下配置。注:需要有dns的⽀持,有域名,在下⾯的配置中,只是实现了静态页⾯实现,如果要实现动态的功能,参考相头内容。server { listen 80; server_name ; access_log logs/koumm.access.log main; location / { index index.html; root /var/www/koumm.com/htdocs; }} server { listen 80; server_name ; access_log logs/abc.access.log main; location / { index index.html; root /var/www/abc.com/htdocs; }} 因篇幅问题不能全部显示,请点此查看更多更全内容