前言:前端
Nginx的靜態web服務器主要是有ngx_http_core_module模塊實現,Nginx靜態web服務器這幾篇文章記錄如何配置一個包含基本功能的web靜態服務器,主要是如下幾個方面:nginx
1.虛擬主機與請求分發web
2.文件路徑的定義正則表達式
3.內存與磁盤資源的分配api
4.網絡鏈接的設置bash
5.MIME類型的設置服務器
6.對客戶端請求的限制網絡
7.文件操做的優化併發
8.對客戶端請求的特殊處理tcp
這篇文章主要記錄如何配置虛擬主機與請求分發,後面幾點會後面的文章中一一記錄。
因爲IP地址的數量有限(這個應該都聽過了,IP4已經沒法知足要求了),所以常常會存在多個域名對應一個IP地址的狀況,這時就能夠在Nginx配置文件中按照server_name(對應請求中的域名)來定義虛擬主機,每個server都是一個虛擬主機,它處理與主機域名相對應的請求,所以一臺服務器上的Nginx能夠處理不一樣主機域名的HTTP請求。
1)監聽端口
語法:listen address:port[default(deprecated in 0.8.21)|default_server|
[backlog=num|rcvbuf=size|sndbuf=size|accept_filter=filter|deferred|bind|ipv6only=[on|off]|ssl]];
默認:listen 80;
listen參數決定了Nginx服務如何監聽端口,其中能夠配置IP地址、端口、主機名,十分靈活,以下
listen 127.0.0.1:8000; listen 127.0.0.1; #默認監聽80端口 listen 8000; listen *:8000; listen localhost:8000; listen [fe80::1]; #IPV6配置 listen [:::a8c9:1234]:80;#IPV6配置 listen 443 default_server ssl; listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
接下來介紹一下listen參數的意義:
1.default:將所在的server塊做爲整個web服務的默認server塊,默認nginx.conf中第一個server塊爲默認server。沒法匹配任意一個主機域名的請求都會交給默認server處理。
2.default_server:與default一致。
3.backlog=num:表示tcp中backlog隊列的大小,-1表示不作設置。在TCP三次握手的過程當中,進程尚未開始處理監聽句柄時,這些鏈接就會放在backlog隊列中等待處理,若是backlog隊列滿了,新的TCP請求將不會創建鏈接。
4.rcvbuf=size:設置監聽句柄的SO_RCVBUF參數。
5.sndbuf=size:設置監聽句柄的SO_SNDBUF參數。
6.accept_filter:設置accept過濾器,只對FreeBSD操做系統有用。
7.deferred:設置該參數以後,worker不會被調度去處理僅僅完成TCP三次握手的鏈接,只要在用戶真正的發送請求數據的時候(內核已經在網卡中收到請求數據包),內核纔會調度worker進程去處理這個鏈接。該參數適合於大併發的狀況,它能夠有效的減輕worker進程的負擔。
8.bind:綁定當前端口/地址對,當同時對一個端口監聽多個地址時生效。
9.ssl:當前監聽端口必須基於ssl協議。
2)主機名稱
語法:server_name name[...];
默認:server_name "";
配置塊:server
server_name後面能夠跟多個主機名稱,達到同時監聽多個域名的效果,以下
server_name www.testweb.com、 download.testweb.com;
在處理http請求時,Nginx將會獲取請求中header中的Host信息,將其與server中的server_name匹配,來決定哪個server來處理這個請求,也可能一個請求與多個server匹配,這將涉及到server_name匹配的優先級:
1.選擇全部字符串徹底匹配的server_name
2.選擇通配符在前面的server_name
3.選擇通配符在後面的server_name
4.選擇使用正則表達式匹配的server_name
5.選擇默認的server_name塊
6.選擇第一個listen端口匹配的server塊
3)散列表內存佔用
語法:server_names_hadh_bucket_size size;
默認:server_names_hash_bucket_size 32|64|128;
配置塊:http、server、location
爲了提升快速尋找到server_name的能力,Nginx使用散列表來保存server_name。該參數設置了每個散列表佔用內存大小。
4)server_names_hash_max_size
語法:server_names_hash_max_size size;
默認:server_names_hash_max_size 512;
配置塊:http、server、location
該參數會影響散列表的衝突率,該參數越大,消耗內存越多,可是散列key的衝突就越低,檢索速度越快,反之亦然。
5)重定向主機名稱處理
語法:server_name_in_redirect on|off;
默認:server_name_in_redirect on;
配置塊:http、server或者location
該配置須要和server_name一塊兒,在打開時,表示在重定向請求時會使用server_name中配置的第一個主機名替代原先請求中的host頭。關閉的話在重定向時仍是使用請求自己的host頭。
6)location
語法:location [=|~|~*|^~|] ...
配置塊:server
location會嘗試使用用戶請求中的url來進行匹配,若是匹配成功,就選擇location塊中的 配置來處理用戶的請求。location的匹配規則有多種,下面簡單介紹一下;
1.=表示將url進行徹底匹配,如:
location = /api/instance/ { #location配置 }不
2.~表示匹配時大小寫敏感
3.~*表示匹配時大小寫不敏感
4.^~表示匹配時只須要前半部分匹配便可
5.@表示只處理Nginx服務內部的重定向,不直接處理用戶請求
6./表示匹配全部請求
注:一個請求可能會匹配多個location,可是每個請求都會被第一個匹配的location處理