nginx的下載和配置


摘要:nginx是目前廣為使用的反向代理服務器。nginx作為web服務器主要實現反向代理、負載均衡、靜態文件服務器。在整個web項目為web服務器提高了效率,而且減輕了負擔。

   接下來我們要去探索nginx是怎樣做到這些強大的功能的。

   本文帶你去簡單進入nginx的世界,主要介紹nginx的下載和簡單的配置。

nginx的安裝

  這里介紹的是系統平台:CentOs release 6.6(final) 64位的安裝

  1.安裝編譯工具和庫文件

 yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

  2.首先要安裝PCRE

  PCRE的作用是讓nginx支持Rewrite功能,這里會在nginx配置里詳解

  下載PCRE安裝包,通過下載地址來下載解壓

wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

  解壓安裝包

tar zxvf pcre-8.35.tar.gz

  進入安裝包目錄

cd pcre-8.35

  編譯安裝

 ./configure
make && make install

  查看pcre版本

pcre-config --version

  3.安裝nginx

  也是通過下載地址下載解壓

wget http://nginx.org/download/nginx-1.6.2.tar.gz

  解壓安裝包

tar zxvf nginx-1.6.2.tar.gz

  進入安裝包目錄

cd nginx-1.6.2

  編譯安裝

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35
make && sudo make install

Nginx會被安裝在/usr/local/nginx目錄下(也可以使用參數--prefix=指定自己需要的位置), 安裝成功后 /usr/local/nginx 目錄下有四個子目錄分別是:conf、html、logs、sbin 。 其中 Nginx 的配置文件存放於 conf/nginx.conf, bin文件是位於 sbin 目錄下的 nginx 文件。 確保系統的 80 端口沒被其他程序占用,運行 sbin/nginx 命令來啟動 Nginx。

  啟動nginx

/usr/local/nginx/sbin/nginx

  打開瀏覽器訪問此機器的ip,如果瀏覽器出現Welcome to nginx 就表明安裝並運行成功了!

 

nginx的配置

nginx.conf配置文件,基本就分為以下幾塊:

main
events   {
  ....
}
http        {
  ....
  upstream myproject {
    .....
  }
  server  {
    ....
    location {
        ....
    }
  }
  server  {
    ....
    location {
        ....
    }
  }
  ....
}

