1. 程式人生 > >Nginx主配置檔案nginx.conf超詳細中文詳解

Nginx主配置檔案nginx.conf超詳細中文詳解

第1章 簡介

第2章 nginx配置解釋圖解

第3章 Nginx核心配置檔案nginx.conf史上最細中文詳解

3.1 定義Nginx執行的使用者和使用者組

3.2 nginxworker程序數,即處理請求的程序(熟稱負責接客的服務員)

3.3 cpu親和力配置,讓不同的程序使用不同的cpu

3.4 全域性錯誤日誌定義型別,[ debug|info|notice|warn|error|crit]

3.5 把程序號記錄到檔案

3.6 Nginx worker最大開啟檔案數,可設定為系統優化後的ulimit -HSn的結果

3.7 IO事件模型與worker程序連線數設定

3.8 http模組設定部分

3.9 設定基於域名的虛擬主機部分

3.10 反向代理負載均衡配置(代理blog.oldboyedu.com服務)

3.11 設定檢視Nginx狀態的地址

3.12 設定java程式動靜分離反向代理負載均衡配置

 

 

第1章 作者簡介

老男孩,北京老男孩IT教育創始人,暢銷圖書作者,51CTO金牌講師,16年運維經驗及培訓經驗, IT界頂級Linux叢集架構實戰與教育專家。

國內IT教育實戰心理學運維思想體系創始人,將心理學運維思想大量應用於教學培訓實踐,成就屌絲無數。所教學生平均就業工資及後期發展速度連續多年在國內同行業排名第一!

老男孩老師個人部落格:http://oldboy.blog.51cto.com/http://blog.oldboyedu.com

 

第2章 nginx配置解釋圖解

 

圖1-1 理解nginx http協議相關引數圖解

 

 

圖1-2 根據http原理及Fastcgi原理講解fastcgi引數優化圖解

 

 

第3章 Nginx核心配置檔案nginx.conf史上最細中文詳解

3.1 定義Nginx執行的使用者和使用者組

user nginx nginx; #

改為特殊的使用者和組

 

3.2 nginxworker程序數,即處理請求的程序(熟稱負責接客的服務員)

worker_processes 8;  #初始可設定為CPU總核數

 

3.3 cpu親和力配置,讓不同的程序使用不同的cpu

worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;

 

3.4 全域性錯誤日誌定義型別,[ debug|info|notice|warn|error|crit]

error_log logs/error.log error;  #一定要設定warn級別以上

 

3.5 把程序號記錄到檔案

pid logs/nginx.pid; #用於管理nginx程序

 

3.6 Nginxworker最大開啟檔案數,可設定為系統優化後的ulimit -HSn的結果

worker_rlimit_nofile 65535;

 

3.7 IO事件模型與worker程序連線數設定

events

{

#epoll模型是Linux 2.6以上版本核心中的高效能網路I/O模型

use epoll;

#單個worker程序最大連線數

worker_connections 10240; #nginx最大連線數=worker連線數*worker程序數

}

3.8 http模組設定部分

http

{

server_tokens off;   #隱藏響應header和錯誤通知中的版本號

include mime.types;  #副檔名與檔案型別對映表

default_type application/octet-stream;#預設檔案型別

server_names_hash_max_size 512;     #服務域名的最大hash表大小

server_names_hash_bucket_size 128;#服務域名的hash表大小

#開啟高效檔案傳輸模式,實現核心零拷貝

sendfile on;

#啟用tcp_nopush引數可以允許把httpresponse header和檔案的開始放在一個檔案裡釋出,積極的作用是減少網路報文段的數量

tcp_nopush on;

#啟用tcp_nodelay,核心會等待將更多的位元組組成一個數據包,從而提高I/O效能

tcp_nodelay on;

#連線超時時間,單位是秒

keepalive_timeout 120;

#目錄列表訪問引數,合適http下載,預設關閉。

autoindex off;

#讀取客戶端請求頭的超時時間(參看老男孩的書籍理解http協議原理)

client_header_timeout 15s;

#讀取客戶端請求主體的超時時間(參看老男孩的書籍理解http協議原理)

client_body_timeout 60s;

#設定讀取客戶端請求主體的最大大小。(參看老男孩的書籍理解http協議原理)

client_max_body_size 8m;

#設定伺服器端傳送http響應資訊到客戶端的超時時間

send_timeout 60s;

#設定訪問日誌的日誌記錄格式,每列細節參考《跟老男孩學linux運維》:Web叢集實戰

log_format main  '$remote_addr - $remote_user$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '  '"$http_user_agent"$http_x_forwarded_for"';

#FastCGI引數是和動態伺服器互動起作用的引數

#設定Nginx伺服器和後端FastCGI伺服器連線的超時時間

fastcgi_connect_timeout 60;

#設定Nginx允許FastCGI服務端返回資料的超時時間

fastcgi_send_timeout 60;

#設定Nginx從FastCGI服務端讀取響應資訊的超時時間

fastcgi_read_timeout 60;

#設定用來讀取從FastCGI服務端收到的第一部分響應資訊的緩衝區大小

fastcgi_buffer_size 64k;

#設定用來讀取從FastCGI服務端收到的響應資訊的緩衝區大小以及緩衝區數量

fastcgi_buffers 4 64k;

#設定系統很忙時可以使用的fastcgi_buffers大小,推薦大小為fastcgi_buffers *2。

fastcgi_busy_buffers_size 128k;

#fastcti臨時檔案的大小,可設定128-256K

fastcgi_temp_file_write_size 128k;

#gzip壓縮模組部分(此部分對於網站優化極其重要)

#開啟gzip壓縮功能。

gzip on;

#設定允許壓縮的頁面最小位元組數,頁面位元組數從header頭的Content-Length中獲取。預設值是0,表示不管頁面多大都進行壓縮。建議設定成大於1K。如果小於1K可能會越壓越大。

gzip_min_length 1k;

#壓縮緩衝區大小。表示申請4個單位為16K的記憶體作為壓縮結果流快取,預設值是申請與原始資料大小相同的記憶體空間來儲存gzip壓縮結果。

gzip_buffers    4 16k;

#壓縮版本(預設1.1,前端為squid2.5時使用1.0)用於設定識別HTTP協議版本,預設是1.1,目前大部分瀏覽器已經支援GZIP解壓,使用預設即可。

gzip_http_version 1.1;

#壓縮比率。用來指定GZIP壓縮比,1壓縮比最小,處理速度最快;9壓縮比最大,傳輸速度快,但處理最慢,也比較消耗cpu資源。

gzip_comp_level 2;

#用來指定壓縮的型別,“text/html”型別總是會被壓縮,這個就是HTTP原理部分講的媒體型別。

gzip_typestext/plain application/x-javascript text/css application/xml;

#vary header支援。該選項可以讓前端的快取伺服器快取經過GZIP壓縮的頁面,例如用Squid快取經過Nginx壓縮的資料。

gzip_vary on;

#反向代理負載均衡設定部分(可選)

#upstream表示負載伺服器池,定義名字為blog.oldboyedu.com的伺服器池

upstream blog.oldboyedu.com {

#server是伺服器節點起始標籤,其後是節點地址,可為域名或IP,weight是權重,可以根據機器配置定義權重。weigth引數表示權值,權值越高被分配到的機率越大。

ip_hash; #排程演算法,預設是rr輪詢。

server 172.16.1.7:80 weight=1;

server 172.16.1.8:80 weight=1;

server 172.16.1.9:80 weight=1 backup; #backup表示熱備

}

3.9 設定基於域名的虛擬主機部分

###oldboy www web php server

    server {

       listen       80; #監聽的埠,也可以是172.16.1.7:80形式

       server_name  www.oldboyedu.comoldboyedu.com; #域名

       root   html/blog; #站點根目錄,即網站程式放的目錄

       location / {  #預設訪問的location標籤段

           index  index.php index.htmlindex.htm; #首頁排序

        }

    location ~.*.(php|php5)?$ { #符合php副檔名的請求排程到fcgi server

      fastcgi_pass 127.0.0.1:9000; #拋給本機的9000埠(php fastcgi server)

      fastcgi_index index.php; #設定動態首頁

      include fastcgi.conf; #設定和fastcgi互動的相關引數包含檔案

    }

#將符合靜態檔案的圖片視訊流媒體等設定expries快取引數,要求瀏覽器快取。

    location~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {

       expires      10y; #客戶端快取上述靜態資料10年

}

#將符合js,css檔案的等設定expries快取引數,要求瀏覽器快取。

    location~ .*\.(js|css)?$ {

       expires      30d; #客戶端快取上述js,css資料30天

    }

       access_log /app/logs/www_access.log  main; #根據日誌格式記錄使用者訪問的日誌

    }

 

3.10 反向代理負載均衡配置(代理blog.oldboyedu.com服務)

server {

       listen       80; #監聽的埠,也可以是172.16.1.7:80形式

       server_name  blog.oldboyedu.com; #代理的服務域名

       location / {

       #將訪問blog.oldboyedu.com的所有請求都發送到upstream定義的伺服器節點池。

        proxy_passhttp://blog.oldboyedu.com;

        #在代理向後端伺服器傳送的http請求頭中加入host欄位資訊,用於當後端伺服器配置有多個虛擬主機時,可以識別代理的是哪個虛擬主機。這是節點伺服器多虛擬主機時的關鍵配置。

        proxy_set_headerHost  $host;

        #在代理向後端伺服器傳送的http請求頭中加入X-Forwarded-For欄位資訊,用於後端伺服器程式、日誌等接收記錄真實使用者的IP,而不是代理伺服器的IP。

        proxy_set_header X-Forwarded-For$remote_addr;

#設定反向代理與後端節點伺服器連線的超時時間,即發起握手等候響應的超時時間。

        proxy_connect_timeout60;

#設定代理後端伺服器的資料回傳時間

        proxy_send_timeout 60;

#設定Nginx從代理的後端伺服器獲取資訊的時間

        proxy_read_timeout 60;

#設定緩衝區的大小

        proxy_buffer_size 4k;

#設定緩衝區的數量和大小。nginx從代理的後端伺服器獲取的響應資訊,會放置到緩衝區。

        proxy_buffers 4 32k;

#設定系統很忙時可以使用的proxy_buffers大小

       proxy_busy_buffers_size 64k;

#設定proxy快取臨時檔案的大小

       proxy_temp_file_write_size 64k;

#對於以上引數的詳細理解可見本文開頭圖解。

       }

access_log off; #反向代理如果併發大,務必要關閉日誌,否則IO吃緊。

 

    }

 

3.11 設定檢視Nginx狀態的地址

location /status {

stub_status on; #開啟狀態功能

access_log off; #關閉記錄日誌

auth_basic “Oldboy Server Status”; #設定基本認證提示

auth_basic_user_file conf/htpasswd; #校驗密碼檔案

}

 

3.12 設定java程式動靜分離反向代理負載均衡配置

#Oldboy Bbs server

 server {

     listen       80; #監聽的埠,也可以是172.16.1.7:80形式

     server_name  bbs.oldboyedu.com; #代理的域名

     root  html/bbs; #程式目錄

     index index.php index.html index.htm;

#所有靜態檔案由nginx服務處理

location ~.*.(htm|html|gif|jpg|jpeg|png|swf|flv)$ {

 expires 3650d;

}

location ~ .*.(js|css)?$ {

 expires 30d;

}

#所有java相關副檔名均交由tomcat或resin服務處理。

location ~ .(jsp|jspx|do)?$ {

#將訪問blog.oldboyedu.com的所有請求都發送到upstream定義的伺服器節點池。

proxy_pass http://127.0.0.1:8080;

#在代理向後端伺服器傳送的http請求頭中加入host欄位資訊,用於當後端伺服器配置有多個虛擬主機時,可以識別代理的是哪個虛擬主機。這是節點伺服器多虛擬主機時的關鍵配置。

        proxy_set_header Host  $host;

 #在代理向後端伺服器傳送的http請求頭中加入X-Forwarded-For欄位資訊,用於後端伺服器程式、日誌等接收記錄真實使用者的IP,而不是代理伺服器的IP。

        proxy_set_headerX-Forwarded-For $remote_addr;

}

        access_log /app/logs/bbs_access.log  main; #記錄日誌

    }

}