初手必看之Nginx詳細介紹

火星人 @ 2014-03-09 , reply:0
←手機掃碼閱讀

此文對於那些對Nginx了解甚多的大牛則沒必要看下去了,反正你懂的!囧~(*^__^*)

對於Nginx是什麼東西我就不說了,請谷歌、百度之......這篇文章是我花了很多時間,通過看書(誰寫的書我都不想提及了,搜索下就有了)、以及藉助Nginx官網和網上很多牛人的的文章、參閱個別專業性較強的論壇(像守住兄和幾個兄弟搞起來的linuxtone)最終整理出來的筆記.鑒於索取和奉獻的理念,如下分享整個適應於初手參閱的Nginx詳細介紹筆記:

1、Nginx介紹

2、Nginx安裝與啟用

3、Nginx的基本配置與優化

4、Nginx與PHP(FastCGI)的安裝、配置與優化

************************************************

一、Nginx介紹:

Nginx是一款高性能的HTTP和反向代理伺服器,能夠選擇高效的epoll(linux2.6內核)、kqueue(freebsd)、eventport(solaris10)作為網路I/O模型,能夠支持高達50000個併發連接數的響應,而內存、CPU等系統資源消耗卻非常低、運行非常穩定.

2008年12月:Nginx市場佔有量為3354329、佔有率為1.80%

1、選擇Nginx的理由
1.1 支持高併發連接
通過top命令可以查看系統負載和CPU使用率


apache採用的是select網路I/O模型,處理大量連續的讀寫很低效
1.2 內存消耗少
在伺服器3W併發連接下,開啟10個Nginx進程消耗150MB內存(15MB*10),開啟64個php-cgi進程消耗128MB內存(20MB*64),共消耗不到2GB內存,可以使用webbench做壓力測試,運行依舊很快.
1.3 成本低廉
購買F5 BIG-IP、NetScaler等負載均衡交換機需要幾十萬RMB,而開源Nginx替代這些商業設備.
1.4 其他理由
網路配置簡單,對比apache就知道了
支持rewrite重寫規則,能夠根據域名、URL的不同、將HTTP請求分到不同的後端伺服器群組
內置的健康檢查功能
節省帶寬,支持GZIP壓縮,可以添加瀏覽器本地緩存的Header頭
支持熱部署,能夠在不間斷服務的情況下、對軟體版本進行升級

結論:Nginx在反向代理、rewrite規則、穩定性、靜態文件處理、內存消耗等方面都表現出很強的優勢.

二、Nginx安裝與啟用
Nginx伺服器的安裝與配置
http://www.nginx.net/
最新穩定版nginx-1.0.0

linux系統得安裝有GCC編譯器,再者還有autoconf和automake工具用於自動創建功能完善的makefile,Nginx也是用這一工具生成makefile的.
用yum命令安裝GCC和autoconf和automake工具:
yum install gcc gcc-c autoconf automake -y

Nginx的一些模塊需要其他第三方庫的支持,例如gzip模塊需要zlib庫、rewrite模塊需要pcre庫 、ssl功能需要openssl庫等.同樣可以使用Yum安裝這些模塊依賴的庫:


yum install zlib zlib-devel openssl openssl-devel pcre pcre-devel
(當然最好使用最新版本源碼包安裝,像系統ISO文件裡頭自帶的pcre庫就相對舊些)

1、安裝Nginx
1.1 安裝Nginx所需要的pcre庫、才得以支持rewrite
tar zxvf pcre-8.02.tar.gz
cd pcre-8.02
./configure
make && make install
1.2 安裝Nginx
tar zxvf nginx-1.0.0.tar.gz
cd nginx-1.0.0
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install
--->
Configuration summary
using system PCRE library
using system OpenSSL library
md5: using OpenSSL library
using system zlib library


2、啟動Nginx
# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
查看進程:
# ps -ef |grep nginx
root 11659 1 0 14:13 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody 11660 11659 0 14:13 ? 00:00:00 nginx: worker process
查看埠號:
# netstat -antup |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11659/nginx.conf
從上面可以看到Nginx啟用一個主進程和一個子進程,我們可以修改nginx.conf裡頭的
worker_processes運行多個子進程.

3、停止Nginx
當Nginx服務啟動起來后,就會在原本空目錄/usr/local/nginx/logs/下自動生成3個文件:
access.log error.log nginx.pid
這裡包含nginx的主進程號:nginx.pid ,我們可以通過如上的ps命令查看、也可以直接cat出來
3.1 從容停止Nginx
kill -QUIT Nginx主進程號


# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid`
3.2 快速停止Nginx
kill -TERM Nginx主進程號
# kill -TERM `cat /usr/local/nginx/logs/nginx.pid`

4、重啟Nginx
如果改變了Nginx的主配置文件,想重啟Nginx,可以先檢查Nginx的配置文件是否正確后才發送系統信號給Nginx主進程的方式進行,檢查方法如下:
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
只有出現如上OK信息才會載入新的配置文件.
4.1 平滑重啟Nginx
kill -HUP Nginx主進程號
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
如果Nginx本身都還沒啟動,平滑重啟可是會報錯的.

5、Nginx的信號控制
TERM,INT 快速關閉
QUIT 從容關閉
HUP 平滑重啟
USR1 重新打開日誌文件、在切割日誌時用途大
USR2 平滑升級可執行程序
WINCH 從容關閉工作進程

三、Nginx的基本配置與優化

看Nginx的主配置文件,可以發現原本的配置文件非常簡練

  1. # grep -v "#" nginx.conf
  2. worker_processes 1;
  3. events {
  4. worker_connections 1024;
  5. }
  6. http {
  7. include mime.types;
  8. default_type application/octet-stream;
  9. sendfile on;
  10. keepalive_timeout 65;
  11. server {
  12. listen 80;
  13. server_name localhost;
  14. location / {
  15. root html;
  16. index index.html index.htm;
  17. }
  18. error_page 500 502 503 504 /50x.html;
  19. location = /50x.html {
  20. root html;
  21. }
  22. }
  23. }

1、配置虛擬主機
1.1、配置基於IP的虛擬主機
添加虛擬網卡:

ifconfig eth0:1 110.65.99.209 broadcast 110.65.99.255 netmask 255.255.252.0 up
route add -host 110.65.99.209 dev eth0:1
ifconfig eth0:2 110.65.99.210 broadcast 110.65.99.255 netmask 255.255.252.0 up
route add -host 110.65.99.210 dev eth0:2
如上命令最好寫進/etc/rc.local中系統開機自動創建.
或者直接cp ifcfg-eth0 ifcfg-eth0:1

修改Nginx的主配置文件: /usr/local/nginx/conf/nginx.conf
在原本定義的一個server之後添加如下兩個虛擬主機

  1. ###############server2################################
  2. server {
  3. listen 110.65.99.209:80;
  4. server_name server2;
  5. access_log logs/server2.access.log combined;

  6. location / {
  7. index index.html index.htm;
  8. root /usr/local/nginx/server2;
  9. }
  10. }
  11. ###############server3################################
  12. server {
  13. listen 110.65.99.210:80;
  14. server_name server3;
  15. access_log logs/server3.access.log combined;
  16. location / {
  17. index index.html index.htm;
  18. root /usr/local/nginx/server3;
  19. }
  20. }

