一、nginx的簡單介紹 nginx 結構上分為3大模塊: 1.核心模塊(HTTP模塊、EVENT模塊和MAIL模塊) 2.基礎模塊(HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊) 3.第三方模塊(GI模塊、HTTP Proxy模塊 ...
一、nginx的簡單介紹
nginx 結構上分為3大模塊:
1.核心模塊(HTTP模塊、EVENT模塊和MAIL模塊)
2.基礎模塊(HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊)
3.第三方模塊(GI模塊、HTTP Proxy模塊和HTTP Rewrite模塊)
功能上分為三類
1.Handlers(處理模塊)。此類模塊直接處理請求,併進行輸出內容和修改headers信息等操作。handlers處理器模塊一般只能有一個。
2.Filters(過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最後由Nginx輸出。
3.·Proxies(代理類模塊)。就是Nginx的HTTP Upstream之類的模塊,這些模塊主要與後端一些服務比如fastcgi等操作交互,實現服務代理和負載均衡等功能。
工作方式上nginx分為單工作進程和多工作進程
1.單工作進程模式下,除主進程外,還有一個單線程的工作進程
2.多工作進程模式下,每個工作進程包含多個進程
Nginx預設為單工作進程模式
二、Nginx配置
Nginx的配置文件是純文本的形式,它一般Nginx的安裝目錄的conf目錄下。
整個配置文件以block的形式組織,每個block一般以一個大括弧{}來表示。
block可以分為幾個層次,整個配置文件中Main命令位於最高層,在Main層下麵可以有Events、HTTP等層級,而在HTTP層中又包含Server層,即server block,server block中又可分為location層,並且一個server block中可以包含多個location block。
Nginx配置文件主要分為四部分:
main:全局設置
server:主機設置 -----主機和埠
upstream:負載均衡伺服器設置 -----設置一系列的後端伺服器
location:URL匹配特定位置的設置 -----用於匹配網頁的位置
四者之間的關係是server繼承main,location繼承server,upstream既不會繼承其他設置也不會被繼承。
下麵詳細的介紹下nginx.conf
#user 指定Nginx的worker進程運行用戶及用戶組,預設由nobody賬號運行 user nobody nobody; #worker_processes 指定Nginx要開啟的進程數,建議設置為等於CPU總核心數 worker_processes 2; #error_log:用來定義全局錯誤日誌文件。日誌輸出級別有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日誌最為詳細,而crit輸出日誌最少。 error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; #pid 用來指定進程id的存儲文件位置 pid logs/nginx.pid; #worker_rlimit_nofile:用於綁定worker進程和CPU woker_rlimit_nofile 65535 #設定Nginx的工作模式及連接數上限 events { #use用來指定Nginx的工作模式,Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,對於Linux系統,epoll工作模式是首選 use epoll; #參數“worker_connections”用於定義Nginx每個進程的最大連接數,預設是1024 worker_connections 1024; }
#設定HTTP伺服器
http { log_format main '$remote_addr - $remote_user [$time_local]"$request"' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $upstream_cache_status'; #main為此日誌輸出格式的名稱,可以在access_log命令中引用 #實現對配置文件所包含文件的設定,可以減少主配置文件的複雜度 include mime.types; #預設文件類型 default_type application/octet-stream; #設置客戶端請求的最大的單個文件位元組數 client_max_body_size 8m; #用於指定來自客戶端請求頭的headerbuffer大小。對於大多數請求,1KB的緩衝區大小已經足夠,如果自定義了消息頭或有更大的cookie,可以增加緩衝區大小。這裡設置為32KB client_header_buffer_size 32k; #用來指定客戶端請求中較大的消息頭的緩存最大數量和大小,“4”為個數,“128K”為大小,最大緩存量為4個128KB large_client_header_buffers 4 128k; #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設為 on,如果用來進行下載等應用磁碟IO重負載應用,可設置為off,以平衡磁碟與網路I/O處理速度,降低系統的負載。註意:如果圖片顯示不正常把這個改 成off。 sendfile on; #設置客戶端連接保持活動的超時時間。在超過這個時間之後,伺服器會關閉該連接,單位是秒 keepalive_timeout 60; #伺服器名字的hash表大小 server_names_hash_bucket_size 128;
Nginx中HttpGzip模塊
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 test/css application/xml; gzip_vary on;
gzip:用於設置開啟或者關閉gzip模塊,“gzip on”表示開啟GZIP壓縮,實時壓縮輸出數據流
gzip_min_length:設置允許壓縮的頁面最小位元組數,頁面位元組數從header頭的Content-Length中獲取。預設值是0,不管頁面多大都進行壓縮。建議設置成大於1KB的位元組數,小於1KB可能會越壓縮越大。
gzip_buffers:表示申請4個單位為16KB的記憶體作為壓縮結果流緩存,預設是申請與原始數據大小相同的記憶體空間來存儲GZIP壓縮結果。
gzip_http_version:用於設置識別HTTP協議版本,預設是1.1,目前大部分瀏覽器已經支持GZIP解壓,使用預設即可。
gzip_comp_level:用來指定GZIP壓縮比,1表示壓縮比最小,處理速度最快;9表示壓縮比最大,傳輸速度快,但處理速度最慢,也比較消耗CPU資源
gzip_types:用來指定壓縮的類型,無論是否指定,“text/html”類型總是會被壓縮的
gzip_vary:讓前端的緩存伺服器緩存經過GZIP壓縮的頁面,例如用Squid緩存經過Nginx壓縮的數據
下麵代碼是虛擬主機的相關配置
server { listen 6100; server_name 192.168.10.10 www.lehh.com www.m.lehh.com; charset utf-8; index index.html index.htm index.jsp; root /web/wwwroot/www.ixdba.net access_log logs/www.ixdba.net.access.log main
server:定義虛擬主機開始的關鍵字
server_name:用來指定IP地址或功能變數名稱,多個功能變數名稱之間用空格分開
index:用於設定訪問的預設首頁地址
root:用於指定虛擬主機的網頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑
charset:用於設置網頁的預設編碼格式
access_log:用來指定此虛擬主機的訪問日誌存放路徑,最後的main用於指定訪問日誌的輸出格式
下麵的代碼是URL地址配置設置:
loaction ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ root /web/wwwroot/www.ixdba.net; expires 30d }
URL地址匹配是Nginx配置中最靈活的部分。通過location關鍵字定義了地址
匹配的開始。location支持正則表達式匹配,也支持條件判斷匹配。用戶可以通過location命令實現Nginx對動態、靜態網頁進行過濾處理。
在上面這段location代碼中,所有擴展名以.gif、.jpg、.jpeg、.png、.bmp、.swf結尾的靜態文件都交給Nginx處理,而expires用來指定靜態文件的過期時間,這裡是30天。
同理,下麵這段代碼是將upload和html下所有文件都交給Nginx來處理,當然,upload和html目錄包含在/web/wwwroot/www.ixdba.net目錄中。
暫時先寫這麼多後面內容還很多明天更新重定向和靜態緩存的相關配置。