1. 程式人生 > >Nginx服務基本概念、配置詳解和反向代理

Nginx服務基本概念、配置詳解和反向代理

                                Nginx服務基本概念、配置詳解和反向代理

-----------------------------------------------------------------------------------------------------------------------------------------


一、httpd MPM(多路處理模組):

(1)prefork:程序模型,兩級結構,root使用者開啟主程序master負責生成子程序apache,每個子程序負責響應一個請求,相容性相對於其它兩種模式是最好的

(2)worker:執行緒模型,三級結構,主程序master負責生成子程序,每個子程序負責生成多個執行緒,每個執行緒響應一個請求

(3)event:執行緒模型,三級結構,主程序master負責生成子程序,每個子程序響應多個請求

二、I/O介紹:

PIO:應用程式的輸入輸出,file-->cpu-->ram,每次檔案輸入輸出都要經過cpu,造成cpu很忙

DMA:直接記憶體訪問,當cpu收到請求需要讀取一個檔案,cpu只需要傳送一個指令就完了,不參與IO的過程,剩下的工作是DMAC(直接記憶體訪問控制器)工作,將磁碟上的檔案讀入記憶體中

image.png

1、I/O分類:

網路IO:本質是socket讀取

磁碟IO:

2、、每次IO,都要經由兩個階段:

第一步:將資料從磁碟檔案先載入至核心記憶體空間(緩衝區),等待資料準備完成,時間較長

第二步:將資料從核心緩衝區複製到使用者空間的程序的記憶體中,時間較短

3、同步/非同步:關注的是訊息通訊機制

同步:synchronous,呼叫者等待被呼叫者返回訊息,才能繼續執行

非同步:asynchronous,被呼叫者通過狀態、通知或回撥機制主動通知呼叫者被呼叫者的執行狀態

4、阻塞/非阻塞:關注呼叫者在等待結果返回之前所處的狀態

阻塞:blocking,指IO操作需要徹底完成後才返回到使用者空間,呼叫結果返回之前,呼叫者被掛起

非阻塞:nonblocking,指IO操作被呼叫後立即返回給使用者一個狀態值,無需等到IO操作徹底完成,最終的呼叫結果返回之前,呼叫者不會被掛起

同步阻塞:呼叫者等待被呼叫者返回訊息,呼叫結果返回之前,呼叫者被掛起

同步非阻塞

非同步阻塞

非同步非阻塞:最佳選擇

5、I/O模型:

阻塞型、非阻塞型、複用型、訊號驅動型、非同步

6、同步阻塞IO模型

image.png

(1)同步阻塞IO模型是最簡單的IO模型,使用者執行緒在核心進行IO操作時被阻塞

(2)使用者執行緒通過系統呼叫read發起IO讀操作,由使用者空間轉到核心空間。核心等到資料包到達後,然後將接收的資料拷貝到使用者空間,完成read操作

(3)使用者需要等待read將資料讀取到buffer後,才繼續處理接收的資料。整個IO請求的過程中,使用者執行緒是被阻塞的,這導致使用者在發起IO請求時,不能做任何事情,對CPU的資源利用率不夠

7、同步非阻塞IO模型,程式時不時詢問核心資料是否準備好

image.png

(1)使用者執行緒發起IO請求時立即返回。但並未讀取到任何資料,使用者執行緒需要不斷地發起IO請求,直到資料到達後,才真正讀取到資料,繼續執行。即 “輪詢”機制

(2)整個IO請求的過程中,雖然使用者執行緒每次發起IO請求後可以立即返回,但是為了等到資料,仍需要不斷地輪詢、重複請求,消耗了大量的CPU的資源

(3)是比較浪費CPU的方式,一般很少直接使用這種模型,而是在其他IO模型中使用非阻塞IO這一特性

8、IO多路複用模型

image.png

(1)多個連線(使用者請求,圖中的select處)共用一個等待機制,本模型會阻塞程序,但是程序是阻塞在select或者poll這兩個系統呼叫上,而不是阻塞在真正的IO操作上

(2)使用者首先將需要進行IO操作新增到select中,繼續執行做其他的工作(非同步),同時等待select系統呼叫返回。當資料到達時,IO被啟用,select函式返回。使用者執行緒正式發起read請求,讀取資料並繼續執行

(3)從流程上來看,使用select函式進行IO請求和同步阻塞模型沒有太大的區別,甚至還多了新增監視IO,以及呼叫select函式的額外操作,效率更差。並且阻塞了兩次,但是第一次阻塞在select上時,select可以監控多個IO上是否已有IO操作準備就緒,即可達到在同一個執行緒內同時處理多個IO請求的目的。而不像阻塞IO那種,一次只能監控一個IO

