初識Nginx 安裝使用筆記(一)

     雖然Apache是整個www服務中中堅力量,可是他也不是萬能的,他也有他的不足。那就是他的 「抗壓」能力相比之下有些不足,當面臨數萬的訪問量的時候,Apacheserver 能作的只有「吃cpu,耗內存」, 而俄羅斯開發的Nginx也是一款不錯的HTTPServer的服務軟件。市場的佔有率也不容忽視。php

最新數據能夠看出,Apache狀態不佳,而微軟和Nginx略有上升的趨勢html

wps_clip_image-12991

wps_clip_image-26247

數據來自http://news.netcraft.com linux

做爲一個技術人員,特別是互聯網方面,給本身注入「新鮮的血液」已是咱們的準則之一。nginx

來講說 Apache和Nginx的區別吧 ,也便於咱們的學習。web

① 首先Apache是支持併發鏈接的,運行httpd這個服務後,就會產生不少的子進程/線程來響應不一樣的客戶端請求。Apache兩種工做模式:是prefork模式與worker模式正則表達式

prefork每一個子進程只有一個線程,效率高但消耗內存大,是linux下默認的模式;worker模式每一個子進程有多個線程,內存消耗低,但一個線程崩潰會牽連其它同子進程的線程。apache

② 另外Apache支持靜態網頁和動態網頁,好比他的PHP就是靠本身所支持的模塊來實現的mod_php5 又被稱爲apxs2。windows

③ 所以Apache是基於多進程的這樣一個HTTPServer,也正是他這樣的特色,註定了Apache在接受大的併發量的時候,無心會佔用大量的cpu和內存資源,而這些並非咱們願意看的。瀏覽器

而Nginx並非基於進程的HTTPServer,是一種異步服務器,「異步」一詞我也沒有很深的瞭解,只知道他能利用極少的硬件資源去響應大量的客戶請求,達到以一當百的效果。好比,對於10,000的併發鏈接請求,nginx可能僅僅使用幾M的內存;而Apache可能須要使用幾百M的內存資源。bash

nginx和Apache相似都經過各類模塊能夠對服務器的功能進行豐富的擴展,一樣都是經過conf配置文件對各類選項進行配置。可是,Nginx雖好,對於PHP等動態網頁,nginx沒有內置的模塊來對PHP進行支持,而是經過FastCGI來支持的。(以上內容參考教學資料)

下面咱們就來搭建Nginx

安裝Nginx和安裝Apache的區別並非很大,這裏我分爲三個步驟

1.獲取軟件包:  其安裝文件能夠從官方網站http://www.nginx.org下載,而且Nginx的windows版本有,很方便。

2.安裝Nginx所須要的依賴包,以及運行的帳戶和組。

3.編譯安裝,並優化路徑

Yum安裝所須要的安裝包

yum  -y  install  pcre-devel  zlib-devel

建立用戶和組  不指定宿主目錄 不容許登錄系統

wps_clip_image-2373

編譯安裝

wps_clip_image-26747

--with-http_stub_start_module: 指定啓用http_stub_start_module這個模塊來支持狀態統計

更多的參數能夠用 ./configure  --help 查看

make && make install 來編譯安裝

安裝完成後 優化路徑

wps_clip_image-12149

使用nginx -t 命令查看配置文件是否有錯誤

wps_clip_image-15337

Nginx安裝完畢

使用命令 nginx啓動服務 使用kill 或者 killall 關閉服務

wps_clip_image-1238

使用kill ,nginx 命令管理服務不是很方便,也不服務linux的風格,因此在這我就手動編寫nginx的系統服務腳本,而且添加到系統服務中

腳本以下:

———————————————————————————————————————

#!/bin/bash

# chkconfig: - 60 50

# processname: nginx

# config: /usr/local/nginx/conf/nginx.conf

nginx_path="/usr/local/nginx"

nginx_pid="/usr/local/nginx/nginx.pid"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginx_path/sbin/nginx ] || exit 0

RETVAL=0

prog="nginx"

