Nginx網站服務

一、Nginx網站服務

Nginx (“engine x”) 是一個高性能的 HTTP 反向代理服務器,也是一個IMAP/POP3/SMTP 代理服

1Apache服務器和nginx的優缺點:
我們之前大量使用Apache來作爲HTTPServerApache具有很優秀的性能,而且通過模塊可以提供各種豐富的功能。
1)首先Apache對客戶端的響應是支持併發的,運行httpd這個daemon進程之後,它會同時產生多個子進程/線程,每個子進程/線程分別對客戶端的請求進行響應;

Apache兩種工作模式:prefork模式與worker模式

prefork每個子進程只有一個線程,效率高但消耗內存大,是lunix下默認的模式;worker模式每個子進程有多個線程,內存消耗低,但一個線程崩潰會牽連其它同子進程的線程。
2)另外,Apache可以提供靜態和動態的服務,例如對於PHP的解析不是通過性能較差的CGI實現的而是通過支持PHP的模塊來實現的(通常爲mod_php5,或者叫做apxs2)
3)缺點:
因此通常稱爲Apache的這種Serverprocess-based server,也就是基於多進程的HTTPServer,因爲它需要對每個用戶請求創建一個子進程/線程進行響應;
這樣的缺點是,如果併發的請求非常多(這在大型門戶網站是很常見的)就會需要非常多的線程,從而佔用極多的系統資源CPU和內存。因此對於併發處理不是Apache的強項。
4)解決方法:
目前來說出現了另一種WebServer,在併發方面表現更加優越,叫做asynchronousservers異步服務器。最有名的爲NginxLighttpd。所謂的異步服務器是事件驅動程序模式的event-driven,除了用戶的併發請求通常只需要一個單一的或者幾個線程。因此佔用系統資源就非常少。這幾種又被稱爲lightweight web server。舉例,對於10,000的併發連接請求,nginx可能僅僅使用幾M的內存;而Apache可能需要使用幾百M的內存資源。
使用Apache來作爲HTTPServer的情況我這裏不再多做介紹;上面我們介紹到Apache對於PHP等服務器端腳本的支持是通過自己的模塊來實現的,而且性能優越。
我們同樣可以使用nginx或者lighttpd來作爲HTTPServer來使用。
nginxApache類似都通過各種模塊可以對服務器的功能進行豐富的擴展,同樣都是通過conf配置文件對各種選項進行配置。對於PHP等,nginx沒有內置的模塊來對PHP進行支持,而是通過FastCGI來支持的。
nginx則沒有自己提供處理PHP的功能,需要通過第三方的模塊來提供對PHP進行FastCGI方式的集成。

Nginx(發音enginex)專爲性能優化而開發,其最知名的優點是它的穩定性和低系統資源消耗,以及對HTTP併發連接的高處理能力(單臺物理服務器可支持3000050000個併發請求)。正因爲如此,大量提供社交網站、新聞資訊、電子商務以及虛擬主機等服務的企業紛紛選擇Ngnix來提供WEB服務。

2Nginx的安裝及運行控制:

目前Nginx的最新穩定版本爲1.0.8,開發版本爲1.1.6,其安裝文件可以從官方網站http://www.nginx.org下載,下面以穩定版爲例,介紹nginx的安裝和運行控制。

編譯安裝Nginx

1)安裝支持軟件:

Nginx的配置及運行需要pcrezlib等軟件包的支持,因此應預先安裝這些軟件的開發包(devel),以便提供相應的庫和頭文件,確保Nginx的安裝順利完成。

spacer.gif

2)創建運行用戶、組:

Nginx服務程序默認以nobody身份運行,建議爲其創建專門的用戶賬號,以便更準確地控制其訪問權限,增加靈活性、降低安全風險。如:創建一個名爲nginx的用戶,不建立宿主目錄,也禁止登錄到shell環境。

spacer.gif

3)編譯安裝nginx

釋放nginx源碼包

spacer.gif

編譯前配置:

spacer.gif

spacer.gif

注:配置前可以參考:./configure--help給出說明

--prefix:設定Nginx的安裝目錄

--user—group:指定Nginx運行用戶和組

--with-http_stub_status_module:啓用http_stub_status_module模塊以支持狀態統計

