知乎专栏 |
server.modules = ( # "mod_rewrite", # "mod_redirect", # "mod_alias", "mod_access", # "mod_trigger_b4_dl", # "mod_auth", # "mod_status", # "mod_setenv", # "mod_fastcgi", # "mod_proxy", # "mod_simple_vhost", # "mod_evhost", # "mod_userdir", # "mod_cgi", # "mod_compress", # "mod_ssi", # "mod_usertrack", # "mod_expire", # "mod_secdownload", # "mod_rrdtool", "mod_accesslog" )
$ sudo lighty-enable-mod simple-vhost
simple-vhost.default-host = "www.example.com"
create your virtual host directory
$ mkdir -p /var/www/www.example.com/html
create a test file
$ echo helloworld!!!> /var/www/www.example.com/html/index.html
启用 ssl 模块
$ sudo lighttpd-enable-mod ssl [sudo] password for neo: Available modules: auth cgi fastcgi proxy rrdtool simple-vhost ssi ssl status userdir Already enabled modules: cgi fastcgi simple-vhost Enabling ssl: ok Run /etc/init.d/lighttpd force-reload to enable changes
创建 ssl 证书
$ sudo openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes $ sudo chmod 400 server.pem
url.redirect = ( "^/music/(.+)" => "http://www.example.org/$1" )
301重定向
RewriteCond %{HTTP_HOST} ^example\.org$ [NC] RewriteRule ^(.*)$ http://www.example.org/$1 [R=301,L]
lighttpd 实现上面 apache功能
$HTTP["host"] =~ "^example\.org" { url.redirect = ( "^/(.*)$" => "http://www.example.org/$1" ) } $HTTP["host"] =~ "^example\.com$" { url.redirect = ( "^/(.*)" => "http://www.example.com/$1" ) }
example 1
url.rewrite-once = ( "^/wiki/(.*)$" => "/wiki/awki.cgi/$1" ) $HTTP["url"] =~ "^/wiki" { $HTTP["url"] !~ "^/wiki/awki.cgi/" { url.access-deny = ("") } }
example 2
$HTTP["host"] =~ "^.*\.(example.org)$" { url.rewrite-once = ( "^/(.*)" => "/index.php/$1" ) }
example 3
$HTTP["host"] =~ "^.*\.(example.org)$" { url.rewrite = ( "^/(images|stylesheet).*" => "/$0", "^/(.*)" => "/index.php/$1" ) }
# Apache RewriteRule ^/index\.html$ /index.php [QSA] RewriteRule ^/team_(.*)\.html$ /team.php?id=$1 [QSA] #lighttpd "^/index\.html(.*)" => "/index.php$1", "^/team_(\w+)\.html\?(.*)" => "/team.php?id=$1&$2",
ref: http://redmine.lighttpd.net/wiki/lighttpd/MigratingFromApache
url.rewrite = ( "^/index\.html(.*)" => "/index.php$1", "^/index\.html" => "/index.php", "^/team_(.*)\.html" => "/team.php?id=$1", "^/team_(\w+)\.html\?(.*)" => "/team.php?id=$1&$2" )
$HTTP["host"] =~ "^.*\.(example.org)$" { alias.url = ( "/images" => "/home/neo/workspace/Development/photography/application/photography/images", "/stylesheet" => "/home/neo/workspace/Development/photography/application/photography/stylesheet" ) }
enable auth
$ sudo lighttpd-enable-mod auth
/etc/lighttpd/conf-enabled/05-auth.conf
$ sudo vim conf-enabled/05-auth.conf auth.backend = "plain" auth.backend.plain.userfile = "/etc/lighttpd/.secret" auth.require = ( "/tmp/" => ( "method" => "basic", "realm" => "Password protected area", "require" => "user=neo" ) )
create a passwd file
$ sudo vim .secret neo:chen $ sudo chmod 400 .secret $ sudo chown www-data /etc/lighttpd/.secret
$ sudo /etc/init.d/lighttpd reload
创建cache目录
mkdir -p /var/cache/lighttpd/compress
配置lighttpd.conf文件
找到server.modules列表,去掉"mod_compress"注释,再打开compress module的注释
#### compress module compress.cache-dir = "/var/lighttpd/cache/compress/" compress.filetype = ("text/plain", "text/html")
Compressing Dynamic Content
php.ini
zlib.output_compression = On zlib.output_handler = On
最后使用telnet测试
telnet www.bg7nyt.cn 80GET /index.html HTTP/1.0 Host: 10.10.100.183 Accept-Encoding: gzip,deflate
看到乱码输出,而非HTML,表示配置成功.
例 39.2. lighttpd compress
$HTTP["host"] =~ "www\.example\.com$" { compress.cache-dir = "/www/compress/" compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css", "application/javascript", "text/javascript") $HTTP["url"] =~ "(\.png|\.css|\.js|\.jpg|\.gif)$" { expire.url = (""=>"access 30 seconds") } }
expire.url = ( "/images/" => "access 1 hours" )
Example to include all sub-directories:
$HTTP["url"] =~ "^/images/" { expire.url = ( "" => "access 1 hours" ) }
例 39.3. lighttpd expire
$HTTP["host"] =~ "www\.example\.com$" { $HTTP["url"] =~ "(\.png|\.css|\.js|\.jpg|\.gif)$" { expire.url = (""=>"access 30 seconds") } }
$HTTP["url"] =~ "^/(.*)" { setenv.add-response-header = ( "Cache-Control" => "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=-1" ) } $HTTP["url"] =~ ".swf" { setenv.add-response-header = ("Pragma" =>"no-cache","Expires" => "-1") } $HTTP["url"] =~ ".swf" { setenv.add-response-header = ("Cache-Control" =>"max-age=0") } $HTTP["url"] =~ ".html" { setenv.add-response-header = ("Cache-Control" =>"s-maxage=3600") } $HTTP["url"] =~ ".css" { setenv.add-response-header = ( "Content-Encoding" => "gzip" ) }
enable fastcgi
$ sudo lighty-enable-mod fastcgi
#### fastcgi module ## read fastcgi.txt for more info ## for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/local/bin/php-cgi", "max-procs" => 16, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "128", "PHP_FCGI_MAX_REQUESTS" => "1000" ), "broken-scriptfilename" => "enable" ) ) ) fastcgi.server = ( ".php" => (( "bin-path" => "/usr/bin/php-cgi", "socket" => "/tmp/php.socket", "max-procs" => 2, "idle-timeout" => 200, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "10", "PHP_FCGI_MAX_REQUESTS" => "10000" ), "bin-copy-environment" => ( "PATH", "SHELL", "USER" ), "broken-scriptfilename" => "enable" )) )
下载PHP
cd /usr/local/src/ wget http://cn2.php.net/get/php-5.2.3.tar.bz2/from/cn.php.net/mirror tar jxvf php-5.2.3.tar.bz2 cd php-5.2.3
configure
./configure --prefix=/usr/local/php-5.2.3 \ --with-config-file-path=/usr/local/php-5.2.3/etc \ --enable-fastcgi \ --enable-force-cgi-redirect \ --with-curl \ --with-gd \ --with-ldap \ --with-snmp \ --enable-zip \ --enable-exif \ --with-pdo-mysql \ --with-pdo-pgsql \ make make test make install
其它有用的模块
--enable-pcntl
符号连接
ln -s /usr/local/php-5.2.3 /usr/local/php ln -s /usr/local/php/bin/php /usr/local/bin/php
php.ini
cp php.ini-dist /usr/local/php/etc/php.ini
env
PHP_FCGI_CHILDREN=384
使用 php -v FastCGI 安装情况
php -v
显示(cgi-fcgi)表示正确
# cd /usr/local/php/ # bin/php -v PHP 5.2.2 (cgi-fcgi) (built: May 25 2007 15:50:28) Copyright (c) 1997-2007 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
(cgi-fcgi)不能正常工作
PHP 5.2.2 (cli) (built: May 25 2007 15:50:28) Copyright (c) 1997-2007 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
使用 php -m 查看PHP Modules
# bin/php -m [PHP Modules] cgi-fcgi ctype date dom filter gd hash iconv json ldap libxml mssql pcre PDO pdo_mysql pdo_sqlite posix Reflection session SimpleXML snmp SPL SQLite standard tokenizer xml xmlreader xmlwriter zip [Zend Modules]
$ sudo apt-get install php5 php5-cli php5-cgi
找到 fastcgi.server 去掉注释
bin-path 改为PHP程序安装目录
fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/local/php/bin/php" ) ) )
下面例子更复杂一些
/usr/local/lighttpd/etc/lighttpd.conf
include /usr/local/lighttpd/etc/php-fastcgi.conf
/usr/local/lighttpd/etc/php-fastcgi.conf
fastcgi.server = ( ".php" => ( "localhost" => ( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/local/php/bin/php", "min-procs" => 1, "max-procs" => 5, "max-load-per-proc" => 4, "idle-timeout" => 20 ) ) )
PHP FastCGI环境测试
echo "<?php phpinfo(); ?>" > /www/pages/index.phpcurl http://127.0.0.1/index.php
sudo apt-get install python sudo apt-get install python-setuptools
wget http://www.djangoproject.com/download/0.96/tarball/ tar zxvf Django-0.96.tar.gz cd Django-0.96 python setup.py install
生成项目
django-admin.py startproject newtest
web server
cd newtest/ ./manage.py runserver
helloworld.py
from django.http import HttpResponse def index(request): return HttpResponse("Hello, Django.")
urls.py
from django.conf.urls.defaults import * urlpatterns = patterns('', # Example: # (r'^newtest/', include('newtest.foo.urls')), (r'^$', 'newtest.helloworld.index'), # Uncomment this for admin: # (r'^admin/', include('django.contrib.admin.urls')), )
启动Web Server
# ./manage.py runserver Validating models... 0 errors found. Django version 0.96, using settings 'newtest.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
curl http://127.0.0.1:8000/
Debian/Ubuntu
sudo apt-get install libjpeg62-dev sudo apt-get install python-imaging
采用源码安装
tar zxvf Imaging-1.1.6.tar.gz cd Imaging-1.1.6/sudo python setup.py install
decoder jpeg not available | |
---|---|
首先确认jpeg库是否安装 find / -name jpeglib.h 然后修改头文件 Imaging-1.1.6/libImaging 修改Jpeg.h, #include "jpeglib.h" 改为 #include "/usr/include/jpeglib.h" |
install fastcgi module
$ sudo apt-get install libfcgi-perl libfcgi-procmanager-perl
The examples also use a virtual host regexp that matches either www.myapp.com or myapp.com
$HTTP["host"] =~ "^(www.)?mysite.com"
Starting the FastCGI server
MyApp/script/myapp_fastcgi.pl -l /tmp/myapp.socket -n 5 -d
lighttpd.conf
server.document-root = "/var/www/MyApp/root"
$ sudo vim /etc/lighttpd/conf-available/10-fastcgi.conf
fastcgi.server = ( "" => ( "MyApp" => ( "socket" => "/tmp/myapp.socket", "check-local" => "disable" ) ) )
restart lighttpd
neo@master:~$ sudo /etc/init.d/lighttpd restart * Stopping web server lighttpd [ OK ] * Starting web server lighttpd [ OK ]
Testing
http://127.0.0.1/
More advanced configuration
例 39.4. fastcgi.conf
fastcgi.server = ( "" => ( "MyApp" => ( "socket" => "/tmp/myapp.socket", "check-local" => "disable", "bin-path" => "/var/www/MyApp/script/myapp_fastcgi.pl", "min-procs" => 2, "max-procs" => 5, "idle-timeout" => 20 ) ) )
php-fpm.conf
listen = /var/run/fastcgi.socket
nginx 配置
location ~ /index.php/ { root /www/example.com/api.example.com/htdocs; fastcgi_pass unix:/var/run/fastcgi.socket; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/example.com/api.example.com/htdocs$fastcgi_script_name; include fastcgi_params; }
$HTTP["user-agent"] =~ "Googlebot|Sosospider+|eMule|Wget|^Java|^PHP|Ruby|Python" { url.rewrite = ( "^/(.*)" => "/crawler.html" ) }
$HTTP["user-agent"] =~ "Baiduspider+" { connection.delay-seconds = 10 }