(4)雖然上述方式允許單執行緒內處理多個IO請求,但是每個IO請求的過程還是阻塞的(在select函式上阻塞),平均時間甚至比同步阻塞IO模型還要長。如果使用者執行緒只是註冊自己需要的IO請求,然後去做自己的事情,等到資料到來時再進行處理,則可以提高CPU的利用率

(5)IO多路複用是最常使用的IO模型,但是其非同步程度還不夠“徹底”,因它使用了會阻塞執行緒的select系統呼叫。因此IO多路複用只能稱為非同步阻塞IO模型,而非真正的非同步IO

(6)IO多路複用是指核心一旦發現程序指定的一個或者多個IO條件準備讀取,就通知該程序

(7)IO多路複用適用如下場合:

當客戶端處理多個描述符時(一般是互動式輸入和網路套介面),必須使用I/O複用

當一個客戶端同時處理多個套接字時,此情況可能的但很少出現

當一個TCP伺服器既要處理監聽套接字,又要處理已連線套接字,一般也要用到I/O複用

當一個伺服器即要處理TCP,又要處理UDP,一般要使用I/O複用

當一個伺服器要處理多個服務或多個協議,一般要使用I/O複用

9、訊號驅動IO模型

image.png

(1)訊號驅動IO:signal-driven I/O

(2)使用者程序可以通過sigaction系統呼叫註冊一個訊號處理程式,然後主程式可以繼續向下執行,當有IO操作準備就緒時,由核心通知觸發一個SIGIO訊號處理程式執行,然後將使用者程序所需要的資料從核心空間拷貝到使用者空間

(3)此模型的優勢在於等待資料報到達期間程序不被阻塞。使用者主程式可以繼續執行,只要等待來自訊號處理函式的通知

(4)該模型並不常用

10、非同步IO模型

image.png

(1)非同步IO與訊號驅動IO最主要的區別是訊號驅動IO是由核心通知何時可以進行IO操作,而非同步IO則是由核心告訴使用者執行緒IO操作何時完成。訊號驅動IO當核心通知觸發訊號處理程式時,訊號處理程式還需要阻塞在從核心空間緩衝區拷貝資料到使用者空間緩衝區這個階段,而非同步IO直接是在第二個階段完成後,核心直接通知使用者執行緒可以進行後續操作了

(2)相比於IO多路複用模型,非同步IO並不十分常用,不少高效能併發服務程式使用IO多路複用模型+多執行緒任務處理的架構基本可以滿足需求。目前作業系統對非同步IO的支援並非特別完善,更多的是採用IO多路複用模型模擬非同步IO的方式(IO事件觸發時不直接通知使用者執行緒,而是將資料讀寫完畢後放到使用者指定的緩衝區中)

11、五種IO模型總結

image.png

blocked:阻塞

sysnchronous:同步

asynchronous:非同步

12、I/O模型的具體實現

主要實現方式有以下幾種:

Select:Linux實現對應,I/O複用模型,BSD4.2最早實現

Poll:Linux實現,對應I/O複用模型,System V unix最早實現

Epoll:Linux實現,對應I/O複用模型,具有訊號驅動I/O模型的某些特性

Kqueue:FreeBSD實現,對應I/O複用模型,具有訊號驅動I/O模型某些特性

/dev/poll:SUN的Solaris實現,對應I/O複用模型,具有訊號驅動I/O模型的某些特性

Iocp Windows實現,對應第5種(非同步I/O)模型

13、select/poll/epoll

image.png

遍歷:逐個去尋找

image.png

(1)Select:POSIX所規定,目前幾乎在所有的平臺上支援,其良好跨平臺支援也是它的一個優點,本質上是通過設定或者檢查存放fd標誌位的資料結構來進行下一步處理,apache用的此機制

缺點:

單個程序可監視的fd數量被限制,即能監聽埠的數量有限,cat /proc/sys/fs/file-max

對socket是線性掃描,即採用輪詢的方法,效率較低

select 採取了記憶體拷貝方法來實現核心將 FD 訊息通知給使用者空間,這樣一個用來存放大量fd的資料結構,這樣會使得使用者空間和核心空間在傳遞該結構時複製開銷大

(2)poll:本質上和select沒有區別,它將使用者傳入的陣列拷貝到核心空間,然後查詢每個fd對應的裝置狀態

其沒有最大連線數的限制,原因是它是基於連結串列來儲存的

大量的fd的陣列被整體複製於使用者態和核心地址空間之間,而不管這樣的複製是不是有意義

poll特點是“水平觸發”,如果報告了fd後,沒有被處理,那麼下次poll時會再次報告該fd

邊緣觸發:只通知一次

(3)epoll:在Linux 2.6核心中提出的select和poll的增強版本,nginx使用此機制

支援水平觸發LT和邊緣觸發ET,最大的特點在於邊緣觸發,它只告訴程序哪些fd剛剛變為就需態,並且只會通知一次