編譯:

spacer.gif

安裝:

spacer.gif

至此Nginx安裝完成,爲了使Nginx服務器的運行更加方便,可以爲主程序nginx創建鏈接文件,以便管理員直接執行nginx命令就可以調用Nginx的主程序。

spacer.gif

Nginx的運行控制:

apache的主程序httpd類似,Nginx的主程序也提供了”-t”選項用來對配置文件進行檢查,以便找出不當或錯誤的配置。配置文件nginx.conf默認位於安裝目錄下的conf/子目錄中。若要檢查位於其他位置的配置文件,可使用”-c”選項來指定路徑。

spacer.gif

啓動、停止Nginx

直接運行nginx即可啓動Nginx服務器,這種方式將使用默認的配置文件,若要改用其他配置文件,需添加”-c配置文件路徑選項來指定路徑。需要注意的是,若服務器中已安裝有httpd等其他WEB服務軟件,應採取措施避免部突。

spacer.gif

通過檢查 Nginx程序的監聽狀態,或者在瀏覽器中訪問此WEB服務(默認頁面將顯示“Welcome tonginx!”),可以確認Nginx服務是否正常運行。

spacer.gif

或使用elinks瀏覽器(需安裝elinks軟件包。yum-y installelinks

spacer.gif

注意:要在防火牆上允許80端口的通信。

停止Nginx服務:

#Killall-9nginx

Nginx進程運行時,PID號默認存放在logs/目錄下的nginx.pid文件中,因此若改用kill命令,也可以根據nginx.pid文件中的PID號來進行控制。

爲了使Nginx服務的啓動、停止、重載等操作更加方便,可以編寫Nginx服務腳本,並使用chkconfigservice工具來進行管理,也更加符合RHEL系統的管理習慣。

spacer.gif

腳本內容如下:

spacer.gif

spacer.gif

注:通過killkillall命令發送HUP信號表示重載配置用新的配置開始新的工作進程
關閉舊的工作進程。QUIT信號表示退出進程,KILL信號表示殺死進程。通過”-s”選項指定信號種類。

添加爲系統服務。

spacer.gif

這樣一來,就可以通過nginx腳本來啓動、停止、重啓、重載Nginx服務器了。

3、配置文件nginx.conf

Nginx服務器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置這三大塊內容,配置語句的格式爲關鍵字值;”(末尾以分號表示結束),以”#”開始的部分表示註釋。

1)全局配置

由各種配置語句組成,不使用特定的界定標記。全局配置部分包括運行用戶、工作進程數、錯誤日誌、PID存放位置等基本設置。

常用配置項:

usernobody;

//運行用戶,Nginx的運行用戶實際是編譯時指定的nginx,若編譯時未指定則默認爲nobody

worker_processes 2;

//指定nginx啓動的工作進程數量,建議按照cpu數目來指定,一般爲它的倍數

worker_cpu_affinity 0000000100000010;

//爲每個進程分配cpu,上例中將2個進程分配到兩個cpu,當然可以寫多個,或者將一個

進程分配到多個cpu

worker_rlimit_nofile 102400;

//這個指令是指當一個nginx進程打開的最多文件數目,理論值應該是最多打開文件數(ulimit 

-n)與nginx進程數相除,但是nginx分配請求並不是那麼均勻,所以最好與ulimit-n的值

保持一致。(通過”ulimit –n 數值可以修改打開的最多文件數目)

error_loglogs/error.log;//全局錯誤日誌文件的位置

pidlogs/nginx.pid;//PID文件的位置

2)I/O事件配置:

使用”events {}”界定標記,用來指定Nginx進程的I/O響應模型,每個進程的連接數等設置

events {

use epool;//使用epool模型,對於2.6以上的內核,建議使用epool模型以提高性能

worker_connections4096;//每個進程允許的最多連接數(默認爲1024),每個進程的連接數應根據實際需要來定,一般在10000以下,理論上每臺nginx服務器的最大連接數爲worker_processes*worker_connections,具體還要看服務器的硬件、帶寬等。

}

3HTTP配置

使用”http{}”界定標記,包括訪問日誌、HTTP端口、網頁目錄、默認字符集、連接保持、以

及虛擬主機、PHP解析等一系列設置。其中大部分配置語句包含在子界定標記”servier {}”內。

http {
#
設定mime類型,即conf/目錄下的mime.types文件中的設定。
includemime.types;
default_type application/octet-stream;
#設定日誌格式
log_format main'$remote_addr - $remote_user[$time_local]'
'"$request" $status$bytes_sent '
'"$http_referer""$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr -$remote_user [$time_local] '
'"$request" $status$bytes_sent '
'"$http_referer""$http_user_agent" '
'"$http_range""$sent_http_content_range"';
#
設定access log
access_log logs/access.log main;
sendfileon;//支持文件發送(下載)
keepalive_timeout 65;//連接保持超時
#設定虛擬主機
server {//
用來配置虛擬主機
listen80; //WEB
服務的監聽設置,可以採用”IP地址:端口”形式
server_name 
www.lnmp.com;//網站名,稱可以寫多個名稱,用空格分隔

location / {//表示如何匹配後面的路徑的
index index.html; //默認首頁

root html;//網頁根目錄位置,默認爲Nginx安裝目錄下的html/子目錄,root語句用來設置特定訪問位置的網頁文檔路徑,根據需要可改爲/var/www/html等其他路徑。

}
charset gb2312;//
網頁的默認字符集
#設定本虛擬主機的訪問日誌
access_log logs/www.lnmp.com.access.logmain;

error_page 500502 503 504/50x.html; //內部錯誤的反饋頁面

location =/50x.html {

root html;

}
}
}

Nginxlocation

基本語法:
location [=|~|~*|^~] /uri/ { … }

=表示做精確匹配
~ :
爲區分大小寫匹配
~*:
爲不區分大小寫匹配
!~ :
!~*分別爲區分大小寫不匹配及不區分大小寫不匹配

正則表達式匹配,其中:
文件及目錄匹配,其中:
-f !-f用來判斷是否存在文件
-d!-d用來判斷是否存在目錄
-e!-e用來判斷是否存在文件或目錄
-x !-x用來判斷文件是否可執行

示例1:

location = / {
只匹配 / 查詢。
}

location/ {

#匹配任何查詢,因爲所有請求都已 / 開頭。但是正則表達式規則將被優先和查詢匹配

}

示例2:

location ^~ /p_w_picpaths/ {
匹配任何以 /p_w_picpaths/ 開頭的任何查詢並且停止搜索。任何正則表達式將不會被測試。
}

示例3:

location ~* \.(gif|jpg|jpeg)$ {
匹配任何以 gifjpg  jpeg 結尾的請求。
}

4、狀態統計及虛擬主機應用:

1)Nginx內置了HTTP_STUB_STATUS狀態統計模塊,用來反饋當前的WEB訪問情況。配置

編譯參數時可添加—with-http_stub_stastus_module來啓用此模塊。要使用Nginx的狀態統計功能,除了啓用內建模塊以外,還需要修改nginx.conf文件,指定訪問位置並打開stub_status配置。在http{}配置的server{}子配置內添加如下配置項

spacer.gif

注:location/tongji//匹配任何包含/tongji的任何查詢

stub_statuson//打開狀態統計功能

Access_logoff//關閉此位置的日誌記錄

Nginx 支持爲目錄添加密碼認證,使用apache  htpasswd 來創建密碼文件

htpasswd-c/usr/local/nginx/.htpasswd 用戶名

保存修改過的nginx.conf文件並重啓nginx服務使修生效。

新的配置生效後,在瀏覽器中訪問Nginx服務器的/tongji網站位置(http://web服務器

IP/tongji)可以看到狀態統計信息

spacer.gif

如上圖所示:其中”Active connections”表示當前的活動連接數;而”server accepts handled

requests”表示已經處理的連接信息,三個數字依次表示已處理的連接數、成功的TCP握手次

數、已處理的請求數.

客戶端訪問控制:

spacer.gif

注:allow 允許規則,deny拒絕規則;規則的執行是按從上向下執行,匹配某條規則後將不

再檢查其他規則。

2)虛擬主機:

使用Nginx搭建虛擬主機服務器時,每個虛擬WEB站點擁有獨立的”server {}”配置段,各自

監聽的IP地址、端口號可以單獨指定,當然網站名稱也是不同的。

