fast_cgi模块详解
nginx–location
语法规则: location [=||*|^~] /uri/ { … }
= 开头表示精确匹配
~* 开头表示不区分大小写的正则匹配
!和!*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考):
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
例子,有如下匹配规则:
location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ .(gif|jpg|png|js|css)$ {
#规则D
}
location ~* .png$ {
#规则E
}
location !~ .xhtml$ {
#规则F
}
location !~* .xhtml$ {
#规则G
}
location / {
#规则H
}
那么产生的效果如下:
访问根目录/, 比如http://localhost/ 将匹配规则A
访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
访问 http://localhost/static/a.html 将匹配规则C
访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C
访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。
访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在
安装与配置
准备文件:
lighttpd-1.4.15.tar.gz
php-4.4.2.tar.gz
mysql-5.0.20a.tar.gz
开始:
1 编译安装lighttpd
# tar zxvf lighttpd-1.4.15.tar.gz
# cd lighttpd-1.4.15
# ls
# ./configure --prefix=/usr/local/lighttpd
# make
# make install
创建网站根目录
# mkdir /usr/local/lighttpd/htdocs
创建配置文件放置目录
#mkdir /usr/local/lighttpd/etc
创建日志目录
#mkdir /usr/local/lighttpd/logs
将配置文件拷贝到/usr/local/lighttpd/etc
#cp doc/lighttpd.conf /usr/local/lighttpd/etc
启动lighttpd
#/usr/local/lighttpd/bin/lighttpd -f /usr/local/lighttpd/etc/lighttpd.conf
2 安装 MYSQL
# tar zxvf mysql-5.0.20a.tar.gz
# cd mysql-5.0.20a
# ./configure --prefix=/usr/local/mysql
# make;make install
# groupadd mysql
# useradd -g mysql mysql
# cp support-files/my-medium.cnf /etc/my.cnf
# cd /usr/local/mysql/
初始化
# bin/mysql_install_db --user=mysql
运行
bin/mysqld_safe --user=mysql &
设置自动启动(略)
3 安装 php (fast-cgi)
# tar zxvf php-4.4.2.tar.gz
# cd php-4.4.2
编译,加 --enable-fastcgi 和 --enable-force-cgi-redirect 选项
# ./configure --prefix=/usr/local/php-fastcgi --enable-fastcgi --enable-force-cgi-redirect --with-zlib --
with-gd --with-ttf --with-png --with-expat-dir=/usr --with-gmp --with-xml --with-mysql=/usr/local/mysql --with-
charset=utf-8 --disable-debug --disable-posix --disable-rpath --enable-safe-mode --enable-magic-quotes --disabl
e-dmalloc --enable-bcmath --enable-dio --enable-gd-native-ttf --enable-sysvsem --enable-sysvshm --enable-wddx -
-enable-versioning --enable-pic --enable-inline-optimization --enable-memory-limit --enable-mbstring --enable-m
bregex --enable-mbstr-enc-trans --with-config-file-path=/usr/local/lib --enable-ftp --disable-debug --enable-tr
ack-vars=yes --with-jpeg-dir --with-freetype-dir --enable-gd-native-ttf --enable-dl
# make;make install
4 配置lighttpd
#vim /usr/local/lighttpd/etc/lighttpd.conf
修改一下内容
---------------- 加载cgi,fastcgi模块-------------
14 server.modules = (
15 "mod_rewrite",
16 # "mod_redirect",
17 # "mod_alias",
18 "mod_access",
19 # "mod_cml",
20 # "mod_trigger_b4_dl",
21 # "mod_auth",
22 # "mod_status",
23 # "mod_setenv",
24 "mod_fastcgi",
25 # "mod_proxy",
26 # "mod_simple_vhost",
27 # "mod_evhost",
28 # "mod_userdir",
29 "mod_cgi",
30 # "mod_compress",
31 # "mod_ssi",
32 # "mod_usertrack",
----------------------------网站根目录---------------------------------
38 ## a static document-root, for virtual-hosting take look at the
39 ## server.virtual-* options
40 server.document-root = "/usr/local/lighttpd/htdocs"
----------------------------日志目录------------------------------
42 ## where to send error-messages to
43 server.errorlog = "/usr/local/lighttpd/logs/lighttpd.error.log"
.....
.....
115 #### accesslog module
116 accesslog.filename = "/usr/local/lighttpd/logs/access.log"
-----------------------------默认首页格式-------------------------
45 # files to check for if .../ is requested
46 index-file.names = ( "index.php", "index.html",
47 "index.htm", "default.htm" )
-----------------------------FastCgi模块---------------------------
206 #### fastcgi module
207 ## read fastcgi.txt for more info
208 ## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
209 fastcgi.server= (".php" =>
210 (( "socket" => "/tmp/php.socket",
211 "bin-path" => "/usr/local/php-fastcgi/bin/php",
212 "min-procs" => 1,
213 "max-procs" => 32,
214 "max-load-per-proc" => 4,
215 "idle-timeout" => 20
216 ))
217 )
------------------------------CGI模块----------------------------------
243 #### CGI module
244 cgi.assign = (
245 ".sh" => "/bin/bash", #shell script
246 ".pl" => "/usr/bin/perl", #Perl
247 ".cgi" => "" ) # c/c++
248 #
5 修改设置 php.ini
cgi.fix_pathinfo = 1
6 配置完毕,重起lighttpd
查其PID
# ps auxww |grep lighttpd
kill掉
# kill -9 PID
启动
# /usr/local/lighttpd/bin/lighttpd -f /usr/local/lighttpd/etc/lighttpd.conf
7.简单管理脚本
为了方便管理lighttpd,写几个简单的脚本
checkLighttpd.sh(检查lighttpd进程):
-------------------------------------
#!/bin/bash
ps auxww |grep lighttpd|grep -v grep
-------------------------------------
killLighttpd.sh(杀死lighttpd进程) :
-------------------------------------
#!/bin/bash
LIGHTTPD_PID=`ps auxww |grep lighttpd |grep -v grep | awk '{print $2}'`
kill -9 $LIGHTTPD_PID
-------------------------------------
startLighttpd.sh (启动lighttpd):
-------------------------------------
#!/bin/bash
/usr/local/lighttpd/***in/lighttpd -f /usr/local/lighttpd/etc/lighttpd.conf
-------------------------------------
# chmod +x startLighttpd.sh killLighttpd.sh checkLighttpd.sh
8 测试:
用c,shell,perl,php分别写几个小程序作测试(略)
注: 经测试, php 要用<?php ?> ,使用<? ?>竟然解析不出来,php5与php4的一点差别,需要修改php.ini