使用“事件”的就緒通知方式,通過epoll_ctl註冊fd,一旦該fd就緒,核心就會採用類似callback的回撥機制來啟用該fd,epoll_wait便可以收到通知

優點:

沒有最大併發連線的限制:能開啟的FD的上限遠大於1024(1G的記憶體能監聽約10萬個埠)

效率提升:非輪詢的方式,不會隨著FD數目的增加而效率下降;只有活躍可用的FD才會呼叫callback函式,即epoll最大的優點就在於它只管理“活躍”的連線,而跟連線總數無關

記憶體拷貝,利用mmap(Memory Mapping)加速與核心空間的訊息傳遞;即epoll使用mmap減少複製開銷

三、NGINX介紹

1、Nginx:engine X ,2002年,開源,商業版

2、NGINX是免費,開源,高效能的HTTP和反向代理伺服器,郵件代理伺服器,通用TCP/UDP代理伺服器

3、解決C10K問題(10K Connections)

4、官網:http://nginx.org

5、二次開發版:

Tengine, OpenResty(章亦春)

6、正向代理和反向代理

image.png

7、特性:

模組化設計,較好的擴充套件性

高可靠性

支援熱部署:不停機更新配置檔案,升級版本,更換日誌檔案

低記憶體消耗:10000個keep-alive連線模式下的非活動連線,僅需2.5M記憶體

event-driven,aio,mmap,sendfile

8、基本功能:

靜態資源的web伺服器

http協議反向代理伺服器

pop3/imap4協議反向代理伺服器

FastCGI(LNMP),uWSGI(python)等協議

模組化(非DSO),如zip,SSL模組

四、nginx的程式架構

1、web服務相關的功能:

虛擬主機(server)

支援 keep-alive 和管道連線

訪問日誌(支援基於日誌緩衝提高其效能)

url rewirte

路徑別名

基於IP及使用者的訪問控制

支援速率限制及併發數限制

重新配置和線上升級而無須中斷客戶的工作程序

Memcached 的 GET 介面

image.png

2、nginx的程式架構:master/worker結構

一個master程序:

負載載入和分析配置檔案、管理worker程序、平滑升級

一個或多個worker程序

處理並響應使用者請求

快取相關的程序:

cache loader:載入快取物件

cache manager:管理快取物件

四、nginx高度模組化,但其模組早期不支援DSO機制;1.9.11版本支援動態裝載和解除安裝

模組分類:

核心模組:core module

標準模組:

HTTP 模組: ngx_http_*

HTTP Core modules 預設功能

HTTP Optional modules 需編譯時指定

Mail 模組 ngx_mail_*

Stream 模組 ngx_stream_*

第三方模組

image.png

1、核心模組:是 Nginx 伺服器正常執行 必不可少 的模組,提供 錯誤日誌記錄 、 配置檔案解析 、 事件驅動機制 、 程序管理 等核心功能

2、標準HTTP模組:提供 HTTP 協議解析相關的功能,比如: 埠配置 、 網頁編碼設定 、 HTTP響應頭設定 等等

3、可選HTTP模組:主要用於擴充套件標準的 HTTP 功能,讓 Nginx 能處理一些特殊的服務,比如: Flash 多媒體傳輸 、解析 GeoIP 請求、 網路傳輸壓縮 、 安全協議 SSL 支援等

4、郵件服務模組:主要用於支援 Nginx 的 郵件服務 ,包括對 POP3 協議、 IMAP 協議和 SMTP協議的支援

5、第三方模組:是為了擴充套件 Nginx 伺服器應用,完成開發者自定義功能,比如: Json 支援、 Lua 支援等

五、nginx的功用

1、靜態的web資源伺服器,比如說html,圖片,js,css,txt等靜態資源

2、結合FastCGI/uWSGI/SCGI等協議反向代理動態資源請求

3、http/https協議的反向代理

4、imap4/pop3協議的反向代理

5、tcp/udp協議的請求轉發(反向代理)

六、nginx的安裝

1、官方:

http://nginx.org/packages/centos/7/x86_64/RPMS

image.png

點進去

image.png

下一步

image.png

2、Fedora-EPEL:

https://mirrors.aliyun.com/epel/7/x86_64/,阿里現在提供的版本為1.12版

3、原始碼編譯時注意家目錄/var/lib/nginx

image.png

useradd -r -s /sbin/nologin nginx

./configure --prefix=/usr/local/nginx \

--conf-path=/etc/nginx/nginx.conf \

--error-log-path=/var/log/nginx/error.log \

--http-log-path=/var/log/nginx/access.log \

--pid-path=/var/run/nginx.pid \

--lock-path=/var/run/nginx.lock \

--user=nginx --group=nginx \

--with-http_ssl_module \

--with-http_v2_module \

--with-http_dav_module \

--with-http_stub_status_module \

--with-threads --with-file-aio

