Nginx 虛擬主機與請求分發

前言:前端

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處理

相關文章
相關標籤/搜索