nginx配置文件主要分為六個區域:

  • main(全局設置)
  • events(nginx工作模式)
  • http(http設置)
  • sever(主機設置)
  • location(URL匹配)
  • upstream(負載均衡服務器設置

下面依次來看下具體內容

  • main模塊

下面時一個main區域,他是一個全局的設置:

user nobody nobody;
worker_processes 2;
error_log  /usr/local/var/log/nginx/error.log  notice;
pid        /usr/local/var/run/nginx/nginx.pid;
worker_rlimit_nofile 1024;

user :來指定Nginx Worker進程運行用戶以及用戶組,默認由nobody賬號運行。也可以創建nginx用戶指定用戶。

創建www用戶,在nginx配置文件中把user noboby noboby;-->user www www;即可

/usr/sbin/groupadd www 
/usr/sbin/useradd -g www www

worker_processes:來指定了Nginx要開啟的子進程數。每個Nginx進程平均耗費10M~12M內存。根據經驗,一般指定1個進程就足夠了,如果是多核CPU,建議指定和CPU的數量一樣的進程數即可。我這里寫2,那么就會開啟2個子進程,總共3個進程。

error_log:用來定義全局錯誤日志文件。日志輸出級別有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日志最為最詳細,而crit輸出日志最少。

pid:用來指定進程id的存儲文件位置。

worker_rlimit_nofile:用於指定一個nginx進程可以打開的最多文件描述符數目,這里是65535,需要使用命令“ulimit -n 65535”來設置。

  • events 模塊

events模塊來用指定nginx的工作模式和工作模式及連接數上限,一般是這樣:

events {
    use epoll; #Linux平台
    worker_connections  1024;
}

use:用來指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系統中,對於Linux系統,epoll工作模式是首選。

worker_connections:用於定義Nginx每個進程的最大連接數,即接收前端的最大請求數,默認是1024。最大客戶端連接數由worker_processes和worker_connections決定,即Max_clients=worker_processes*worker_connections,在作為反向代理時,Max_clients變為:Max_clients = worker_processes * worker_connections/4。 進程的最大連接數受Linux系統進程的最大打開文件數限制,在執行操作系統命令“ulimit -n 65536”后worker_connections的設置才能生效。

  • http 模塊

http模塊可以說是最核心的模塊了,它負責HTTP服務器相關屬性的配置,它里面的server和upstream子模塊,至關重要,等到反向代理和負載均衡以及虛擬目錄等會仔細說。

http{
    include       mime.types;
    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  /usr/local/var/log/nginx/access.log  main;
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  10;
    #gzip  on;
    upstream myproject {
        .....
    }
    server {
        ....
    }
}

下面詳細介紹下這段代碼中每個配置選項的含義。

include :來用設定文件的mime類型,類型在配置文件目錄下的mime.type文件定義,來告訴nginx來識別文件類型。

default_type:設定了默認的類型為二進制流,也就是當文件類型未定義時使用這種方式,例如在沒有配置asp 的locate 環境時,Nginx是不予解析的,此時,用瀏覽器訪問asp文件就會出現下載了。

log_format:用於設置日志的格式,和記錄哪些參數,這里設置為main,剛好用於access_log來紀錄這種類型。

      main:的類型日志如下:也可以增刪部分參數。

127.0.0.1 - - [21/Apr/2015:18:09:54 +0800] "GET /index.php HTTP/1.1" 200 87151 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.76 Safari/537.36"
access_log

      用來紀錄每次的訪問日志的文件地址,后面的main是日志的格式樣式,對應於log_format的main。

sendfile:參數用於開啟高效文件傳輸模式。將tcp_nopush和tcp_nodelay兩個指令設置為on用於防止網絡阻塞。

keepalive_timeout:設置客戶端連接保持活動的超時時間。在超過這個時間之后,服務器會關閉該連接。

 

  • server 模塊

sever 模塊是http的子模塊,它用來定一個虛擬主機,我們先講最基本的配置,這些在后面再講。

我們看一下一個簡單的server 是如何做的?

server {
        listen       8080;
        server_name  localhost 192.168.12.10 www.ztl.com;
        # 全局定義,如果都是這一個目錄,這樣定義最簡單。
        root   /Users/ztl/www;
        index  index.php index.html index.htm; 
        charset utf-8;
        access_log  usr/local/var/log/host.access.log  main;
        aerror_log  usr/local/var/log/host.error.log  error;
        ....
}

server:標志定義虛擬主機開始。

listen:用於指定虛擬主機的服務端口。

server_name:用來指定IP地址或者域名,多個域名之間用空格分開。

root :表示在這整個server虛擬主機內,全部的root web根目錄。注意要和locate {}下面定義的區分開來。

index :全局定義訪問的默認首頁地址。注意要和locate {}下面定義的區分開來。

charset:用於設置網頁的默認編碼格式。

access_log:用來指定此虛擬主機的訪問日志存放路徑,最后的main用於指定訪問日志的輸出格式。

  • location 模塊

location模塊是nginx中用的最多的,也是最重要的模塊了,什么負載均衡啊、反向代理啊、虛擬域名啊都與它相關。慢慢來講:

location 根據它字面意思就知道是來定位的,定位URL,解析URL,所以,它也提供了強大的正則匹配功能,也支持條件判斷匹配,用戶可以通過location指令實現Nginx對動、靜態網頁進行過濾處理。像我們的php環境搭建就是用到了它。

我們先來看這個,設定默認首頁和虛擬機目錄。

location / {
            root   /Users/yangyi/www;
            index  index.php index.html index.htm;
        }

location /表示匹配訪問根目錄。

root指令用於指定訪問根目錄時,虛擬主機的web目錄,這個目錄可以是相對路徑(相對路徑是相對於nginx的安裝目錄)。也可以是絕對路徑。

#反向代理配置
  location /myweb/ {
             proxy_pass http://127.0.0.1:8080;
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header Host $http_host;
         }


  #采用uwsgi方式
  location /python/ {
             include uwsgi_params;
             uwsgi_pass 127.0.0.1:33333;
         }



    #訪問nginx本機目錄的文件
    location / {
            root   /home/itcast/xwp/itcast/;
            index  index.html index.htm;
        }

    location  /static/ {
             alias /var/static/;
        }

proxy_pass:代理轉發,如果在proxy_pass后面的url加/,表示絕對根路徑;如果沒有/,表示相對路徑,把匹配的路徑部分也給代理走。

proxy_set_header:允許重新定義或者添加發往后端服務器的請求頭。

include:加載配置文件,后面介紹nginx多個配置文件時候會提到。

root:定位localtion匹配的url資源路徑。在后面會介紹root、alias的區別。

index:定義頁面顯示html,一般和alias配合使用。

  • upstram 模塊

upstream 模塊負債負載均衡模塊,通過一個簡單的調度算法來實現客戶端IP到后端服務器的負載均衡。我先學習怎么用,具體的使用實例以后再說。

upstream test.com{
    ip_hash;
    server 192.168.123.1:80;
    server 192.168.123.2:80 down;
    server 192.168.123.3:8080  max_fails=3  fail_timeout=20s;
    server 192.168.123.4:8080;
}

在上面的例子中,通過upstream指令指定了一個負載均衡器的名稱test.com。這個名稱可以任意指定,在后面需要的地方直接調用即可。

里面是ip_hash這是其中的一種負載均衡調度算法。

Nginx的負載均衡模塊目前支持4種調度算法:

  • weight 輪詢(默認)。每個請求按時間順序逐一分配到不同的后端服務器,如果后端某台服務器宕機,故障系統被自動剔除,使用戶訪問不受影響。weight。指定輪詢權值,weight值越大,分配到的訪問機率越高,主要用於后端每個服務器性能不均的情況下。
  • ip_hash。每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個后端服務器,有效解決了動態網頁存在的session共享問題。
  • fair。比上面兩個更加智能的負載均衡算法。此種算法可以依據頁面大小和加載時間長短智能地進行負載均衡,也就是根據后端服務器的響應時間來分配請求,響應時間短的優先分配。Nginx本身是不支持fair的,如果需要使用這種調度算法,必須下載Nginx的upstream_fair模塊。
  • url_hash。按訪問url的hash結果來分配請求,使每個url定向到同一個后端服務器,可以進一步提高后端緩存服務器的效率。Nginx本身是不支持url_hash的,如果需要使用這種調度算法,必須安裝Nginx 的hash軟件包。

在HTTP Upstream模塊中,可以通過server指令指定后端服務器的IP地址和端口,同時還可以設定每個后端服務器在負載均衡調度中的狀態。常用的狀態有:

down,表示當前的server暫時不參與負載均衡。

backup,預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,才會請求backup機器,因此這台機器的壓力最輕。

max_fails,允許請求失敗的次數,默認為1。當超過最大次數時,返回proxy_next_upstream 模塊定義的錯誤。

fail_timeout,在經歷了max_fails次失敗后,暫停服務的時間。max_fails可以和fail_timeout一起使用。

注意 當負載調度算法為ip_hash時,后端服務器在負載均衡調度中的狀態不能是weight和backup。

備注: nginx的worker_rlimit_nofile達到上限時,再有客戶端鏈接報502錯誤. 用了log_format指令設置了日志格式之后,需要用access_log指令指定日志文件的存放路徑。

 
        

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM