Nginx基本配置詳解
Nginx在專案使用中,使用最多的三個核心功能是反向代理、負載均衡和靜態伺服器。
1、nginx支援的負載均衡排程演算法方式:
1)weight輪詢(預設):接收到的請求按照順序逐一分配到不同的後端伺服器,即使在使用過程中,某一臺後端伺服器宕 機,nginx會自動將該伺服器剔除出佇列,請求受理情況不會受到任何影響。 這種方式下,可以給 不同的後端伺服器設定一個權重值(weight),用於調整不同的伺服器上請求的分配率;權重資料 越大,被分配到請求的機率越大;該權重值,主要是針對實際工作環境中不同的後端伺服器硬體配 置進行調整的。
2)ip_hash:每個請求按照發起客戶端的ip的hash結果進行匹配,這樣的演算法下一個固定ip地址的客戶端總會訪問到同一個後 端伺服器,這也在一定程度上解決了叢集部署環境下session共享的問題。
3)fair:智慧調整排程演算法,動態的根據後端伺服器的請求處理到響應的時間進行均衡分配,響應時間短處理效率高的伺服器 分配到請求的概率高,響應時間長處理效率低的伺服器分配到的請求少;結合了前兩者的優點的一種排程演算法。但是 需要注意的是nginx預設不支援fair演算法,如果要使用這種排程演算法,請安裝upstream_fair模組 4)url_hash:按照訪問的url的hash結果分配請求,每個請求的url會指向後端固定的某個伺服器,可以在nginx作為靜態服務 器的情況下提高快取效率。同樣要注意nginx預設不支援這種排程演算法,需要安裝nginx的hash軟體包
2、nginx配置檔案:nginx.conf 1)主要由6個模組組成:
(1)main:用於進行nginx全域性資訊的配置 user nobody nobody; # user用來指定nginx worker程序執行使用者以及使用者組,預設nobody賬號執行 worker_processes 2; # worker_processes指定nginx要開啟的子程序數量,執行過程中監控每個程序消耗記憶體(一般幾M~幾十M不等) 根據實際情況進行調整,通常數量是CPU核心數量的整數倍 error_log logs/error.log error_log logs/error.log notice error_log logs/error.log info # error_log定義錯誤日誌檔案的位置及輸出級別【debug / info / notice / warn / error / crit】 pid logs/nginx.pid # pid用來指定程序id的儲存檔案的位置 worker_rlimit_nofile 1024; # worker_rlimit_nofile用於指定一個程序可以開啟最多檔案數量的描述 (2)events:用於nginx工作模式的配置 event { worker_connections 1024; # worker_connections 指定最大可以同時接收的連線數量,這裡一定要注意,最大連線數量是和worker processes 共同決定的。 multi_accept on; # multi_accept 配置指定nginx在收到一個新連線通知後儘可能多的接受更多的連線 use epoll; # use epoll 配置指定了執行緒輪詢的方法,如果是linux2.6+,使用epoll,如果是BSD如Mac請使用Kqueue } (3)http:用於進行http協議資訊的一些配置 http { ## # 基礎配置 ##
sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off;
# server_names_hash_bucket_size 64; # server_name_in_redirect off;
include /etc/nginx/mime.types; default_type application/octet-stream;
## # SSL證書配置 ##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on;
## # 日誌配置 ##
access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
## # Gzip 壓縮配置 ##
gzip on; gzip_disable "msie6";
# gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript/text/xml application/xml application/xml+rss text/javascript;
## # 虛擬主機配置 ##
include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; A.基礎配置 sendfile on:配置on讓sendfile發揮作用,將檔案的回寫過程交給資料緩衝去去完成,而不是放在應用中完成,這 樣的話在效能提升有有好處 tc_nopush on:讓nginx在一個數據包中傳送所有的標頭檔案,而不是一個一個單獨發 tcp_nodelay on:讓nginx不要快取資料,而是一段一段傳送,如果資料的傳輸有實時性的要求的話可以配置它, 傳送完一小段資料就立刻能得到返回值,但是不要濫用哦
keepalive_timeout 10:給客戶端分配連線超時時間,伺服器會在這個時間過後關閉連線。一般設定時間較短,可 以讓nginx工作持續性更好 client_header_timeout 10:設定請求頭的超時時間 client_body_timeout 10:設定請求體的超時時間 send_timeout 10:指定客戶端響應超時時間,如果客戶端兩次操作間隔超過這個時間,伺服器就會關閉這個連結
limit_conn_zone $binary_remote_addr zone=addr:5m :設定用於儲存各種key的共享記憶體的引數, limit_conn addr 100: 給定的key設定最大連線數
server_tokens:雖然不會讓nginx執行速度更快,但是可以在錯誤頁面關閉nginx版本提示,對於網站安全性的提 升有好處哦 include /etc/nginx/mime.types:指定在當前檔案中包含另一個檔案的指令 default_type application/octet-stream:指定預設處理的檔案型別可以是二進位制 type_hash_max_size 2048:混淆資料,影響三列衝突率,值越大消耗記憶體越多,雜湊key衝突率會降低,檢索速 度更快; 值越小key,佔用記憶體較少,衝突率越高,檢索速度變慢 B.SSL證書配置 ssl_protocols:指令用於啟動特定的加密協議,nginx在1.1.13和1.0.12版本後預設是ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2,TLSv1.1與TLSv1.2要確保OpenSSL >= 1.0.1 ,SSLv3 現在還有很多地方在 用但有不少被攻擊的漏洞。 ssl prefer server ciphers:設定協商加密演算法時,優先使用我們服務端的加密套件, 而不是客戶端瀏覽器的加密套件 C.日誌配置 access_log logs/access.log:設定儲存訪問記錄的日誌 error_log logs/error.log:設定儲存記錄錯誤發生的日誌 D.Gzip配置 gzip :是告訴nginx採用gzip壓縮的形式傳送資料。這將會減少我們傳送的資料量。 gzip_disable :為指定的客戶端禁用gzip功能。我們設定成IE6或者更低版本以使我們的方案能夠廣泛相容。 gzip_static :告訴nginx在壓縮資源之前,先查詢是否有預先gzip處理過的資源。這要求你預先壓縮你的檔案(在 這個例子中被註釋掉了),從而允許你使用最高壓縮比,這樣nginx就不用再壓縮這些檔案了。 gzip_proxied :允許或者禁止壓縮基於請求和響應的響應流。我們設定為any,意味著將會壓縮所有的請求。 gzip_min_length :設定對資料啟用壓縮的最少位元組數。如果一個請求小於1000位元組,我們最好不要壓縮它, 因為壓縮這些小的資料會降低處理此請求的所有程序的速度。 gzip_comp_level :設定資料的壓縮等級。這個等級可以是1-9之間的任意數值,9是最慢但是壓縮比最大的。 我們設定為4,這是一個比較折中的設定。 gzip_type :設定需要壓縮的資料格式。上面例子中已經有一些了,你也可以再新增更多的格式。 E.檔案快取配置 open_file_cache :開啟快取的同時也指定了快取最大數目,以及快取的時間。我們可以設定一個相對高的最大 時間,這樣我們可以在它們不活動超過20秒後清除掉。 open_file_cache_valid :在open_file_cache中指定檢測正確資訊的間隔時間。 open_file_cache_min_uses :定義了open_file_cache中指令引數不活動時間期間裡最小的檔案數。 open_file_cache_errors :指定了當搜尋一個檔案時是否快取錯誤資訊,也包括再次給配置中新增檔案。我們也 包括了伺服器模組,這些是在不同檔案中定義的。如果你的伺服器模組不在這些位 置,你就得修改這一行來指定正確的位置。 (4)server:是http模組中的一個子模組,用於進行伺服器訪問資訊的配置 server { listen 80; server_name localhost 192.168.1.100; root /nginx/www; index index.php index.html index.html; charset utf-8; access_log logs/access.log; error_log logs/error.log; ...... } server:一個虛擬主機的配置,一個http中可以配置多個server
server_name:用力啊指定ip地址或者域名,多個配置之間用空格分隔
root:表示整個server虛擬主機內的根目錄,所有當前主機中web專案的根目錄
index:使用者訪問web網站時的全域性首頁
charset:用於設定www/路徑中配置的網頁的預設編碼格式
access_log:用於指定該虛擬主機伺服器中的訪問記錄日誌存放路徑
error_log:用於指定該虛擬主機伺服器中訪問錯誤日誌的存放路徑 (5)location:是nginx配置中出現最多的一個配置,主要用於配置路由訪問資訊, 在路由訪問資訊配置中關聯到反向代理、負載均衡等等各項功能 A.基本配置 location / { root /nginx/www; index index.php index.html index.htm; } location /:表示匹配訪問根目錄 root:用於指定訪問根目錄時,訪問虛擬主機的web目錄 index:在不指定訪問具體資源時,預設展示的資原始檔列表 B.反向代理配置方式,通過反向代理代理伺服器訪問模式,通過proxy_set配置讓客戶端訪問透明化 location / { proxy_pass http://localhost:8888; proxy_set_header X-real-ip $remote_addr; proxy_set_header Host $http_host; } C.uwsgi配置,wsgi模式下的伺服器配置訪問方式
location / { include uwsgi_params; uwsgi_pass localhost:8888 } (6)upstream:主要負責負載均衡的配置,通過預設的輪詢排程方式來分發請求到後端伺服器 upstream name { ip_hash; server 192.168.1.100:8000; server 192.168.1.100:8001 down; server 192.168.1.100:8002 max_fails=3; server 192.168.1.100:8003 fail_timeout=20s; server 192.168.1.100:8004 max_fails=3 fail_timeout=20s; } ip_hash:指定請求排程演算法,預設是weight權重輪詢排程,可以指定 server host:port:分發伺服器的列表配置 down:表示該主機暫停服務 max_fails:表示失敗最大次數,超過失敗最大次數暫停服務 fail_timeout:表示如果請求受理失敗,暫停指定的時間之後重新發起請求