make && make install

更改原始碼:src/core/nginx.h

image.png

src/http/ngx_http_header_filter_module.c

image.png

編譯安裝nginx選項:

--prefix=/etc/nginx 安裝路徑

--sbin-path=/usr/sbin/nginx 指明nginx程式檔案安裝路徑

--conf-path=/etc/nginx/nginx.conf 主配置檔案安裝位置

--error-log-path=/var/log/nginx/error.log 錯誤日誌檔案安裝位置

--http-log-path=/var/log/nginx/access.log 訪問日誌檔案安裝位置

--pid-path=/var/run/nginx.pid 指明pid檔案安裝位置

--lock-path=/var/run/nginx.lock 鎖檔案安裝位置

--http-client-body-temp-path=/var/cache/nginx/client_temp 客戶端body部分的臨時檔案存放路徑,伺服器允許客戶端使用put方法提交大資料時,臨時存放的磁碟路徑

--http-proxy-temp-path=/var/cache/nginx/proxy_temp 作為代理伺服器,伺服器響應報文的臨時檔案存放路徑

--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp 作為fastcgi代理伺服器,伺服器響應報文的臨時檔案存放路徑

--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp 作為uwsgi代理伺服器,伺服器響應報文的臨時檔案存放路徑

--http-scgi-temp-path=/var/cache/nginx/scgi_temp 作為scgi反代伺服器,伺服器響應報文的臨時檔案存放路徑

--user=nginx 指明以那個身份執行worker程序,主控master程序一般由root執行

--group=nginx

--with-http_ssl_module 表示把指定模組編譯進來

編譯完成後介面:

image.png

版本修改結果

image.png

七、nginx的使用

1、ls /usr/local/nginx/

html是測試頁,sbin是主程式

2、ls /usr/local/nginx/sbin/

nginx 只有一個程式檔案

3、ls /usr/local/nginx/html/

50x.html index.html 測試網頁

4、systemctl start nginx.service,若用此命令開啟,管理用systemctl命令

命令:nginx,啟動nginx,若用此命令啟動,管理用nginx -s命令     

-v,顯示資訊

-V,顯示安裝資訊

-t,檢查配置檔案語法

-T,檢查配置檔案語法並顯示配置檔案內容

-q,配置檔案壓縮過程中不顯示非錯誤資訊

-s,傳送訊號,nginx -s stop quit reopen reload

-p,設定安裝目錄

-c,從哪讀取配置檔案

-g,設定全域性設定

八、nginx配置

1、配置檔案的組成部分:

(1)主配置檔案:/etc/nginx.conf