然後創建目錄server2和server3,並且在各自目錄下創建index.html測試文件
檢查配置文件是否寫正確,然後才平滑重啟Nginx
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
測試:
# links
http://110.65.99.209
# links
http://110.65.99.210
測試后在/usr/local/nginx/logs目錄下會自動創建Log日誌文件
server2.access.log server3.access.log
# cat server2.access.log
110.65.99.209 - - [21/Apr/2011:22:34:11 0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
# cat server3.access.log
110.65.99.210 - - [21/Apr/2011:22:34:24 0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"


1.2、配置基於域名的虛擬主機
接著如上的配置在server3下面添加如下兩個虛擬主機

  1. ###############server4################################
  2. server {
  3. listen 80;
  4. server_name server4.com;
  5. access_log logs/server4.access.log combined;
  6. location / {
  7. index index.html index.htm;
  8. root /usr/local/nginx/server4;
  9. }
  10. }
  11. ###############server5################################
  12. server {
  13. listen 80;
  14. server_name server5.com;
  15. access_log logs/server5.access.log combined;
  16. location / {
  17. index index.html index.htm;
  18. root /usr/local/nginx/server5;
  19. }
  20. }

然後創建目錄server4和server5,並且在各自目錄下創建index.html測試文件
檢查配置文件是否寫正確,然後才平滑重啟Nginx
# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
為了讓系統直接緩存域名解析,在/etc/hosts後面追加如下內容(110.65.99.208是eth0-IP):
110.65.99.208 server5.com
110.65.99.208 server4.com


測試:
# links http://server4.com
# links
http://server5.com
測試后在/usr/local/nginx/logs目錄下會自動創建Log日誌文件
# cat server4.access.log
110.65.99.208 - - [21/Apr/2011:22:41:46 0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"
# cat server5.access.log
110.65.99.208 - - [21/Apr/2011:22:40:56 0800] "GET / HTTP/1.1" 200 8 "-" "ELinks/0.11.1 (textmode; Linux; 142x38-2)"

2、Nginx的日誌文件配置與切割
如上的日誌文件內容是有一定的指令定義的,在Nginx的主配置文件中是通過
log_format指令來設置日誌格式:

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

如上指令的解析:
$remote_addr用戶獲取客戶端的IP地址,但如果前端使用了反向代理,則獲取到的是反向代理伺服器的IP地址
$http_x_forwarded_for"則可以反向代理伺服器轉發請求的HTTP頭信息來記錄客戶端IP
$request用於記錄請求的URL和HTTP協議
$time_local用於記錄訪問時間與時區
$status用於記錄請求狀態,成功時狀態為200,頁面找到時狀態為404
$body_bytes_sent用於記錄發送給客戶端的文件主體內容大小
$http_user_agent用於記錄客戶端瀏覽器的相關信息


$http_referer用於記錄是從哪個頁面鏈接訪問過來的

上面指定好了日誌格式后就要定義日誌存放的路徑了,access_log指令用於指定日誌存放的路徑
如果說不想記錄日誌,則直接
access_log off;
如果使用如下定義的日誌格式存儲日誌,則可以通過
access_log logs/access.log main;
表示採用main的日誌格式,記錄在/usr/local/nginx/logs/access.log文件中
(如果把日誌存儲路徑定義在其他地方,要確保Nginx進程設置的用戶和組對該目錄有讀寫許可權,否則該日誌文件就無法生成了)

對於生產系統下的server,巨大的訪問量會導致日誌文件的增加非常快,日誌太大會影響server的效率,同時為了方便對日誌進行分析計算,需要對日誌文件做定時切割,這裡使用按天計算切割.
先前的文檔提及過kill -USR1的作用時重新打開日誌文件,這樣我們就可以先對舊的日誌文件重命名,通過kill -USR1重新生成access.log文件.藉助crontab進行按天切割的計劃任務.
如下通過一個shell腳本進行日誌切割:

  1. #!/bin/bash
  2. logs_path1="/usr/local/nginx/oldlog"
  3. logs_path2="/usr/local/nginx/logs"
  4. mkdir -p $logs_path1
  5. time=`date %Y%m%d`
  6. mv ${logs_path2}/access.log ${logs_path1}/$time.access.log
  7. kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

  8. 通過crontab計劃任務實現每天凌晨3點做一次日誌切割
  9. # chmod x /usr/local/nginx/log.sh
  10. # crontab -l
  11. * 3 * * * /usr/local/nginx/log.sh


3、Nginx的壓縮輸出配置與自動列目錄配置
3.1、Nginx的壓縮輸出配置
gzip(GNU-ZIP)是一種壓縮技術,通過gzip壓縮后的頁面可以變為原來的30%,用戶瀏覽頁面的時候速度會快很多,gzip的壓縮需要browser和server都支持.其過程是server端進行gzip壓縮,browser端解壓並解析.目前大多數browser都支持gzip過的頁面,如IE、firefox、chrome.
Nginx的壓縮輸出由一組gzip指令來實現,默認的Nginx配置文件僅僅為
gzip on;
這麼個簡單的指令,我們需要參考gzip模塊相關介紹,實現gzip的具體壓縮功能
如下:
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_vary on;
3.2、 Nginx的自動列目錄配置
當指定目錄下不存在index指令設置的默認首頁文件,當訪問該頁面的時候會出現403 Forbidden
的信息,可以通過在Nginx的主配置文件中的location / {......}目錄控制中配置自動列目錄,如下代碼:
location / {
autoindex on;
}
這樣就可以訪問頁面顯示出該目錄下的文件或目錄,而不是403 Forbidden信息.
3.3、 Nginx的瀏覽器本地緩存設置
browser caching是為了加速瀏覽,在用戶磁碟上對最近請求過的文檔進行存儲.當訪問者再次請求這個頁面的時候,browser就可以直接從本地磁碟顯示文檔,從而加速頁面的閱覽,最終到達節約網路資源.
browser caching通過expires指令輸出header頭來實現,該指令語法如下:


語法:expires [time|epoch|max|off]
默認值: expires off
作用域: http ,server ,location
假設一個html頁面會引用到一些javascript文件、圖片文件,而這些格式的文件很少會被修改,則可以通過expires設置browser caching
eg:對常見格式的圖片、flash文件在瀏覽器本地緩存30天,對Js、css文件在本地緩存1個小時:
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*.(js|css)?$
{
expires 1h;
}

四、Nginx與PHP(FastCGI)的安裝、配置與優化

CGI全稱是“公共網關介面”(Common Gateway Interface),HTTP伺服器與你的或其它機器上的程序進行“交談”的一種工具,其程序須運行在網路伺服器上.
FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內存中並因此獲得較高的性能.眾所周知,CGI解釋器的反覆載入是CGI性能低下的主要原因,如果CGI解釋器保持在內存中並接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性、Fail- Over特性等等.

FastCGI的工作原理(摘自百度百科)
1、web server(Nginx)啟動時載入FastCGI進程管理器
2、FastCGI進程管理器自身初始化,啟動多個CGI解釋器進程(可見多個php-cgi)並等待來自web server的連接
3、當客戶端請求到達web server時,FastCGI進程管理器選擇並連接到一個CGI解釋器.web server將CGI環境變數和標準輸入發送到FastCGI子進程php-cgi
4、FastCGI子進程完成處理后將標準輸出和錯誤信息從同一個連接返回web server,當FastCGI子進程關閉連接時,請求便高處理完成.FastCGI子進程接著等待並處理來自FastCGI進程管理器的下一個連接.

,如果是使用CGI技術的話,每一個Web請求PHP都重新解析php.ini、重新載入全部擴展並重初始化全部數據結構.使用FastCGI,所有這些都只在進程啟動時發生一次.然而不足之處在於FastCGI比CGI消耗更多的系統內存,FastCGI是多進程的,CGI是多線程的.

1、安裝PHP所需庫(FastCGI模式)
1.1、 編譯安裝PHP所需的支持庫

1>libiconv
GNU的libiconv是為nicode和其他的傳統編碼兩種應用設計的編碼轉換庫
http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1
./configure --prefix=/usr/local/
make && make install

2>libmcrypt
Libmcrypt is a library which provides a uniform interface to several symmetric encryption algorithms. It is intended to have a simple interface to access encryption algorithms in ofb, cbc, cfb, and ecb modes. The algorithms it supports are DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER , and more. The algorithms and modes are also modular so you can add and remove them on the fly without recompiling the library.
主要功能用於加密解密
http://down1.chinaunix.net/distfiles/libmcrypt-2.5.7.tar.gz
tar zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure
make && make install


/sbin/ldconfig #ldconfig通常在系統啟動時運行,當用戶安裝了一個新的動態鏈接庫時,就需要手工運行這個命令
cd libltdl/
./configure --enable-ltdl-install
make && make install

3>mhash
mhash是哈希函數庫,比如用來計算消息的校驗碼之類的
http://sourceforge.net/projects/mhash/files/mhash/0.9.9/mhash-0.9.9.tar.gz/download
tar jxvf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9
./configure
make && make install

4>mcrypt
Mcrypt擴展庫可以對數據進行加密和解密
http://code.google.com/p/lcmp/downloads/detail?name=mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz.gz
cd mcrypt-2.6.8
/sbin/ldconfig
./configure
make && make install

5>建立軟連接
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.7 /usr/lib/libmcrypt.so.4.4.7
ln -s /usr/local/lib/libmhash.* /usr/lib/

2、安裝mysql
http://www.mysql.com/downloads/mysql/5.1.html#downloads


選擇下拉“source code”一個
useradd mysql
tar zxvf mysql-5.1.56.tar.gz
cd mysql-5.1.56
./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=innobase
make && make install
cp support-files/my-medium.cnf /etc/my.cnf
cd /usr/local/mysql/
bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var/
chgrp -R mysql .
bin/mysqld_safe --user=mysql &
ln -s /usr/local/mysql/bin/* /usr/bin/
mysqladmin -uroot password 123456
mysql -uroot -p123456
mysql> GRANT ALL PRIVILEGES ON *.* TO
'admin'@'localhost' IDENTIFIED BY '123456';


3、安裝PHP
1、編譯安裝PHP(FastCGI模式)
tar zxvf php-5.2.17.tar.gz
gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1 //打補丁
cd php-5.2.17
./configure --prefix=/usr/local/php --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --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-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap --without-pear --with-mysql=/usr/local/mysql/
make ZEND_EXTRA_LTBS='-liconv'
在執行編譯的時候,這裡遇到一個error:


xxx:undefined reference to `libiconv_open'
xxx: undefined reference to `libiconv'
xxx: undefined reference to `libiconv_close'
解決辦法是:
編輯Makefile
EXTRA_LIBS = -lcrypt ...
添加-liconv
然後重新編譯
make ZEND_EXTRA_LTBS='-liconv'
make install
cp php.ini-dist /usr/local/php/etc/php.ini
cp php.ini-dist /usr/local/lib/php.ini

4、編譯安裝php5擴展模塊
1>memcache
Memcache是一個高性能的分散式的內存對象緩存系統,通過在內存里維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及資料庫檢索的結果等.
它可以應對任意多個連接,使用非阻塞的網路IO.它的工作機制是在內存中開闢一塊空間,然後建立一個HashTable,Memcached自管理這些HashTable.
php中的所講的memcache是PHP的一個擴展,是一個客戶端,用於連接memcached.
http://pecl.php.net/get/memcache-2.2.6.tgz
tar zxvf memcache-2.2.6.tgz
cd memcache-2.2.6
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

2>eaccelerator
eAccelerator是一個自由開放源碼php加速器,優化和動態內容緩存,提高了php腳本的緩存性能,PHP腳本在編譯的狀態下,對伺服器的開銷幾乎完全消除. 它還有對腳本起優化作用,以加快其執行效率.使PHP程序代碼執效率能提高1-10倍;
http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2


tar jxvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
/usr/local/php/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config
make && make install

3>PDO_MYSQL
PDO_MYSQL is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to MySQL 3.x, 4.x and 5.x databases.
http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz
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

4>ImageMagick
ImageMagick是一套功能強大、穩定免費的工具集和開發包,可以用來讀、寫和處理超過89種基本格式的圖片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式.利用ImageMagick,你可以根據web應用程序的需要動態生成圖片, 還可以對一個(或一組)圖片進行改變大小、旋轉、銳化、減色或增加特效等操作,並將操作的結果以相同格式或其它格式保存.
ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar zxvf ImageMagick-6.6.5-10.tar.gz
cd ImageMagick-6.6.5-10
./configure
make && make install

5>imagick


imagick 是PHP的一個擴展程序,它是默認的GD圖象函數庫的絕佳替代方案.面向對象的PHP編程使用非常方便.
imagick 默認並沒有在PHP的安裝包里,需要去PHP網站上下載,並在PHP.INI中打開此擴展.
http://pecl.php.net/get/imagick-3.0.1.tgz 或者
http://pecl.php.net/get/imagick-3.0.0.tgz
tar zxvf imagick-3.0.0.tgz
cd imagick-3.0.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

6>修改php.ini文件,配置eaccelerator加速PHP
1、查找/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
2、創建目錄/usr/local/eaccelerator_cache
mkdir /usr/local/eaccelerator_cache
修改/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"


5、配置啟用php-cgi
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www
修改php-fpm配置文件(php-fpm是為PHP打的一個FastCGI管理補丁),可以實現平滑變更php.ini配置而無需重啟php-cgi
vim /usr/local/php/etc/php-fpm.conf
把兩處nobody修改成www,並且去掉<--!-->這樣的註釋,表示使用www啟用進程php-cgi
然後通過 /usr/local/php/sbin/php-fpm start 來啟用php-cgi.
ps -ef |grep php-cgi 可以查看php-cgi進程


6、配置Nginx支持PHP
修改Nginx的主配置文件/usr/local/nginx/conf/nginx.conf
去掉下面代碼前面的#號:
location ~ .php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
然後在/usr/local/nginx/html目錄下創建index.php文件測試即可

*******************************************

對於Nginx還有很多東西可以整理出來,後續在跟大夥分享分享.

本文出自 「twenty_four」 博客,請務必保留此出處http://twentyfour.blog.51cto.com/945260/568906





[火星人 via ] 初手必看之Nginx詳細介紹已經有360次圍觀

http://www.coctec.com/docs/linux/show-post-48667.html