1.nginx介紹
???? nginx是一個非常輕量級的http服務器,nginx,它的發音為“engine x”, 是一個高性能的http和
反向代理服務器,同時也是一個imap/pop3/smtp 代理服務器。
2.對php支持
???? 目前各種web 服務器對php的支持一共有三種:
?? (1)通過web 服務器內置的模塊來實現,例如apache的mod_php5,類似的apache內置的mod_perl
可以對perl支持。
?? (2)通過CGI來實現,這個就好比之前perl的cgi,該種方式的缺點是性能差,因為每次服務器遇到
這些腳本都需要重新啟動腳本解析器來執行腳本然后將結果返回給服務器;
另一方面就是不太安全;該方面幾乎很少使用了。
?? (3)最新出現一種叫做fastcgi。所謂fastcgi就是對cgi的改進。它一般采用c/s結構,一般腳本處理器
會啟動一個或者多個daemon進程,每次web 服務器遇到腳本的時候,直接交付給fastcgi的進程來執行,然后
將得到的結果(通常為html)返回給瀏覽器。
2.1 apache+mod_php模式
???? 我們很久一段時間使用經典的apache+mod_php。
???? apache對php的支持是通過apache的模塊來支持的。如果從源代碼編譯安裝php的話,如果希望apache支持
php的話,在./configure步驟需要指定–with-apxs2=/usr/local/apache2/bin/apxs 表示告訴編譯器通過
apache的mod_php5/apxs來提供對php5的解析;而且在最后一步make install的時候我們會看到將動態鏈接庫
libphp5.so拷貝到apache2的安裝目錄的modules目錄下,并且還需要在httpd.conf配置文件中添加loadmodule
語句來動態將libphp5.so模塊加載進來,從而實現apache對php的支持。
2.2 nginx+fastcgi模式
???? nginx完全是輕量級的,必須借助第三方的fastcgi處理器才可以對php進行解析,因此其實這樣看來nginx是
非常靈活的,它可以和任何第三方提供解析的處理器實現連接從而實現對php的解析(在nginx.conf中很容易設置)。
???? nginx可以使用spwan-fcgi。在早期版本中需要安裝lighttpd,但是在9.10版本以后直接安裝spawn-fcgi就可以。
現在出現了新的第三方的php的fastcgi處理器,叫做php-fpm,可以了解一下。本文是基于spawn-fcgi實現對
php模塊的支持。
2.3 安裝fastcgi
????? /usr/bin/spawn-fcgi這個文件來管理 fastcgi,它原屬于lighttpd這個包里面,但 9.10 后,spawn-fcgi
被分離出來單獨成包。
?? (1)使用apt-get在線安裝命令如下:
???????? $sudo apt-get install spawn-fcgi
?? (2)源代碼安裝如下,下載地址為:
???????? 解壓縮以后,進入目錄下執行如下安裝命令:
???????? $./configure
???????? $make
???????? $make install
??????? 安裝之后,spawn-fcgi命令就可以直接使用了,它的可執行文件在/usr/local/bin/spawn-fcgi。
3.nginx安裝
3.1 安裝nginx
???? (1)在線安裝
????????? $sudo apt-get install nginx
????? nginx的版本是1.2.1
????? ubuntu安裝nginx之后的文件結構大致為:
????? 所有的配置文件都在/etc/nginx下,并且每個虛擬主機已經安排在了/etc/nginx/sites-available下
????? 啟動程序文件在/usr/sbin/nginx
????? 日志放在了/var/log/nginx中,分別是Access.log和Error.log
????? 并已經在/etc/init.d/下創建了啟動腳本nginx
????? 默認的虛擬主機的目錄設置在了/usr/share/nginx/www
??? (2)源代碼安裝
????? 下載地址:
????? 我這里下載的是 nginx-1.3.9.tar.gz,安裝過程很簡單,如下:
????? $./configure
????? $make
????? $make install
????? 安裝成功之后,nginx放置在/usr/local/nginx目錄下,主要的配置文件為conf目錄下的nginx.conf,
nginx的啟動文件在sbin目錄下的nginx文件。
3.2 啟動nginx
?? (1)在線安裝的啟動過程
????? $sudo /etc/init.d/nginx start
?? (2)源代碼安裝的啟動過程
????? $cd /usr/local/nginx
????? $sbin/nginx
????? 然后就可以訪問了,http://localhost/ , 一切正常!如果不能訪問,先不要繼續,看看是什么原因,
解決之后再繼續。
????? 如果你的機器同時安裝了apache,那上面的訪問方式就不能使用了,而且nginx都可能啟動不了,這是
因為它們都是用了80這個端口。我們這里將nginx的端口修改為8080,
這里主要修改nginx的配置文件nginx.conf,將一下這一行
?????? listen 80;
??? 修改為
?????? listen 8080;
??? 然后就可以訪問了,http://localhost:8080/ 。
3.3 安裝php和mysql
????? $sudo apt-get install php5-cli php5-cgi mysql-server php5-mysql
3.4 測試nginx對php的支持
??? (1)重新啟動nginx:
????? $/etc/init.d/nginx restart
??? (2)啟動fastcgi:
????? $spawn-fcgi -a 127.0.0.1 -p 9000 -c 10 -u www-data -f /usr/bin/php-cgi
????? spawn-fcgi啟動出現錯誤時,查看php-cgi是否安裝,如果么有的話,安裝php5-cgi。
????? $sudo apt-get install php5-cgi
??? (3)測試
?????? 打開http://localhost/phpinfo.php
4.nginx配置
???? nginx的配置文件是/etc/nginx/nginx.conf,其中設置了一些必要的參數,我們發現其中這樣的語句:
???? include /etc/nginx/sites-enabled/*
???? 可以看出/etc/nginx/sites-enabled/default文件也是一個核心的配置文件,其中包含了主要的配置信息,
如服務器跟目錄、服務器名稱、location信息和server信息。
???? 對于源代碼安裝的nginx,配置文件為/usr/local/nginx/conf/nginx.conf。
??? 下面主要說明location的匹配規則:
?? (1)= 前綴的指令嚴格匹配這個查詢。如果找到,停止搜索。
?? (2)剩下的常規字符串,最長的匹配優先使用。如果這個匹配使用 ^~ 前綴,搜索停止。
?? (3)正則表達式,按配置文件里的順序,第一個匹配的被使用。
?? (4)如果第三步產生匹配,則使用這個結果。否則使用第二步的匹配結果。
??? 在location中可以使用常規字符串和正則表達式。
??? 如果使用正則表達式,你必須使用以下規則:
?????? (1)~* 前綴選擇不區分大小寫的匹配
?????? (2)~? 選擇區分大小寫的匹配
??? 例子:
???? location = / {
# 只匹配 / 查詢。
[ configuration a ]
???? }
location / {
# 匹配任何查詢,因為所有請求都以 / 開頭。
??????????? # 但是正則表達式規則和長的塊規則將被優先和查詢匹配。
[ configuration b ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 開頭的任何查詢并且停止搜索。
?????????? # 任何正則表達式將不會被測試。
[ configuration c ]
}
location ~* .(gif|jpg|jpeg)$ {
?????????? # 匹配任何以 gif、jpg 或 jpeg 結尾的請求。
????????? # 然而所有 /images/ 目錄的請求將使用 configuration c。
? [ configuration d ]
}