例如:要創建兩個站點www.benet.comwww.accp.com

爲兩個虛擬WEB主機分別建立根目錄,並準備測試首頁

spacer.gif

調整nginx.conf配置文件---域名虛擬主機

配置兩個”server {}”區域,分別對應兩個WEB站點,指定各自的網站名稱、監聽地址、網站

根目錄、訪問日誌等信息,然後重載配置

spacer.gif

測試:使用瀏覽器分別通過www.benet.comwww.accp.com訪問兩個WEB站點(注意域

名解析。

5LEMP架構及應用部署:

就像構建LAMP平臺一樣,構建LEMP平臺也需要LINUX服務器、MYSQL數據庫、PHP解析

環境,區別主要在於NginxPHP的協作配置上

1)以編譯方式安裝Nginx(過程參照上面相關介紹完成)

2)安裝MYSQL數據庫----------以編譯方式安裝

釋放MYSQL的源碼包:

spacer.gif

編譯前配置:

spacer.gif

注:--with-charset:指定默認使用的字符集編碼;--with-collation:指定默認使用的字符集校對規則,utf8_general_ci是適用於UTF-8字符集的通用規則;--with-extra-charsets:指定額外支持的其他字符集編碼。

編譯並安裝MYSQL

spacer.gif

優化調整:

spacer.gif

spacer.gif

初始化數據庫:

spacer.gif

spacer.gif

啓動MYSQL服務及爲root用戶設置密碼:

spacer.gif

3)安裝PHP解析環境:

較新版本(如5.3)的PHP已經自帶FPM(fastCGIprocessmanager,FastCGI進程管理器)模塊,用來對PHP解析實例進行管理,優化解析效率,因此在配置PHP編譯選項時應添加”--enable-fpm”以啓用此模塊。

爲了提高PHP解析效率,建議將相應版本的ZendGuardLander也裝上

釋放PHP源碼包:

spacer.gif

編譯前配置:

spacer.gif

注:在RHEL664系統中按上面的配置項配置可能會報以下錯誤,如果要是報錯的話請按如下方法解決:

spacer.gif

解決方法:

根據報錯發現是因爲libpng.solibpng.a找不到,但libpng的相關軟件包我已經安裝了,如下圖查詢結果,發現libpng的包都安裝了。

spacer.gif

那爲什麼還報libpng.solibpng.a找不到呢?

要解決問題就是它沒找到,我安裝了的,那我得去找找看它到底是放那裏去了。執行下列命令,可以查找libpng.so在那裏。

spacer.gif

spacer.gif

通過上面的搜索其實就知道一些原因了,configure一般的搜索編譯路徑爲/usr/lib/,因爲php默認就在/usr/lib/下找相關庫文件,x64機器上是在:/usr/lib64.這時你就可以直接把需要的庫文件從/usr/lib64中拷貝到/usr/lib/中去就可以了

spacer.gif

解決完後重新執行./configure進行編譯前的配置

如果報configure: error: libjpeg.(a|so) not found錯誤解決方法和上面的解決方法類似。具體操作如下:

spacer.gif

spacer.gif

如果報下面錯誤

