1. 程式人生 > >nginx與tomcat(三) nginx.conf解析

nginx與tomcat(三) nginx.conf解析

. nginx.conf配置檔案解析

  1. 主要分為五個部分
    1. 全域性設定:main
    2. http設定:http
    3. server設定:server
    4. 匹配url路徑:location
    5. 其他配置段:event,upstream
  2. 全域性設定
    1. user nginx--------------------------指定執行 nginx workre 程序的使用者和組
    2. worker_rlimit_nofile #--------------指定所有 worker 程序能夠開啟的最大檔案數
    3. worker_cpu_affinity----------------設定 worker 程序的 CPU 粘性,以避免程序在 CPU 間切換帶來的效能消耗。如 worker_cpu_affinity 0001 0010 0100 1000;(四核)
    4. worker_processes 4----------------worker 工作程序的個數,這個值可以設定為與 CPU 數量相同,如果開啟了 SSL 和 Gzip,那麼可以適當增加此數值
    5. worker_connections 1000----------單個 worker 程序能接受的最大併發連線數,放在 event 段中
    6. error_log logs/error.log info-------錯誤日誌的存放路徑和記錄級別
    7. use epoll----------------------------使用 epoll 事件模型,放在 event 段中
  3. http配置
    1. server {}:---------------------------定義一個虛擬主機
    2. listen 80;----------------------------定義監聽的地址和埠,預設監聽在本機所有地址上,該埠不能被其他程式佔用,否則啟動不了,最開始80開始的埠
    3. server_name NAME [...];------------定義虛擬主機名,可以使用多個名稱,還可以使用正則表示式或萬用字元。
    4. sendfile on--------------------------開啟 sendfile 呼叫來快速的響應客戶端
    5. keepalive_timeout 10---------------長連線超時時間,單位是秒。
    6. send_timeout-----------------------指定響應客戶端的超時時間
    7. client_max_body_size 10m---------允許客戶端請求的實體最大大小
    8. root PATH---------------------------設定請求 URL 所對應資源所在檔案系統上的根目錄
    9. location[ = | ~ | ~* | ^~ ] URI { ... }--設定一個 URI 匹配路徑
        1. =:精確匹配
        2. ~:正則表示式匹配,區分字元大小寫
        3. ~*:正則表示式匹配,不區分字元大小寫
        4. ^~:URI 的前半部分匹配,且不實用正則表示式
      1. 優先順序:= > location 完整路徑 > ^~ > ~ > ~* > location 起始路徑 > location /
    10. allow 和 deny-------------------------基於 IP 訪問控制,
      1. 如:僅允許 192.168.0.1/192.168.255.255 網段客戶端訪問:
        1. allow 192.168.0.1/192.168.255.255;
        2. deny all;
    11. rewrite <REGEX> <REPL> <FLAG>--URL 重寫,可以使用多種標記
      1. 例子:rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
      2. 可用的 flag:
        1. - last:重寫完成後,繼續匹配其他 rewrite 規則
        2. - break:重寫完成後不再繼續匹配
        3. - redirect:返回 302 重定向(臨時重定向),客戶端對重定向的 URL 發起新的請求
        4. - permanent:返回 301 重定向(永久重定向),客戶端對重定向的 URL 發起新的請求
      3. 當我們把前段工程放到nginx的html目錄下的時候,我們訪問前段工程的時候就需要使用到URL的重寫
        1. 例如:我們的工程專案叫test,主頁面是test目錄下的index.html頁面。配置如下:location/{rewrite "^/home/(.+)" /test/$1 last;}
        2. 當我們訪問主頁面的時候使用127.0.0.1:80/home/index.htnl就OK了。
  4. 反向代理配置
    1. 修改部署目錄下conf子目錄的nginx.conf檔案(如nginx/conf/nginx.conf)內容,可調整相關配置。
  5. 負載均衡配置
    1. 權重輪詢
      1. 由於weight不同,則如果訪問60次,則大概10次localhost:8080,50次192.168.101.9:8080
    2. ip_hash
      1. 上面的2種方式都有一個問題,那就是下一個請求來的時候請求可能分發到另外一個伺服器,當我們的程式不是無狀態的時候(採用了session儲存資料),這時候就有一個很大的很問題了,比如把登入資訊儲存到了session中,那麼跳轉到另外一臺伺服器的時候就需要重新登入了,所以很多時候我們需要一個客戶只訪問一個伺服器,那麼就需要用iphash了,iphash的每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題。
    3. fair(第三方)
      1. 需要安裝第三方的fair外掛才能配置使用。按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
    4. url_hash(第三方)
      1. 需要安裝第三方的url_hash外掛才能配置使用。按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。 在upstream中加入hash語句,server語句中不能寫入weight等其他的引數,hash_method是使用的hash演算法

 

. 完整例項

#user  nginx;        #windows下可以不配置,但是linux下必須配置,不然沒有訪問許可權。你使用使用者nginx啟動nginx,就配置為user nginx

worker_processes  8;#工作執行緒數量,可以配置為CPU的數量

error_log  logs/error.log;#錯誤日誌輸出檔案

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;#指定程序ID,方便在部署環境的時候寫指令碼去管理程序

events {

    worker_connections  1024;#配置的最大併發連線數量

}

upstream tomcats {

server 192.168.1.1:8080  max_fails=3 fail_timeout=3s weight=9;

server 192.168.1.2:8080  max_fails=3 fail_timeout=3s weight=1;

}

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  logs/access.log  main;#執行日誌,預設在這個日誌檔案,可以修改。

    sendfile        on;

    #tcp_nopush     on;

    #keepalive_timeout  0;

    keepalive_timeout  65;#設定連線超時時間

    #gzip  on;

    #配置一個虛擬的server伺服器

    server {

        listen       8880;#監聽埠

        server_name  localhost;#主機名稱

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {

            root   html;

            proxy_pass http://tomcats;

            index  index.html index.htm;

        }

        location /home {

            rewrite "^/home/(.+)" /test/$1 last;

        }

       location /Test {

           proxy_pass http://192.168.1.1:8080/TestServlet;

       }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

    }

    include servers/*;

}