<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    Nginx學習筆記二基本配置

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    1.Nginx的配置文件默認在Nginx程序安裝目錄的conf二級目錄下,主配置文件為nginx.conf.假設您的Nginx安裝

    在/usr/local/webserver/nginx/目錄下,那么默認的主配置文件則為/usr/local/webserver/nginx/nginx.conf.
    2.Nginx配置參數:
    (1)user www www 指定使用的用戶和用戶所在的組
    (2)worker_processes 8 指定工作衍生進程數(一般等于CPU的總核數或總核數的兩倍,如兩個四核CPU,則總核數為8)
    (3)error_log /data1/logs/nginx_error.log crit;指定錯誤日志存放路徑,錯誤日志記錄級別[debug|info|notice|warn|

    error|crit]
    (4)pid  /usr/local/webserver/nginx/nginx.pid; 指定pid存放的路徑
    (5)events{use epoll;} 指定使用的網絡I/O模型,Linux系統推薦采用epoll模型,FreeBSD系統推薦采用kqueue模型.
    (6)events{worker_connections 51200;}指定允許的連接數
    (7)http{charset gb2312;}設置使用的字符集,如果一個網站有多種字符集,請不要隨便設置,應讓程序員在HTML代碼中通過

    Meta標簽設置
    (8)http{client_max_body_size 8M;}設置客戶端能夠上傳的文件大小.
    (9)http{gzip on ;}開啟gzip壓縮
    3.nginx.conf配置文件結構如下:
    ...
    events
    {
    ...
    }
    http
    {
    ...
    server{
    ...
    }
    server{
    ...
    }
    ...
    }
    4.Nginx可以配置多種類型的虛擬主機:一是基于IP的虛擬主機,二是基于域名的,三是基于端口的
    5.本地回環lo,被看作室永遠不會宕掉得接口.它的主要作用是測試本機的網絡配置,能ping通127.0.0.1說明本機的網卡和IP

    協議安裝都沒有問題.
    6.IP別名背后的概念很簡單:可以在一塊物理網卡上綁定多個IP地址.這樣就能夠在使用單一網卡的同一服務器上運行多個基

    于IP的虛擬主機.如果要在eth0網卡設備上添加兩個IP別名192.168.8.43和192.168.8.44可以通過以下ifconfig 和route命令

    來進行:
    /sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up
    /sbin/route add -host 192.168.8.43 dev eth0:1
    /sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up
    /sbin/route add -host 192.168.8.44 dev eth0:2
    配置后如果能從另外一臺服務器ping 192.168.8.43和192.168.8.44 ,如果能ping通,則證明配置無誤.但是通過ifconfig 和

    route配置的IP別名在服務器重啟后會消失.不過可以將這兩條命令添加到/etc/rc.local文件中,讓系統開機時自動運行,
    vi /etc/rc.local
    在文件末尾增加以下內容,然后保存即可.
    /sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up
    /sbin/route add -host 192.168.8.43 dev eth0:1
    /sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up
    /sbin/route add -host 192.168.8.44 dev eth0:2
    無論是通過IP別名在一臺服務器上配置多個IP地址,還是通過多塊網卡在服務器上配置多個IP地址,在Nginx中都能將其配置

    成為基于IP的虛擬主機.

    7.在Nginx配置文件中,分別對192.168.8.43,192.168.8.44,192.168.8.45三個IP配置三個純靜態HTML支持的虛擬主機
    http{
      #第一個虛擬主機
      server{
        #監聽的IP和端口
        listen 192.168.8.43:80;
        #主機名稱
        server_name 192.168.8.43;
        #訪問日志文件存放路徑
        access_log logs/sever1.access.log combined ;
        location /
        {
          #默認首頁文件,順序從左到右,如果找不到index.html,則找index.htm
          index index.html index.htm
          #HTML網頁文件存放的目錄
          root /data0/htdocs/server1;
        }
      }
      #第二個虛擬主機
      server{
        #監聽的IP和端口
        listen 192.168.8.44:80;
        #主機名稱
        server_name 192.168.8.44;
        #訪問日志文件存放路徑
        access_log logs/sever2.access.log combined ;
        location /
        {
          #默認首頁文件,順序從左到右,如果找不到index.html,則找index.htm
          index index.html index.htm
          #HTML網頁文件存放的目錄
          root /data0/htdocs/server2;
        }
      }
      #第三個虛擬主機
      server{
        #監聽的IP和端口
        listen 192.168.8.45:80;
        #主機名稱
        server_name 192.168.8.45;
        #訪問日志文件存放路徑
        access_log logs/sever3.access.log combined ;
        location /
        {
          #默認首頁文件,順序從左到右,如果找不到index.html,則找index.htm
          index index.html index.htm
          #HTML網頁文件存放的目錄
          root /data0/htdocs/server3;
        }
      }
    }

    從配置文件可以看出,一段server{...}就是一個虛擬主機,如果要配置多個虛擬主機,建立多段server{}配置即可,監聽的IP和

    端口也可以不寫IP地址,只寫端口,把它配置成"listen 80",則表示監聽該服務器上所有Ip的80端口,可以通過server_name區

    分不同的虛擬主機.

    8.基于域名的虛擬主機是最常見的虛擬主機,只需配置DNS服務器,將每個主機名映射到正確的IP地址,然后配置Nginx服務器,

    令其識別不同的主機名即可.這種技術可以使很多虛擬主機共享同一個IP地址.

    9.Nginx中配置基于域名的虛擬主機.主機1對aaa.domain.com的訪問都由它來處理,主機2對bbb.otherdomain.com的訪問都由

    它來處理,主機3對域名www.domain.com,domain.com及aaa.domain.com之外的所有*.domain.com二級域名的訪問都由它來處理

    .每個虛擬主機的網頁文件分別存放在了不同的目錄中,每個虛擬主機使用了不同的日志文件來記錄訪問日志.配置情況如下:
    http{
      #第一個虛擬主機
      server{
          #監聽的端口
        listen 80 ;
        #主機名稱
        server_name aaa.domain.com;
        #訪問日志文件存放路徑
        access_log logs/aaa.domain.com.access.log combined ;
        location /
        {
            index index.html index.htm;
            root /data0/htdocs/aaa.domain.com;
        }
      }
      #第二個虛擬主機
      server{
          listen 80;
        server_name bbb.otherdomain.com;
        access_log logs/bbb.otherdomain.com.access.log.combined ;
        location /
        {
            index index.html index.htm
            root /data0/htdocs/bbb.otherdomain.com;
        }
      }
      #第三個虛擬主機
      server{
        listen 80;
        server_name www.domain.com domain.com *.domain.com;
        access_log logs/bbb.domain.com.access.log bombined ;
        location /
        {
            index index.html index.htm ;
            root /data0/htdocs/domain.com;
        }
      }
    }

    10.Nginx的日志文件配置與切割
    與Nginx日志相關的指令主要有兩條,一條是log_format,用來設置日志的格式,另外一條是access_log,用來指定日志文件的

    存放路徑,格式和緩存大小.兩條指令在Nginx配置文件中的位置可以在http{...}之間,也可以在虛擬主機之間,即server{...}

    11.用log_format指令設置日志格式
    設置格式為:
    log_format name format [format ...]
    name 表示定義的格式名稱 , format 表示定義的格式樣式. log_format有一個默認的,無須設置的combined日志格式設置.也

    可以自定義一份日志記錄格式,不過需要注意,log_format指令設置的name名稱在Nginx配置文件中是不能重復的.
    具體參數如下:
    log_format combined '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';
    注意:如果Nginx作為Web服務器,位于負載均衡設備,Squid,Nginx反向代理之后,就沒法獲得客戶端的真實IP地址了.即

    $reomte_addr變量拿到得不是客戶端的IP地址,而是反向代理服務器的IP地址.但是反向代理服務器在轉發請求的HTTP頭信息

    中,可以增加X-Forwarded-For信息,用來記錄原有的客戶端IP地址和原來客戶端請求的服務器地址.這個時候可以自定義日志

    格式.如下.
    log_format mylogformat '$http_x_forwarded_for - $remote_user [$time_local]'
                   '"$request" $status $body_bytes_sent'
                   '"$http_referer" "$http_user_agent"';
    在日志格式中,變量
    $remote_addr 和$http_x_forwarded_for用于記錄IP地址
    $remote_user 用來記錄遠程客戶端用戶名稱;
    $time_local用于記錄訪問時間與時區;
    $request用于記錄請求URL與HTTP協議;
    $status用于記錄請求狀態,例如成功時狀態為200,頁面找不到時狀態為404;
    $body_bytes_sent用于記錄發送給客戶端的文件主體內容大小
    $http_referer用于記錄是從哪個頁面鏈接訪問過來的;
    $http_user_agent用于記錄客戶端瀏覽器的相關信息

    日志信息如下:
    123.42.4.194 - - [12/Mar/2009:02:18:23 +0800] "GET / HTTP/1.1" 200 36179 "-" "Mozilla/4.0 (compatible;MSIE

    7.0;Windows NT 5.1;Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.1; SV1) ; CIBA; .NET CLR 2.0.50727)"
    分別對應以上的變量


    12.用access_log指令指定日志文件存放路徑
    access_log path [format [buffer=size | off]]
    path表示日志文件的存放路徑,format表示使用log_format指令設置的日志格式的名稱,buffer=size 表示設置內存緩存區的

    大小,例如可以設置buffer=32k
    (1)不記錄日志.可以用如下指令關閉記錄.
    access_log off ;
    (2)使用默認的combined格式的日志記錄,使用如下示例:
    access_log /data1/logs/filename.log;

    access_log /data1/logs/filename.log combined ;
    (3)如果使用自定義格式的日志記錄,就需要兩條命令了.mylogformat是日志格式名稱
    log_format mylogformat '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" $http_x_forwarded_for' ;
    access_log /data1/logs/access.log mylogformat buffer=32k
    (4)在Nginx0.7.4之后的版本中,access_log指令中的日志文件路徑可以包含變量.如:
    access_log /data1/logs/$server_name.log combined
    如果sever_name指令設置的虛擬主機名稱為test.domain.com.那么access_log指令將把訪問日志記錄在
    /data1/logs/test.domain.com.log文件中

    13.日志文件中含有變量的限制
    (1)Nginx進程設置的用戶和組必須有對該路徑創建文件的權限.假設Nginx的user指令設置的用戶名和用戶組都是www,

    而/data1/logs/目錄的用戶名和用戶組為root.日志文件/data1/logs/test.domain.com.log將無法被Nginx創建.
    (2)緩沖將不會被使用.(這個沒看明白)
    (3)每一條日志記錄,日志文件都將先打開文件,再寫人日志記錄,然后馬上關閉,這個比較耗性能,為了提高包含變量的日志文

    件存放路徑的性能,須要使用open_log_file_cache指令設置經常被使用的日志文件描述符緩存.

    語法:
    open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] | off

    例如:open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m ;

    max:設置緩存中的最大文件描述符數量
    inactive: 設置一個時間,如果在設置的時間內沒有使用此文件描述符,則自動刪除此描述符,默認是10秒
    min_uses:在參數inactive指定的時間范圍內,如果日志文件超過被使用的次數,則將該日志文件的描述符記入緩存,默認次數

    為1.
    valid:設置檢查時間,看變量指定的日志文件路徑與文件名是否仍然存在,默認時間為60秒.

    open_log_file_cache off 禁止使用緩存.


    14.日志文件的切割
    生產環境中的服務器,由于訪問日志文件增長速度非常快,日志太大會嚴重影響服務器效率.同時為了方便對日志進行分析計算

    ,須要對日志進行定時切割.定時切割的方式有按月切割,按天切割,按小時切割.最常用的是按天切割.

    切割命令如下:
    mv /data1/logs/access.log /data1/logs/20090318.log
    kill -USR1 Nginx主進程號

    或者(如果在配置文件中使用了 pid /usr/local/webserver/nginx/nginx.pid指令)

    mv /data1/logs/access.log /data1/logs/20090318.log
    kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid' 這樣的話就不用ps查找Nginx主進程號了.

    如果要讓它每天定時切割日志,可以編寫shell腳本.并且利用crontab來每天定時運行.
    shell 腳本代碼:

    #!/bin/bash
    #定義Nginx日志文件的存放路徑
    logs_path = "/data1/logs/"

    mkdir -p ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday" +"%m")/
    mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday"+"%m")/
    access_$(date -d "yesterday" + "%Y%m%d").log
    kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid'

    再配置crontab,輸入crontab -e
    輸入:
    00 00 * * * /bin/bash /usr/loca/webserver/nginx/sbin/cut_nginx_log.sh

    shell腳本和crontab配置主要實現的功能是:假設今天的日期為2009年5月19日,Nginx當前的日志文件

    為/data1/logs/access.log,2009年5月20日00:00會執行cut_nginx_log.sh腳本,cut_nginx_log.sh腳本首先創建一個目錄
    /data1/logs/2009/05/,然后將/data1/logs/access.log文件移動并重命名為/data1/logs/2009/05/access_20090519.log,

    再發送kill -USR1信號給Nginx主進程,告訴Nginx重新生成一個/data1/logs/access.log文件,2009年5月20日的日志記錄在這

    個新生成的日志文件中.而/data1/logs/2009/05/access_20090519.log文件,就是2009年5月19日的日志文件.



    15.Nginx的壓縮輸出配置.

    經過gzip壓縮后頁面大小可以變為原來的30%甚至更小,這樣用戶瀏覽頁面的時候速度會快很多.服務器壓縮,瀏覽器解壓

    縮.IE,Firefox,Opera,Chrome都支持gzip解壓縮.
    壓縮輸出的相關指令位于http{...}兩個大括號之間:
    gzip on ;
    gzip_min_length 1k;
    gzip_buffers 4 16k ;
    gzip_http_version 1.1 ;
    gzip_comp_level 2 ;
    gzip_types text/plain application/x-javascript text/css application/xml ;
    gzip_vary on ;

    16.Nginx的自動列目錄配置.
    感覺沒什么用,就不寫了,用到再查.

    17.Nginx的瀏覽器本地緩存設置.
    瀏覽器在用戶磁盤上對最近請求過的文檔進程存儲,當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁盤顯示文檔,這樣就

    可以加速頁面的閱歷.
    通過expires指令輸出Header頭來實現緩存.控制HTTP應答中的"Expires"和"Cache-Control"的Header頭信息.
    語法: expires [ time | epoch | max | off]
    默認值為: expires expires off
    作用域: http , server , location
    time可以為正數或負數,Expires頭標的值將通過當前系統時間加上您設定的time值來獲得.
        "Cache-Control"頭標的值由指定的時間來決定.
        負數:Cache-Control:no-cache
        正數或零:Cache-Control:max-age=您指定的時間的秒數,-1表示永遠過期.

    epoch指定Expires的值為1 january,1970,00:00:01 GMT

    max指定"Expires”的值為31December 2037 23:59:59 GMT , "Cache-Control"的值為10年

    off表示不修改"Expires"和"Cache-Control"的值.

    18網站一般緩存設置.不常被修改的javascript,圖片, Flash ,css可以通過expires設置瀏覽器緩存.
    配置代碼如下:
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d ;
    }
    location ~ .*\.(js|css)?$
    {
        expires 1h ;
    }
    對圖片和flash緩存30天,對css 和js 緩存1個小時.

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全