子配置檔案 :/etc/nginx/conf.d/*.conf

(2)fastcgi, uwsgi,scgi等協議相關的配置檔案

(3)mime.types:支援的mime型別

2、主配置檔案的配置指令:

directive value [value2 ...];

3、注意:

(1) 指令必須以分號結尾

(2) 支援使用配置變數

內建變數:由Nginx模組引入,可直接引用

自定義變數:由使用者使用set命令定義

set variable_name value;

引用變數:$variable_name

4、主配置檔案結構:四部

main block:主配置段,即全域性配置段,對http,mail都有效

(1)event {

...

} 事件驅動相關的配置

(2)http {

...

} http/https 協議相關配置段

(3)mail {

...

} mail 協議相關配置段

(4)stream {

...

} stream 伺服器相關配置段

5、Main 全域性配置段常見的配置指令分類

(1)正常執行必備的配置

(2)優化效能相關的配置

(3)用於除錯及定位問題相關的配置

(4)事件驅動相關的配置

幫助文件:http://nginx.org/en/docs/

6、正常執行必備的配置:

(1)user

指定以誰的身份執行worker程序,如組不指定,預設和使用者名稱同名

Syntax: user user [group];

Default: user nobody nobody;

Context: main

預設nginx

image.png

程序

image.png

改為apache後

image.png

(2)pid /PATH/TO/PID_FILE;

指定儲存nginx主程序PID的檔案路徑

(3)include file | mask;

指明包含進來的其它配置檔案片斷

(4)load_module file ;

模組載入配置檔案: /usr/share/nginx/modules/*.conf

指明要裝載的動態模組路徑: /usr/lib64/nginx/modules

7、效能優化相關的配置:

(1)worker_processes number | auto;

worker程序的數量;通常應該為當前主機的cpu的物理核心數

image.png

(2)worker_cpu_affinity cpumask ...;,worker_cpu的親緣性,worker程序繫結在哪顆cpu上工作

worker_cpu_affinity auto [cpumask] 提高快取命中率

CPU上有快取,而程序經常會切換CPU,切換CPU後原來CPU上的快取就沒法利用了,這樣會影響當前效率

CPU MASK:

00000001:0號CPU,從0開始算第一顆CPU

00000010:1號CPU

10000000:7號CPU

worker_cpu_affinity 0001 0010 0100 1000;

worker_cpu_affinity 0101 1010;

image.png

(3)worker_priority number;

指定worker程序的nice值,設定worker程序優先順序:[-20,20],值越小優先順序越高

image.png

結果

image.png

(4)worker_rlimit_nofile number;

worker程序所能夠開啟的檔案數量上限,如65535,表現形式為一個socket檔案

image.png

8、事件驅動相關的配置:

events {

...

}

(1)worker_connections 10240;

每個worker程序所能夠開啟的最大併發連線數數量,如10240

總最大併發數:worker_processes * worker_connections

(2)use method;

指明併發連線請求的處理方法 ,預設自動選擇最優方法

示例:use epoll;

(3)accept_mutex on | off;,on由各個worker接收新的程序,off每個新來的請求都會通知worker程序但最後只會有一個worker程序得到處理

處理新的連線請求的方法;on指由各個worker輪流處理新請求,Off指每個新請求的到達都會通知(喚醒)所有的worker程序,但只有一個程序可獲得連線,造成“驚群”,影響效能

9、除錯和定位問題:(一般測試環境用)

(1)daemon on|off;,在模組外面寫

是否以守護程序方式執行nignx,預設是守護程序方式

(2)master_process on|off;

是否以master/worker模型執行nginx;預設為on,off 將不啟動worker

(3)rror_log file [level] ;

錯誤日誌檔案及其級別;出於除錯需要,可設定為debug;但debug僅在編譯時使用了“--with-debug”選項時才有效

/path/logfile: 記錄到檔案中

stderr: 傳送到標準錯誤

syslog:server-address[,parameter=values]  傳送到syslog

memory:size 記憶體

level:debug|info|notice|warn|error|crit|alter|emerg  日誌級別

九、http協議的相關配置:

http {

... ...

server {      -------->該語句塊一定巢狀在http語句裡

...

server_name

root

location [OPERATOR] /uri/ {

...

}

}

server {

...

}

}

1、ngx_http_core_module

與套接字相關的配置:

(1)server { ... }

配置一個虛擬主機

server {

listen address[:PORT]|PORT;

server_name SERVER_NAME;

root /PATH/TO/DOCUMENT_ROOT;

}

image.png

可以在路徑/etc/nginx/conf.d/下新建檔案

image.png

建立虛擬主機

image.png

在訪問機的hosts檔案新增解析,分別對www.a.com www.b.com wwwc.com進行curl

image.png

(2)listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE

listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size];

default_server 設定為預設虛擬主機

ssl 限制僅能夠通過ssl連線提供服務

backlog=number 超過併發連線數後,新請求進入後援佇列的長度

rcvbuf=size 接收緩衝區大小

sndbuf=size 傳送緩衝區大小

注意:

<1>基於port;listen PORT; 指令監聽在不同的埠

<2> 基於ip的虛擬主機,listen IP:PORT; IP 地址不同

<3>基於hostnameserver_name fqdn; 指令指向不同的主機名 

當存在

image.png

且主配置檔案中

image.png

結果為

image.png

原因為

image.png

當存在

image.png

結果理所當然為

image.pngclipboard.png

 (3)server_name name ...;

虛擬主機的主機名稱後可跟多個由空白字元分隔的字串

支援*通配任意長度的任意字元,server_name *.magedu.com www.magedu.*

支援~起始的字元做正則表示式模式匹配,效能原因慎用

server_name ~^www\d+\.magedu\.com$

說明: \d 表示 [0-9]

匹配優先順序機制從高到低

<1>首先是字串精確匹配 如:www.magedu.com

<2>左側*萬用字元 如:*.magedu.com

<3>右側*萬用字元 如:www.magedu.*

<4>正則表示式 如: ~^.*\.magedu\.com$

<5>default_server

image.png

(4)tcp_nodelay on | off;,對於使用者端而要on,對於客戶端要Off

長連線:連線建立後用戶還可以傳送多次請求

短連線:連線一次後立馬斷開

在keepalived模式下的連線是否啟用TCP_NODELAY選項

當為off時,延遲傳送,合併多個請求後再發送

預設On時,不延遲傳送

可用於:http, server, location

(5)sendfile on | off;,為優化效能,此項最好是ON

是否啟用sendfile功能,在核心中封裝報文直接傳送,預設Off

(6)server_tokens on | off | build | string

是否在響應報文的Server首部顯示nginx版本

(7)定義路徑相關的配置

root

設定web資源的路徑對映;用於指明請求的URL所對應的文件的目錄路徑,可用於http, server, location, if in location

server {

...

root /data/www/vhost1;   ------>指定家目錄的工作路徑

}

當在nginx網站目錄下建立軟連結指向一個其它位置的檔案,訪問該軟連結可以直接獲得該檔案,比如說

image.png

測試後有

image.png

(8)location [ = | ~ | ~* | ^~ ] uri { ... },用來定義訪問資源的路徑,路徑是uri路徑

location @name { ... }

在一個server中location配置段可存在多個,用於實現從uri到檔案系統的路徑對映;ngnix會根據使用者請求的URI來檢查定義的所有location,並找出一個最佳匹配,而後應用其配置

示例:

server {...

server_name www.a.com;

location /images/ {

root /data/imgs/;

}

}

http://www.a.com/images/logo.jpg

--> /data/imgs/images/logo.jpg

有配置

image.png

結果

image.png

= 對URI做精確匹配;

location = / {

...

}

http://www.a.com/ 匹配

http://www.a.com/index.html 不匹配

^~ 對URI做匹配檢查,不區分字元大小寫,匹配符合以後,停止往下搜尋

~ 對URI做正則表示式模式匹配,區分字元大小寫

~* 對URI做正則表示式模式匹配,不區分字元大小寫

不帶符號 匹配起始於此uri的所有的uri

匹配優先順序從高到低:

=, ^~, ~/~*, 不帶符號

(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/)

示例:

server {

root /vhosts/www/htdocs/ ;雖然根目錄是在 /vhosts/www/htdocs/

location /admin/ {但location的定義是隨著它語句下的root目錄變化的

root /apps/app1/data/;

}

}

http://www.chenux.com/admin/index.html當訪問網址的www.chenux.com/admin/index.html

--> /apps/app1/data/admin/index.html實質訪問的是/apps/app1/data//admin/index.html

 

---------------------------------------------------------------------------------------------------------------------

location = / {http://www.chenux.com/

[ configuration A ]

}

---------------------------------------------------------------------------------------------------------------------

location / {http://www.chenux.com/index.html

[ configuration B ]

}

---------------------------------------------------------------------------------------------------------------------

location /documents/ {http://www.chenux.com/documents/logo.jpg

[ configuration C ]

}

---------------------------------------------------------------------------------------------------------------------

location ^~ /images/ {http://www.chenux.com/images/linux.txt

[ configuration D ]

}

---------------------------------------------------------------------------------------------------------------------

location ~* \.(gif|jpg|jpeg)$ {http://www.chenux.com/images/logo.jpeg

[ configuration E ]

}

(9)alias path;,只能在location裡

路徑別名,文件對映的另一種機制;僅能用於location上下文,放到alias裡

示例:

http://www.magedu.com/bbs/index.html

location /bbs {

alias /web/forum/;

}

 --> /web/forum/index.html 注意: /bbs 後建議不要加 /

---------------------------------------------------------------------------------------------------------------------

location /bbs/ {

root /web/forum/;

}

--> /web/forum/bbs/index.html

注意:location中使用root指令和alias指令的意義不同

(a) root,給定的路徑對應於location中的/uri 側的/

(b) alias,給定的路徑對應於location中的/uri 的完整路徑,之後alias內目錄內容將完整替換location中的目錄

image.png

(10)index file ...;

指定預設網頁檔案,此指令由ngx_http_index_module模組提供

(11)error_page code ... [=[response]] uri;,實用的一項

模組:ngx_http_core_module

定義錯誤頁,以指定的響應狀態碼進行響應

可用位置:http, server, location, if in location

error_page 404 /404.html,當頁面報404的時候返回404.html

error_page 404 =200 /404.html,當頁面報404的時候返回錯誤碼200,此時指向頁面404.html

演示一

image.png

演示二

image.png

附錯誤碼

200:成功,請求資料通過響應報文的entity-body部分發送;OK

301:請求的URL指向的資源已經被刪除;但在響應報文中通過首部Location指明瞭資源現在所處的新位置;Moved Permanently,永久重定向,該域名將被淘汰

302:響應報文Location指明資源臨時新位置Moved Temporarily,臨時重定向,域名保留

304:客戶端發出了條件式請求,但伺服器上的資源未曾發生改變,則通過響應此響應狀態碼通知客戶端;Not Modified,利用瀏覽器自身的快取進行響應

401:需要輸入賬號和密碼認證方能訪問資源;Unauthorized

403:請求被禁止;Forbidden

404:伺服器無法找到客戶端請求的資源;Not Found

500:伺服器內部錯誤;Internal Server Error

502:代理伺服器從後端伺服器收到了一條偽響應,如無法連線到閘道器;Bad Gateway

503:服務不可用,臨時伺服器維護或過載,伺服器無法處理請求

504:閘道器超時

(12)try_files file ... uri;,找不到連線了,給使用者返回個檔案

try_files file ... =code;

按順序檢查檔案是否存在,返回第一個找到的檔案或資料夾(結尾加斜線表示為資料夾),如果所有檔案或資料夾都找不到,會進行一個內部重定向到最後一個引數。只有最後一個引數可以引起一個內部重定向,之前的引數只設置內部URI的指向。最後一個引數是回退URI且必須存在,否則會出現內部500錯誤

location /images/ {

try_files $uri /images/default.gif;

}

說明:/images/default.gif是URI,當訪問images下不存在的圖片時候,將自動返回預設的頁面default.gif

image.png

測試結果

image.png

---------------------------------------------------------------------------------------------------------------------

location / {

try_files $uri $uri/index.html $uri.html =404; 

}

---->嘗試尋找連結,找不到就找連結下index.html,再找不到就找連結.html,再找不到則返回404碼

(13)定義客戶端請求的相關配置

<1>keepalive_timeout timeout [header_timeout];,非遊戲網站調稍微短些

設定保持連線超時時長,0表示禁止長連線,預設為75s

image.png

<2>keepalive_requests number;

在一次長連線上所允許請求的資源的最大數量,預設為100

<3>keepalive_disable none | browser ...;

對哪種瀏覽器禁用長連線

<4>send_timeout time;

向客戶端傳送響應報文的超時時長,此處是指兩次寫操作之間的間隔時長,而非整個響應過程的傳輸時長

<5>client_body_buffer_size size;

用於接收每個客戶端請求報文的body部分的緩衝區大小;預設為16k;超出此大小時,其將被暫存到磁碟上的由下面client_body_temp_path指令所定義的位置

<6>client_body_temp_path path [level1 [level2 [level3]]];

設定儲存客戶端請求報文的body部分的臨時儲存路徑及子目錄結構和數量

目錄名為16進位制的數字;

client_body_temp_path /var/tmp/client_body 1 2 2

1 1級目錄佔1位16進位制,即2^4=16個目錄 0-f

2 2級目錄佔2位16進位制,即2^8=256個目錄 00-ff

2 3級目錄佔2位16進位制,即2^8=256個目錄 00-ff

image.png

(14)對客戶端進行限制的相關配置

<1>limit_rate rate;

限制響應給客戶端的傳輸速率,單位是bytes/second

預設值0表示無限制

image.png

測試

image.png

<2>imit_except method ... { ... },僅用於location之內

限制客戶端使用除了指定的請求方法之外的其它方法

method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET {

allow 192.168.1.0/24;

deny all;

}

除了GET和HEAD 之外其它方法僅允許192.168.1.0/24網段主機使用

image.png

測試

image.png

(15)檔案操作優化的配置

相關推薦

Nginx服務基本概念配置反向代理

                         &nb

SpringCloud系列九:SpringCloudConfig 基礎配置(SpringCloudConfig 的基本概念、配置 SpringCloudConfig 服務抓取配置文件信息客戶端使用 SpringCloudConfig 進行配置、單倉庫目錄匹配應用倉庫自動選擇倉庫匹配模式)

servers driver 這樣的 .com tco ces 上傳 [] 應用名 1、概念:SpringCloudConfig 基礎配置 2、具體內容 通過名詞就可以發現,SpringCloudConfig 核心作用一定就在於進行配置文件的管理上。也就是說為了更好的進行所

Nginx反向代理配置(正向代理反向代理負載均衡原理Nginx反向代理原理配置講解)

nginx概述 nginx是一款自由的、開源的、高效能的HTTP伺服器和反向代理伺服器;同時也是一個IMAP、POP3、SMTP代理伺服器;nginx可以作為一個HTTP伺服器進行網站的釋出處理,另外nginx可以作為反向代理進行負載均衡的實現。 Nginx是一款開原始碼的高效能HT

linux下ssh服務配置

實現原理 “公私鑰”認證的方式來進行ssh登入 “公私鑰”認證方式簡單的解釋是: 首先在客戶端上建立一對公私鑰 (公鑰檔案:~/.ssh/id_rsa.pub; 私鑰檔案:~/.ssh/id_rsa),然後把公鑰放到伺服器上(~/.ssh/authori

Storm概念原理及其應用(一)BaseStorm

when 結構 tails 並發數 vm 虛擬機 cif 異步 優勢 name 本文借鑒官文,添加了一些解釋和看法,其中有些理解,寫的比較粗糙,有問題的地方希望大家指出。寫這篇文章,是想把一些官文和資料中基礎、重點拿出來,能總結出便於大家理解的話語。與大多數“wordc

CentOS 6.x上搭建vSFTPD服務器搭建與配置

服務器 故障排查 運維 vsftpd 摘要: 手把手教你搭建vsftpd服務器,實現了基於db文件和MySQL數據庫文件進行虛擬用戶認證,當然了也本文章也包含搭建過程中問題的排查啦,哈哈哈。 另外,我在CentOS 7.x上也進行了搭建測試,步驟一致,個別命令會有不

DNS基本概念及操作----------------轉載

dns介紹 DNS基本概念及操作詳解目錄:1.DNS協議2.DNS查詢 2.1遞歸查詢 2.2跌代查詢 2.3反向查詢3.域維護 3.1全量AXFR傳輸 3.2增量IXFR傳輸 3.3通過NOTIFY 3.4動態更新4.DNS安全 在很多人看來,DNS只是為外部提供DNS解析服務(我以前也是這麽認為

Nginx中常用的指令配置

Nginx中的rewrite指令的應用rewrite指令的作用:是做一些訪問匹配規則的判斷,從而實現相應的操作。location / {proxy_pass http://192.168.1.5if (-d $request_filename) {...........; 這裏的意思是訪問的如果是一個目錄

Nginx服務簡介及編譯安裝

nginx簡介 nginx編譯安裝步驟詳解 編寫Nginx啟動文件 Nginx服務簡介及編譯安裝詳解一、Nginx簡介 Nginx是一個自由、開源、高性能及輕量級的HTTP服務器及反向代理服務器,其性能與IMAP/POP3代理服務器相當。Nginx以其高性能、穩定、功能豐富、配置簡單及占用系

CLion安裝漢化啟用配置

CLion是一款專為開發C及C++所設計的跨平臺IDE。它是以IntelliJ為基礎設計的,包含了許多智慧功能來提高開發人員的生產力,提高開發人員的工作效率。 這種強大的IDE幫助開發人員在Linux、OS X和Windows上來開發C/C++,同時它還使用智慧編輯器來提高程式碼質量、自動程

Windows RabbitMQ服務端安裝與配置

使用這個Word文件可以讓你在最短的時間部署好Rabbitmq的服務端: 對應的全部檔案百度雲資源: 聯絡QQ 3508551694獲取,該資源(本人制作)付費使用,天生就對有償服務反感的人請繞行

DRUID 連線池的使用配置

DRUID 連線池的使用、配置詳解 本篇參考:原文連結 一、DRUID 介紹: DRUID 是阿里巴巴開源平臺上一個資料庫連線池實現,它結合了 C3P0、DBCP、PROXOOL等DB池的優點,同時加入了日誌監控,可以很好的監控 DB 池連線和 SQL 的執行情況,可以說是針

阿里雲slbucloud負載均衡ulb新增ssl證書將http服務https化的配置

阿里雲和ucloud伺服器配置ssl證書將http服務https化的配置詳解專案背景: 蘋果App於2017年1月1日將啟用App Transport Security安全功能,即強制App通過HTTPS連線網路服務,各公司猜測按照蘋果的一貫作風可能會強制要求開發廠商實施h

【Shell程式設計】檢測Nginx服務是否正常執行(

大家好今天給大家帶來shell指令碼的一個例項(檢測Nginx服務是否正常執行) 需求:檢測Nginx服務是否正常的執行,如果不在執行那麼就啟動Nginx伺服器,那麼如果啟動Nginx失敗,那麼通過郵

配置管理基本概念配置管理計劃配置管理主要活動

一、概述   配置管理(Configuration Management, CM)的目的,在使用配置識別、配置控制、配置狀態記錄及配置審計,來達到建立與維護工作產品的完整性。   配置管理提供了結構化的,有序化的,產品化的管理軟體工程的方法。它涵蓋了軟體生命週期的所有領域

Apache服務以及httpd.conf配置

Apache服務架設  一、Apache服務總覽:  1、所需要的軟體包:httpd   httpd-devel   httpd-manual  2、埠:80(http)  443(https)  3、主配置檔案:/etc/httpd/* 、/var/www/*  4、預設

Squid反向代理服務

lis aaaaa 安裝squid inter x86 cli htm img tab Squid反向代理 Squid反向代理服務器位於本地Web服務器和Internet之間,客戶端請求訪問Web服務器時,DNS將訪問的域名解析為Squid反向代理服務器的IP地址,客

c/c++中sizeof()strlen()length()size()區別

c/c++中獲取字串長度。有以下函式:size()、sizeof() 、strlen()、str.length();一、陣列或字串的長度:sizeof()、strlen() 1、sizeof():返回所佔總空間的位元組數 (1)、對於整型字元型陣列 (2)、對於整型或字元型指

Tomcat記錄-tomcat常用配置優化方法

convert coder erro user 新生代 數值 classes art down 常用配置詳解 1 目錄結構 /bin:腳本文件目錄。 /common/lib:存放所有web項目都可以訪問的公共jar包(使用Common類加載器加載)。 /conf:存放配置

Tomcat記錄-tomcat常用配置優化方法(轉載)

常用配置詳解  1 目錄結構 /bin:指令碼檔案目錄。 /common/lib:存放所有web專案都可以訪問的公共jar包(使用Common類載入器載入)。 /conf:存放配置檔案,最重要的是server.xml。 /logs:存放日誌檔案。