深度學習Nginx第一章:Nginx架構和工作流程、簡單搭建、如何作爲反向代理和緩存服務器以及分析access日誌

Nginx源碼目錄

auto->cc:用於編譯的,剩下的是來幫助nginx的config腳本執行的時候,nginx支持哪些模塊,當前操作系統有什麼特性供給nginx使用

CHANGES:nginx版本有哪些版本和bug fix

man:幫助文件

src:nginx的源代碼

通過執行./configure  --help查看參數

如果沒有變動的話指定prefix就可以默認在prefix目錄的文件下,通常前面--with的模塊是不會編譯到nginx的,如果--without意味着默認會編譯進去的,加入這個參數是移出

./configure --prefix=/home/nginx

當config執行完成後會生成一些中間文件,在objs中有一個ngx_modules.c裏面有我們進行編譯的時候有哪些模塊會被編譯到nginx中,

make 編譯

其中nginx的目標文件是在objs/裏面可以看到,如果做nginx的版本升級,這個時候我們不能執行make install,這裏需要把目標文件拷貝在安裝目錄中,c語言生成所以中間文件放在src/

擴展:

熱點部署版本升級:

 在linux中當替換一個正在運行的文件的時候,需要cp -f

然後看到最新的文件時第一個:

接下來給master發送-USR2這個信號,告訴他要進行版本部署

然後執行 kill -WINCH 32169 關閉老的worker進程,但是老的master進程還存在,主要用於回退版本使用,可以對老的master進程發送reload命令把老的woker進程拉起來,把新版本關掉

 

make install 首次安裝時使用

其中進入到nginx的目錄下

主要二進制文件在sbin目錄下,功能配置文件在conf

 

Nginx配置文件語法:

Nginx命令行:

http配置的指令塊:

http大模塊下說明所以的指令都是由http進行解析執行的,一個非http模塊無法解析裏面的指令的

upstream:表示上游服務   server:對應的一組域名  location: url表達式

進行日誌切割:

執行../sbin/nginx -s reopen,這個方法往往不好用,通常是使用crontab執行腳本

 

Nginx搭建靜態資源:

location後的/:讓所有的請求都訪問dlib下的文件  

1 如果讓url後綴和文件後綴一一對應有兩種用法,一個是alias,一個是root,root有一些問題,它會把uri的路徑帶到文件中來,一般使用alias

root實例:

如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/t/a.html的文件。

alias實例:

如果一個請求的URI是/t/a.html時,web服務器將會返回服務器上的/www/root/html/new_t/a.html的文件。注意這裏是new_t,因爲alias會把location後面配置的路徑丟棄掉,把當前匹配到的目錄指向到指定的目錄。

注意:

1> 使用alias時,目錄名後面一定要加"/"。
3.>alias在使用正則匹配時,必須捕捉要匹配的內容並在指定的內容處使用。
4.>alias只能位於location塊中。(root可以不放在location中)

2 對於小於gzip_min_length的字段就不進行壓縮,因爲有的字段一個tcp報文段就發送過去了,壓縮的話會額外消耗系統cpu

3 當我們進行文件共享的時候可以使用autoindex,可以顯示該目錄下文件

4 因爲我們公網帶寬是有限的,當有許多併發用我們帶寬的時候會產生一個競爭關係,我們可能爲了當有些用戶訪問大文件的時候顯示他們的速度,期望分離出必要帶寬來訪問必要的小文件,如css、js,這個時候可以使用set命令和內置的變量來實現這個功能

這樣可以限制我們nginx向客戶端發送響應的一個速度,這個limit_rate,相關資料在官網

 

用Nginx搭建一個具備緩存功能的反向代理服務

  由於上游服務要處理非常複雜的業務邏輯,而且強調開發效率,所以它的性能並不怎麼樣,我們可以使用nginx反向代理把請求負載均衡到多臺上游服務器上,這樣的話在用戶無感知的情況下實現了水平擴展,而當上遊服務器出現問題的時候,那麼nginx把請求從有問題的服務器轉交給正常的服務器(上游服務器一般對公網不提供訪問的)

1、上游服務器:加上127.0.0.1表示只有本機的進程才能進行訪問

2、搭建反向代理:配置好反向代理的域名,對所有的請求 使用proxy_pass代理到所有的上游服務裏

   因爲一臺反向代理,我們再去拿一些變量,一些值就會出錯,比如說一個TCP連接有對應地址,但是有反向代理以後,那麼我們的反向代理和客戶端是一個TCP連接,反向代理與上游服務器又是一個TCP鏈接,所以如果取原先的變量 $remote_addr,也就是TCP連接的原端地址,這個時候在上游服務器取到的其實是反向代理的這個地址,如果我拿瀏覽器的地址做一個進行訪問限制、速度的功能時候,是拿不到,所以通過proxy_set_header值添加一個新的值發送給上游 比如X-Real-IP選擇從TCP拿到的原端的IP地址,Host也是一樣的,客戶端訪問的域名是在瀏覽器輸入的,我們可以讓上游服務器處理這個域名,也可以讓反向代理來處理這個域名,所有的這些配置特性都可以在這裏查看

  其中關於proxy_cache,當我們nginx作爲反向代理的時候,通常只有動態的請求,這個時候纔會交給上游處理,但是一些靜態資源是不太發生改變的,我們通過nginx進行緩存一段時間,因爲nginx的性能遠遠領先於上游服務器的性能,使用這個特性對小的站點有一個非常大的性能提升

1>通過設置proxy_cache_path去設置我們緩存寫在哪一個文件下,其中我們的關鍵字是放在共享內存中的,我們設置了10m的命名爲my_cache,

2>這個使用是我們在需要做緩存的url路徑下,添加proxy_cache,後面跟的參數就是我們剛纔開闢的共享內存,那麼在共享內存中設置的key是同一個url訪問時對不同的用戶展示是不一樣的,所以用戶這個變量就放在key中,其中proxy_cache_key 裏用戶作爲一個變量是放在key中,我們通過host、uri、以及訪問的參數這些作爲整體的key,那麼多餘那些響應不返回也是做了一些簡單的設定(200 304)

 

 

使用GoAccess分析access日誌:圖形化的形式,實時把access的變遷反應

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章