usr/bin/install:cannot create regular file `/usr/local/man/man1/cjpeg.1': No such file ordirectory
make: *** [install] Error 1
提示找不到目錄。既然電腦找不到,咱們人腦可以找嘛,自己先創建先
mkdir /usr/local/man
mkdir /usr/local/man1 
創建完了再來

類似錯誤很多,方法也很多,我們得靈活應變,具體問題具體分析!

編譯並安裝PHP

spacer.gif

注:

安裝後的調整:

spacer.gif

安裝ZendGuardLander(注:若RHEL664位系統,該軟件得到其官網下載64位的相應軟件包,若用32位的就會報錯。下載地址:http://www.zend.com/en/products/guard/downloads)

spacer.gif

修改php.ini文件:

spacer.gif

php.ini中添加如下配置

spacer.gif

配置Nginx支持PHP環境:

若要讓Nginx能夠解析PHP網頁,有兩種方法可以選擇;其一,充當中介,將訪問PHP頁面的WEB請求轉交給其他服務器(LAMP)去處理;其二,通過使用PHPFPM模塊來調用本機的PHP環境

如果選用FPM方式,則需要先啓動php-fpm進程,以便監聽PHP解析請求。參考範例建立php-fpm.conf配置文件,並修改其中的PID文件、運行用戶、服務數(進程數量)等相關設置,然後啓動php-fpm程序即可(默認監聽本機的9000端口)

spacer.gif

spacer.gif

修改內容如下:

spacer.gif

//確認pid文件位置

spacer.gif

//運行用戶和運行組

spacer.gif

//啓動時開啓的進程數、最少空閒進程數、最多空閒進程數

按以上提示修改php-fpm.conf文件,改完後保存退出。

啓動php-fpm並查看地址監聽。

spacer.gif

php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,對應的實際路徑爲/usr/local/php5/var/run/php-fpm.pid,根據上述信息,可以修改Nginx服務腳本,以便在啓動/停止Nginx服務器時將php-fpm進程也自動啓動/停止。

spacer.gif

nginx服務腳本中添加如下內容:

spacer.gif

這樣一爲,一旦啓動或關閉nginx服務,php-fpm程序也會隨之啓動或關閉,不需要額外再啓動或關閉php-fpm.

4)配置Nginx支持PHP解析:

無論是將PHP頁面交給LAMP服務器去解析,還是調用本機的php-fpm進程進行解析,都需要在”server{}”配置段中添加location設置,以便指定當訪問.php面頁時採取何種操作。

對於第一種方法(轉交給其他WEB服務器處理),使用的配置語句如下所示,例如,交給IP地址爲192.168.0.200LAMP服務器處理,從而實現由Nginx負責靜態頁面,LAMP負責動態頁面的分離效果。

server{

…… //省略部分信息

location~\.php${//訪問.php頁面的配置段

proxy_passhttp://192.168.0.200:80;//APACHE服務器的監聽地址

}

對於第二種方法(調用本機的php-fpm進程),使用的配置語句如下所示。在conf/目錄下的fastcgi.conf文件中已經包含必需的宏設置,可通過include語句添加進來。

server{

…… //省略部分信息

location~\.php$ {//訪問php頁面的配置段

root/var/www/benet;//PHP網頁文檔根目錄

fastcgi_pass127.0.0.1:9000;//php-fpm的監聽地址

fastcgi_indexindex.php;//PHP首頁文件

includefastcgi.conf;//包括fastcgi.conf樣本配置

}

}

本文檔中我選擇的是第二種方法,完成修改後重新加載nginx服務即可生效。

spacer.gif

PHP頁面訪問測試:

PHP文檔根目錄下創建一個測試網頁,以便測試PHP語名能否正常解析,以及能否訪問MYSQL數據庫。測試頁內容如下

spacer.gif

spacer.gif

然後訪測試頁如:http://www.benet.com/test.php若能看到成功提示信息表示一切正常。

5)LEMP平臺中部署WEB應用:

LEMP平臺與LAMP平臺是非常相似的,區別主要在於所用WEB服務軟件的不同,而這與使用PHP開發的WEB應用程序並無太大關係,因此PHP應用的部署方法也是類似的,

下面以“天空網絡電影系統(簡稱SKYUC)”爲例介紹在LEMP平臺中的部署過程。

釋放並部署程序代碼:

spacer.gif

創建數據庫:

spacer.gif

安裝WEB應用:

訪問http://www.benet.com/skyuc/install/index.php,將會打開SKYUC的安裝程序,根據頁面提示,只需三步即可完成安裝。要注意適當調整權限,最簡單方法是:

spacer.gif

完成安裝後,注意將install/目錄轉移,以避免重複安裝,降低安全風險。

spacer.gif

訪問WEB應用系統:

通過訪問http://www.benet.com/skyuc就可以訪問了。

架設Discuz論壇:

建立用於bbs論壇的數據庫及用戶:

spacer.gif

解壓下載的軟件包,上傳程序文件:

spacer.gif

spacer.gif

spacer.gif

在瀏覽器中訪問http://www.benet.com/bbs/install根據嚮導頁面的提示進行安裝

注:請將 php.ini 中的short_open_tag 設置爲 On,然後重啓WEB服務,否則程序無法正常運行,修改後要重啓nginx服務。

通過訪問http://www.benet.com/bbs就可以訪問了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章