nginx 安裝詳解

Nginx網站服務

Nginx是一個高性能的 HTTP 反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服

nginx相對於apache的優點:

  • 輕量級,比apache 佔用更少的內存及資源

  • 抗併發,nginx 處理請求是異步非阻塞的,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能

  • Nginx 是一個安裝非常的簡單 , 配置文件非常簡潔(支持perl語法), Bugs 非常少的服務器:

  • Nginx 配置簡潔, Apache 複雜

  • Nginx 靜態處理性能比 Apache

  • nginx處理靜態文件好,耗費內存少

  • nginx的負載能力比apache高很多。

  • Nginx優於apache的主要兩點:1.Nginx本身就是一個反向代理服務器 2.Nginx支持7層負載均衡;Nginx可能會

  • apache支持更高的併發

  • nginx,配置文件簡潔,正則配置讓很多事情變得簡單運行效率高,佔用資源少,代理功能強大,很適合做前端響應服務器Nginx併發性比較好,CPU內存佔用低


apache 相對於nginx 的優點:

  • rewrite ,比nginx rewrite 強大

  • Apache在處理動態有優勢;

  • 一般來說,需要性能的web 服務,用nginx 。如果不需要性能只求穩定,那就apache

  • 作爲 Web 服務器:相比 ApacheNginx 使用更少的資源,支持更多的併發連接,體現更高的效率,在高連接併發的情況下,NginxApache服務器不錯的替代品:

  • Apache PHP 支持比較簡單,Nginx 需要配合其他後端用

  • Apache 的組件比 Nginx

  • apache是同步多進程模型,一個連接對應一個進程;nginx是異步的,多個連接可以對應一個進程

  • nginx處理動態請求的能力較弱,一般動態請求要apache去做,nginx只適合靜態和反向。

  • 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的安裝順利完成。

[root@nginx ~]# yum -y install pcre-devel zlib-devel

2)創建運行用戶、組:

Nginx服務程序默認以nobody身份運行,建議爲其創建專門的用戶賬號,以便更準確地控制其訪問權限,增加靈活性、降低安全風險。

如:創建一個名爲nginx的用戶,不建立宿主目錄,也禁止登錄到shell環境。

[root@nginx ~]# useradd -M -s /sbin/nologin nginx

3)編譯安裝nginx

釋放nginx源碼包

[root@nginx ~]# tar zfxv nginx-1.0.8.tar.gz

編譯前配置:

[root@nginx ~]# cd nginx-1.0.8

[root@nginx nginx-1.0.8]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

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

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

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

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

編譯安裝:

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

[root@nginx nginx-1.0.8]# ln -s /usr/local/nginx/sbin/nginx/usr/local/sbin/

[root@nginx nginx-1.0.8]# ls -l /usr/local/sbin/nginx

Nginx的運行控制:

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

[root@nginx ~]# nginx -t

啓動、停止Nginx

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

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

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

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

停止Nginx服務:

#Killall  -9  nginx

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

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

腳本內容如下:

#!/bin/bash

# chkconfig: 2345 99 20

# description: Nginx Service Control Script

PROG="/usr/local/nginx/sbin/nginx"

PIDF="/usr/local/nginx/logs/nginx.pid"

case "$1" in

start)

$PROG -t &> /dev/null

if [ $? -eq 0 ]

then

$PROG

echo "Nginx service start success."

else

$PROG -t

fi

;;

stop)

kill -s QUIT $(cat $PIDF)

echo "Nginx service stop success."

;;

restart)

$0 stop

$0 start

;;

reload)

$PROG -t &> /dev/null

if [ $? -eq 0 ]

then

kill -s HUP $(cat $PIDF)

echo "reload Nginx config success."

else

$PROG -t

fi

;;

*)

echo "Usage: $0 {start|stop|restart|reload}"

exit 1

esac

截圖如下:

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

添加爲系統服務。

[root@nginx ~]# chmod +x /etc/init.d/nginx

[root@nginx ~]# chkconfig --add nginx

這樣一來,就可以通過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 00000001 00000010;        //爲每個進程分配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_connections 4096;        //每個進程允許的最多連接數(默認爲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_formatmain'$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

#設定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.log main;

error_page 500 502 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{}子配置內添加如下配置項:


[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf

   location /status {

   stub_status on;

   access_log off;

   auth_basic "Nginx status";

   auth_basic_user_file /usr/local/nginx/.htpasswd;

}

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

stub_statuson                         //打開狀態統計功能

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

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

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

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

新的配置生效後,在瀏覽器中訪問Nginx服務器的/tongji網站位置(http://web服務器IP/status)可以看到狀態統計信息


如上圖所示:其中”Active connections”表示當前的活動連接數;而"server accepts handled requests”表示已經處理的連接信息,三個數字依次表示已處理的連接數、成功的TCP握手次數、已處理的請求數.

客戶端訪問控制:

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

再檢查其他規則。

2)虛擬主機:

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

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

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

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

[root@nginx ~]# mkdir -p /var/www/benet

[root@nginx ~]# echo "www.benet.com" > /var/www/benet/index.html

[root@nginx ~]# mkdir -p /var/www/accp

/www/accp[root@nginx ~]# echo "www.accp.com" > /var/www/accp/index.html

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

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

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

server {

listen 80;

server_name www.benet.com benet.com;

charset utf-8;

access_log logs/benet.access.log main;

location / {

root /var/www/benet;

index index.html index.php;

}

}

server {

listen 80;

server_name www.accp.com accp.com;

charset utf-8;

access_log logs/accp.access.log main;

location / {

root /var/www/accp;

index index.html index.php;

}

}


測試:

使用瀏覽器分別通過www.benet.comwww.accp.com訪問兩個WEB站點(注意域名解析。)

使用瀏覽器分別通過www.benet.comwww.accp.com訪問兩個WEB站點(注意域名解析。)

測試成功。

下接http://wenzhongxiang.blog.51cto.com/6370734/1251583,是Nginx的延伸。



本文出自 “聽聞” 博客,請務必保留此出處http://wenzhongxiang.blog.51cto.com/6370734/1251063


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