start() {

# Start daemons.

if [ -e $nginx_pid -a ! -z $nginx_pid ];then

echo "nginx already running...."

exit 1

fi

if [ -e /usr/local/nginx/conf/nginx.conf ];then

  echo -n $"Starting $prog: "

  $nginx_path/sbin/nginx -c /usr/local/nginx/conf/nginx.conf &

  RETVAL=$?

[ $RETVAL -eq 0 ] && {

touch /var/lock/subsys/$prog

success $"$prog"

}

echo

else

RETVAL=1

fi

return $RETVAL

}

# Stop daemons.

stop() {

        echo -n $"Stopping $prog: "

        killproc -d 10 $nigx_path/sbin/nginx

        RETVAL=$?

        echo

        [ $RETVAL = 0 ] && rm -f $nginx_pid /var/lock/subsys/$prog

}

# See how we were called.

case "$1" in

start)

        start

        ;;

stop)

        stop

        ;;

restart)

        stop

        start

        ;;

status)

        status $prog

        RETVAL=$?

        ;;

*)

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

        exit 1

esac

exit $RETVAL

———————————————————————————————————————

這個腳本只能作到部分的功能,沒有完善。

給予權限並添加到系統服務

wps_clip_image-26591

驗證腳本

wps_clip_image-11075

啓動後可以訪問Nginx的主頁面 應注意防火牆的配置

wps_clip_image-27085

Nginx的主配置文件 nginx.conf

Nginx的主配置文件主要有三部分組成

——全局配置

——I/O事件配置

——HTTP配置

文件中 # 號表示註釋內容  ; 表示結束。

1)全局配置

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

經常使用配置項:

user  nobody;    

//運行用戶,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_log  logs/error.log; //全局錯誤日誌文件的位置

pid  logs/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,具體還要看服務器的硬件、帶寬等。

}

3)HTTP配置

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

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

http {   #設定mime類型,即conf/目錄下的mime.types文件中的設定。   include      mime.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;   sendfile  on;   //支持文件發送(下載)   keepalive_timeout 65;  //鏈接保持超時   #設定虛擬主機   server {                //用來配置虛擬主機      listen  80; //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;

}  }}

Nginx的location 配置:

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

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

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

示例1:

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

location  / {

#匹配任何查詢,由於全部請求都已 / 開頭。可是正則表達式規則和長的塊規則將被優先和查詢匹配

}

示例2:

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

示例3:

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

Nginx的狀態統計:

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

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

wps_clip_image-27003

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

stub_status  on  //打開狀態統計功能

Access_log  off //關閉此位置的日誌記錄

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

wps_clip_image-30782

htpasswd  -c /.htpass 用戶名

wps_clip_image-9091

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

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

IP/status)能夠看到狀態統計信息

驗證

wps_clip_image-22585

wps_clip_image-7922

active connections — 發起的活動鏈接數 1個

server accepts handled requests — nginx 總共處理了 4個鏈接, 成功建立4次握手 (證實中間沒有失敗的), 總共處理了 6 個請求

Nginx的訪問控制:

wps_clip_image-17130

allow 容許規則,deny拒絕規則;

規則的執行是按從上向下執行,匹配某條規則後將再也不檢查其餘規則。

拒絕後顯示 被禁止

wps_clip_image-14988

Nginx的虛擬主機配置:

虛擬主機的概念不用過多的解釋,Apache部分已經作過介紹。就直接作配置了。

使用Nginx搭建虛擬主機服務器時,每一個虛擬WEB站點擁有獨立的」server {}」配置段,各自監聽的IP地址、端口號能夠單獨指定,固然網站名稱也是不一樣的。

如今我就建立兩個虛擬主機 www.51cto.comwww.nginx.org

先建立網頁文檔目錄和引導文件

wps_clip_image-1338

而後修改nginx.conf文件 天驕 server{} 字段 並在其中指定網站名稱 監聽地址等信息

wps_clip_image-15329

注意全局配置中的log設置

wps_clip_image-4481

重啓服務   注意dns的配置

最終結果

51

wps_clip_image-10963

Nginx

wps_clip_image-15227

其餘兩種方式 照葫蘆畫瓢 參考Apache的配置。

End

相關文章
相關標籤/搜索