??? nginx安裝方法:
??? 1 apt網絡安裝
?????? 修改源列表
vi?/etc/apt/sources.list #加入以下源 deb?http://nginx.org/packages/debian/?squeeze?nginx deb-src?http://nginx.org/packages/debian/?squeeze?nginx
??????? 更新源列表并通過apt安裝nginx
apt-key?add?nginx_signing.key apt-get?update apt-get?install?nginx
??? 2 源碼編譯安裝
?????? 先安裝編譯環境, 由于nginx在以后的使用中會需要用到perl正則、壓縮算法、ssl等特性,所以我們需要提前安裝相關庫文件。
立即學習“PHP免費學習筆記(深入)”;
apt-get?install?build-essential? apt-get?install?libpcre3?libpcre3-dev?zlib1g?zlib1g-dev?openssl?libssl-dev?libssl0.9.8
??????? 下載最新的穩定版nginx
wget http://nginx.org/download/nginx-1.2.3.tar.gz
??????? 解壓查看編譯選項
tar?zxvf?nginx-1.2.3.tar.gz cd?nginx-1.2.3 #--help可以看到可以配置的參數 ./configure?--help
?????? 查看編譯可選的配置參數(以下只是一些常用的配置項):
?????
–prefix=path????????????????????? nginx的默認安裝路徑,沒有指定的話。默認為/usr/local/nginx
–sbin-path=path??????????????? nginx可執行命令文件的路徑,沒有指定的話,默認
??? 結果如下圖:
? 編譯并安裝
make?&&?make?install
???? ps:fastcgi回顧
???? fastcgi是一個可伸縮地、高速地在http server和動態腳本語言間通信的接口。多數流行的http server都支持fastcgi,包括apache、nginx和lighttpd等,同時,fastcgi也被許多腳本語言所支持,其中就有php。fastcgi是從cgi發展改進而來的。傳統cgi接口方式的主要缺點是性能很差,因為每次http服務器遇到動態程序時都需要重新啟動腳本解析器來執行解析,然后結果被返回給http服務器。這在處理高并發訪問時,幾乎是不可用的。另外傳統的cgi接口方式安全性也很差,現在已經很少被使用了。fastcgi接口方式采用c/s結構,可以將http服務器和腳本解析服務器分開,同時在腳本解析服務器上啟動一個或者多個腳本解析守護進程。當http服務器每次遇到動態程序時,可以將其直接交付給fastcgi進程來執行,然后將得到的結果返回給瀏覽器。這種方式可以讓http服務器專一地處理靜態請求或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。
??? nginx不支持對外部程序的直接解析,所有的外部程序(包括php)必須通過fastcgi接口來調用。fastcgi接口在linux下是socket,(這個socket可以是文件socket,也可以是ip socket)。為了調用cgi程序,還需要一個fastcgi的wrapper(wrapper可以理解為用于啟動另一個程序的程序),這個wrapper綁定在某個固定socket上,如端口或者文件socket。當nginx將cgi請求發送給這個socket的時候,通過fastcgi接口,wrapper接納到請求,然后派生出一個新的線程,這個線程調用解釋器或者外部程序處理腳本并讀取返回數據;接著,wrapper再將返回的數據通過fastcgi接口,沿著固定的socket傳遞給nginx;最后,nginx將返回的數據發送給客戶端,這就是nginx+fastcgi的整個運作過程。
php-fpm
php5.3版本源碼已經默認支持php-fpm了,但是debian6認為它還沒經過廣泛的測試,所以在debian6的軟件倉庫中,雖然php版本為5.3.3,但是卻沒包含php-fpm,如果不想手工編譯安裝php的話可以換一個源。
????
???? 修改源列表
vi?/etc/apt/sources.list deb?http://packages.dotdeb.org?stable?all deb-src?http://packages.dotdeb.org?stable?all
??? 更新源列表,安裝php5-fpm
apt-get?update?wget?http://www.dotdeb.org/dotdeb.gpg cat?dotdeb.gpg?|?apt-key?add?- apt-get?install?php5-fpm
??? 安裝其他常用php5組件
apt-get?install?php5?php5-cgi?php5-cli?php5-mysql?php5-memcache
??? 啟動php-fpm
/etc/init.d/php5-fpm?start
??? 這樣的話最基本的nginx+php環境就搭建完畢了。???
nginx配置文件粗解
nginx的配置文件結構類似下圖這樣的結構:
配置文件主要參照編譯完成后生成的默認配置文件。
?? 主模塊的配置選項
??? user指令設置進程以什么用戶運行,在源碼編譯安裝時指定的nginx用戶,如果在編譯時沒有指定,默認是nobody賬戶,在配置文件中此行處于注釋狀態,? user 指令可以設置兩個參數,第一個指定進程所屬用戶,第二個是可選,指定進程所屬組
??user?nginx?nobody;
??? 設置工作進程數,一個工作進程為一個單線程,在cpu密集型環境中,可以設置worker_processes數目為cpu核數
??worker_processes?4;
??? 指定nginx錯誤日志文件的位置,如果要禁止錯誤日志使用error_log /dev/NULL,error_log可以存在于不同的字段main、http、server等,文件后面可以指定記錄的日志的默認等級。
??error_log?logs/error.log;
??? 設置pid文件路徑,可以使用kill命令發送相關信號
??pid????logs/nginx.pid;
??? Event模塊配置選項,event模塊主要控制nginx處理連接的方式
??events?{ ??#如果在configure時指定的不止一個事件模型,可以通過use告訴nginx要使用哪一個模型:seletc、poll、kqueue、epoll、rtsig、/dev/poll、eventport等 ??use?epoll; ??#worker_connections和worker_processes可以計算你的理論最大鏈接數,?worker_connections*worker_processes ??worker_connections?1024; }
??? http模塊里面主要是對http服務器相關屬性進行設置
?http?{ ??#可以用include指令包含一些其他文件,支持通配符,可以使用絕對路徑,也可以使用相對路徑,相對路徑以nginx.conf為根據 ??include????mime.types; ??#設置默認的mime類型 ??default_type?application/octet-stream; ??#描述記錄日志的格式,在定義格式時可以使用一些變量,各個變了的含義可以從各個模塊匯總查找 ??log_format?main?'$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?main; ??#sendfile拷貝文件在內核態完成,更加高效 ??sendfile????on; ??#tcp_nopush???on; ??#可以設置兩個值,第一個表示客戶端與服務器長連接的超時時間,超過這個時間,服務器將關閉連接。第二個值指定的應答頭中keep-alive中timeout的值,讓瀏覽器知道什么時候關閉連接。 ??keepalive_timeout?65; ??#開啟gzip壓縮 ??gzip?on; ??#在三次握手時,發送給客戶端應答后的超時時間,目前還沒進入連接狀態,只完成了兩次握手,如果在規定時間沒收到應答包,nginx將關閉鏈接 ??send_timeout?30 ??server?{ ?????xxx ??} }
??? server模塊嵌在http模塊中,主要用來配置虛擬主機
??server?{ ????#指定server字段中可以被訪問到的ip地址及端口 ????listen????80; ????#將http請求的主機頭與server中的server_name參數進行匹配,并找出第一個結果,如果沒有server_name參數匹配上,則第一個出現listen的server將被匹配,多域名用空格分割 ????server_name?www.nginx.com; ????#設個指令是應答頭重的content-type字段使用指定的編碼集,off表示不在應答頭重添加content-type信息 ????charset?off; ????#指定www.nginx.com域名的訪問日志路徑及格式 ????access_log?logs/host.access.log?main; ????#如果在url中沒有指定文件,則設置一個默認主頁,可以設置多個文件,空格分開,可以在http、server、location中設置 ????index?index.php?index.htm; ????#根據url的不同需求進行配置,可以使用字符串和正則匹配,最確切的匹配被使用,搜索到第一個后會停止 ????#?~*?不區分大小寫;~?區分大小寫;^~?禁止在字符串匹配后檢查正則;=?在url和location之間精確匹配,匹配完成后不做額外搜索。 ????location?/i/?{ ??????#請求到達后的文件根目錄,在請求中root會把location匹配的值加到root指定的值后面,請求/i/a.php,則會是/html/i/a.php響應 ??????root??html; ??????#在location中設置index ??????index?index.html?index.htm; ????} ????#為錯誤代碼指定相應的錯誤界面,可以用在http、server、location字段中。 ????error_page?404???????/404.html; ????#?redirect?server?error?pages?to?the?static?page?/50x.html ????error_page??500?502?503?504?/50x.html; ????#精確匹配50x.html,真實響應是/html/50x.html ????location?=?/50x.html?{ ??????root??html; ????} ????#?proxy?the?php?scripts?to?apache?listening?on?127.0.0.1:80 ????location?~?.php$?{ ??????proxy_pass??http://127.0.0.1; ????} ????#配置php腳本傳至fastcgi ????location?~?.php$?{ ?????root??????html; ?????fastcgi_pass??127.0.0.1:9000; ?????fastcgi_index?index.php; ?????#/scripts是php腳本所在的目錄 ??????fastcgi_param?script_filename?/scripts$fastcgi_script_name; ??????include????fastcgi_params; ????} ????#拒絕訪問.htaccess文件 ????location?~?/.ht?{ ??????deny?all; ????} ??}