[nginx]默認ngixn.conf配置文件源碼解析

 

備註:由於常用nginx部署php項目,因此源碼帶有php配置註釋例子php

 

 


 

#user nginx nginx;html

Nginx用戶及組:用戶組java

默認爲#user nobody;nginx

 

worker_processes 4;web

工做進程:一般根據硬件調整,等於CPU處理機數量或兩倍數量算法

 

#error_log  logs/error.log;apache

#error_log  logs/error.log  notice;後端

#error_log  logs/error.log  info;瀏覽器

錯誤日誌:logs目錄,存放日誌路徑緩存

 

#pid logs/nginx.pid

pid:進程標識符的存放路徑

 

events {

  #use epoll;

使用epoll的I/O模型,epoll使用於Linux內核2.6版本及之後的系統

nginx與apache相類,針對不一樣的OS,有不一樣的事件模型:

A)標準事件模型

Select、poll屬於標準事件模型,若是當前系統不存在更有效的方法(如epoll),nginx會選擇select或poll

B)高效事件模型

Epoll:使用於Linux內核2.6版本及之後的系統。

Kqueue:使用於FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用雙處理器的MacOS X系統使用kqueue可能會形成內核崩潰。

等等...

  worker_connections 204800;

每個工做進程的最大鏈接數量,根據硬件調整,能夠儘可能大,但別吧CPU跑到100%就行。

每個進程容許的最多鏈接數,理論上=worker_processes*worker_connections

  #keepalive_timeout 60;

設置超時時間

  #client_header_buffer_size 4k;

設置客戶端請求頭部的緩衝區大小。能夠根據你的系統分頁大小來設置,通常一個請求頭的大小不會超過1k,不過因爲通常系統分頁都要大於1k,因此這裏設置爲分頁大小(分頁大小可使用命令getconf PAGESIZE獲取)

注意,client_header_buffer_size該值必須設置爲「系統分頁大小」的整倍數

  #open_file_cache max=65535 inactive=60s;

爲打開文件指定緩存,默認是沒有啓用的,max指定緩存數量,建議和打開文件數一致,inactive是指通過多長時間文件沒被請求後刪除緩存

  #open_file_cache_valid 80s;

設置多久檢查一次緩存的有效信息

  #open_file_cache_min_uses 1;

open_file_cache指令中的inactive參數時間內文件的最少使用次數,好比60s。

若是超過這個時間,文件描述符一直是在緩存中打開的,如設置爲1,即若是有一個文件在inactive時間內一次沒被使用,它將被移除

}

 

設定http服務器,利用它的反向代理功能提供負載均衡支持,經過不一樣的域名請求分發到不一樣的項目目錄中

http {  

  include mime.types;

設定mime類型,類型由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"';

  #log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';

設置日誌格式

$remote_addr和$http_x_forwarded_for用來記錄客戶端的ip地址;

$remote_user:用來記錄客戶端用戶名稱;

$time_local: 用來記錄訪問時間與時區;

$request: 用來記錄請求的url與http協議;

$status: 用來記錄請求狀態;成功是200,

$body_bytes_sent :記錄發送給客戶端文件主體內容大小;

$http_referer:用來記錄從那個頁面連接訪問過來的;

$http_user_agent:記錄客戶瀏覽器的相關信息

一般web服務器放在反向代理的後面,這樣就不能獲取到客戶的IP地址了,經過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,能夠增長x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。

 

  #access_log  logs/host.access.log  main;  

用了log_format指令設置了日誌格式以後,須要用access_log指令指定日誌文件的存放路徑

 

  sendfile on;

  #tcp_nopush on;

sendfile指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲on。若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,下降系統uptime

tcp_nopush容許或禁止使用socket的TCP_CORK的選項,此選項僅在使用sendfile的時候使用

 

  #keepalive_timeout 0;

  keepalive_timeout 65;

keepalive超時時間。

 

  #gzip on;

  gzip on;

 

  upstream bakend {

定義負載均衡設備的ip及設備狀態

bakend爲訪問域名image.***.com,好比cms.project.com,對於其餘域名訪問,如www.project.com,一樣使用upstream配置

    server 127.0.0.1:8027;

    server 127.0.0.1:8028;

    server 127.0.0.1:8029;

    hash $request_uri;

  }

nginx的upstream目前支持4種方式的分配

一、輪詢(默認)

每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器down掉,能自動剔除。

二、weight
指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。
例如:
upstream bakend {
  server 192.168.0.14 weight=10;
  server 192.168.0.15 weight=10;
}

二、ip_hash
每一個請求按訪問ip的hash結果分配,這樣每一個訪問固定訪問一個後端服務器,能夠解決session的問題。
例如:
upstream bakend {
  ip_hash;
  server 192.168.0.14:88;
  server 192.168.0.15:80;
}

三、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream backend {
  server server1;
  server server2;
  fair;
}

四、url_hash(第三方)

按訪問url的hash結果來分配,使每一個url定向到同一個後端服務器,在後端服務器爲緩存時比較有效。

例:在upstream中加入hash語句,server語句中不能寫入weight等其餘的參數,hash_method是使用的hash算法

upstream backend {
  server squid1:3128;
  server squid2:3128;
  hash $request_uri;
  hash_method crc32;
}

示例:

upstream bakend{#定義負載均衡設備的Ip及設備狀態}{
  ip_hash;
  server 127.0.0.1:9090 down;
  server 127.0.0.1:8080 weight=2;
  server 127.0.0.1:6060;
  server 127.0.0.1:7070 backup;
}

1.down表示單前的server暫時不參與負載

2.weight爲weight越大,負載的權重就越大。

3.backup: 其它全部的非backup機器down或者忙的時候,請求backup機器。因此這臺機器壓力會最輕。

 

備註:能夠配置多個upstream,即支持多組的負載均衡,用來給不一樣的server虛擬機使用

 

配置虛擬機

  server {

    listen 80;

配置監聽端口

    server_name image.***.com;

 

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

 

配置訪問域名

    location / {

      root  /opt/javaweb/tianti-module-gateway;

      index  index.html index.html;

    }

根目錄訪問

    location /static {

      root  /opt/javaweb/tianti-module-gateway;

    }

含static目錄訪問

    location ~* \.(mp3|exe)$ {

      root /opt/javaweb/tianti-module-admin;

      expires 24h;

    }

以「mp3|exe」結尾的地址

    error_page  500 502 503 504  /50x.html;

    location = /50x.html {

      root  html; 

    }

  }

 

server {

  ...

 

  location / {

對根目錄訪問進行負載均衡

      root  /opt/javaweb/tianti-module-admin;

      index  index.html index.html;

 

      #proxy_pass http://img_relay$request_uri;

      proxy_pass  http://127.0.0.1:8080;

設置被代理服務器的端口嗯或套接字,以及URL

該例設置動態請求都轉發到http://127.0.0.1:808的tomcat應用去處理

 

      proxy_set_header Host $host;

      proxy_set_header X-Real-IP $remote_addr;

      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

以上三行,目的是將代理服務器收到的用戶的信息傳送到真實的tomcat服務器上

      proxy_set_header REMOTE-HOST $remote_addr;

    }

 

  ...

}

  


 

更多詳細瞭解能夠閱讀另外一位博友的文章  

相關文章
相關標籤/搜索