中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Nginx常用功能全揭秘

2021-02-22    分類: 網站建設

nginx作為一個高性能的web服務器,想必大家垂涎已久,蠢蠢欲動,想學習一番了吧,語法不多說,網上一大堆。下面博主就nginx的非常常用的幾個功能做一些講述和分析,學會了這幾個功能,平常的開發(fā)和部署就不是什么問題了。因此希望大家看完之后,能自己裝個nginx來學習配置測試,這樣才能真正的掌握它。

文章提綱:

  • 正向代理
  • 反向代理
  • 透明代理
  • 負載均衡
  • 靜態(tài)服務器
  • nginx的安裝

1. 正向代理

正向代理:內網服務器主動去請求外網的服務的一種行為

光看概念,可能有讀者還是搞不明白:什么叫做“正向”,什么叫做“代理”,我們分別來理解一下這兩個名詞。

正向:相同的或一致的方向

代理:自己做不了的事情或者自己不打算做的事情,委托或依靠別人來完成。

借助解釋,回歸到nginx的概念,正向代理其實就是說客戶端無法主動或者不打算完成主動去向某服務器發(fā)起請求,而是委托了nginx代理服務器去向服務器發(fā)起請求,并且獲得處理結果,返回給客戶端。

從下圖可以看出:客戶端向目標服務器發(fā)起的請求,是由代理服務器代替它向目標主機發(fā)起,得到結果之后,通過代理服務器返回給客戶端。


舉個栗子:廣大社會主義接班人都知道,為了保護祖國的花朵不受外界的烏煙瘴氣熏陶,國家對網絡做了一些“優(yōu)化”,正常情況下是不能外網的,但作為程序員的我們如果沒有谷歌等搜索引擎的幫助,再銷魂的代碼也會因此失色,因此,網絡上也曾出現(xiàn)過一些fan qiang技術和軟件供有需要的人使用,如某VPN等,其實VPN的原理大體上也類似于一個正向代理,也就是需要訪問外網的電腦,發(fā)起一個訪問外網的請求,通過本機上的VPN去尋找一個可以訪問國外網站的代理服務器,代理服務器向外國網站發(fā)起請求,然后把結果返回給本機。

正向代理的配置:

  1. server {
  2. #指定DNS服務器IP地址
  3. resolver 114.114.114.114;
  4. #指定代理端口
  5. listen 8080;
  6. location / {
  7. #設定代理服務器的協(xié)議和地址(固定不變)
  8. proxy_pass http://$http_host$request_uri;
  9. }
  10. }

這樣就可以做到內網中端口為8080的服務器主動請求到1.2.13.4的主機上,如在Linux下可以:

  1. curl --proxy proxy_server:8080 http://www.taobao.com/

正向代理的關鍵配置:

  • resolver:DNS服務器IP地址
  • listen:主動發(fā)起請求的內網服務器端口
  • proxy_pass:代理服務器的協(xié)議和地址

2. 反向代理

反向代理:reverse proxy,是指用代理服務器來接受客戶端發(fā)來的請求,然后將請求轉發(fā)給內網中的上游服務器,上游服務器處理完之后,把結果通過nginx返回給客戶端。

上面講述了正向代理的原理,相信對于反向代理,就很好理解了吧。

反向代理是對于來自外界的請求,先通過nginx統(tǒng)一接受,然后按需轉發(fā)給內網中的服務器,并且把處理請求返回給外界客戶端,此時代理服務器對外表現(xiàn)的就是一個web服務器,客戶端根本不知道“上游服務器”的存在。


舉個栗子:一個服務器的80端口只有一個,而服務器中可能有多個項目,如果A項目是端口是8081,B項目是8082,C項目是8083,假設指向該服務器的域名為www.xxx.com,此時訪問B項目是www.xxx.com:8082,以此類推其它項目的URL也是要加上一個端口號,這樣就很不美觀了,這時我們把80端口給nginx服務器,給每個項目分配一個獨立的子域名,如A項目是a.xxx.com,并且在nginx中設置每個項目的轉發(fā)配置,然后對所有項目的訪問都由nginx服務器接受,然后根據配置轉發(fā)給不同的服務器處理。具體流程如下圖所示:


反向代理配置:

  1. server {
  2. #監(jiān)聽端口
  3. listen 80;
  4. #服務器名稱,也就是客戶端訪問的域名地址
  5. server_name a.xxx.com;
  6. #nginx日志輸出文件
  7. access_log logs/nginx.access.log main;
  8. #nginx錯誤日志輸出文件
  9. error_log logs/nginx.error.log;
  10. root html;
  11. index index.html index.htm index.php;
  12. location / {
  13. #被代理服務器的地址
  14. proxy_pass http://localhost:8081;
  15. #對發(fā)送給客戶端的URL進行修改的操作
  16. proxy_redirect off;
  17. proxy_set_header Host $host;
  18. proxy_set_header X-Real-IP $remote_addr;
  19. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  20. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  21. proxy_max_temp_file_size 0;
  22. }
  23. }

這樣就可以通過a.xxx.com來訪問a項目對應的網站了,而不需要帶上難看的端口號。

反向代理的配置關鍵點是:

server_name:代表客戶端向服務器發(fā)起請求時輸入的域名

proxy_pass:代表源服務器的訪問地址,也就是真正處理請求的服務器(localhost+端口號)。

3. 透明代理

透明代理:也叫做簡單代理,意思客戶端向服務端發(fā)起請求時,請求會先到達透明代理服務器,代理服務器再把請求轉交給真實的源服務器處理,也就是是客戶端根本不知道有代理服務器的存在。

舉個栗子:它的用法有點類似于攔截器,如某些制度嚴格的公司里的辦公電腦,無論我們用電腦做了什么事情,安全部門都能攔截我們對外發(fā)送的任何東西,這是因為電腦在對外發(fā)送時,實際上先經過網絡上的一個透明的服務器,經過它的處理之后,才接著往外網走,而我們在網上沖浪時,根本沒有感知到有攔截器攔截我們的數(shù)據和信息。


有人說透明代理和反向代理有點像,都是由代理服務器先接受請求,再轉發(fā)到源服務器。其實本質上是有區(qū)別的,透明代理是客戶端感知不到代理服務器的存在,而反向代理是客戶端感知只有一個代理服務器的存在,因此他們一個是隱藏了自己,一個是隱藏了源服務器。事實上,透明代理和正向代理才是相像的,都是由客戶端主動發(fā)起請求,代理服務器處理;他們差異點在于:正向代理是代理服務器代替客戶端請求,而透明代理是客戶端在發(fā)起請求時,會先經過透明代理服務器,再達到服務端,在這過程中,客戶端是感知不到這個代理服務器的。

4. 負載均衡

負載均衡:將服務器接收到的請求按照規(guī)則分發(fā)的過程,稱為負載均衡。負載均衡是反向代理的一種體現(xiàn)。

可能絕大部分人接觸到的web項目,剛開始時都是一臺服務器就搞定了,但當網站訪問量越來越大時,單臺服務器就扛不住了,這時候需要增加服務器做成集群來分擔流量壓力,而在架設這些服務器時,nginx就充當了接受流量和分流的作用了,當請求到nginx服務器時,nginx就可以根據設置好的負載信息,把請求分配到不同的服務器,服務器處理完畢后,nginx獲取處理結果返回給客戶端,這樣,用nginx的反向代理,即可實現(xiàn)了負載均衡。


nginx實現(xiàn)負載均衡有幾種模式:

  • 輪詢:每個請求按時間順序逐一分配到不同的后端服務器,也是nginx的默認模式。輪詢模式的配置很簡單,只需要把服務器列表加入到upstream模塊中即可。

下面的配置是指:負載中有三臺服務器,當請求到達時,nginx按照時間順序把請求分配給三臺服務器處理。

  1. upstream serverList {
  2. server 1.2.3.4;
  3. server 1.2.3.5;
  4. server 1.2.3.6;
  5. }
  • ip_hash:每個請求按訪問IP的hash結果分配,同一個IP客戶端固定訪問一個后端服務器。可以保證來自同一ip的請求被打到固定的機器上,可以解決session問題。

下面的配置是指:負載中有三臺服務器,當請求到達時,nginx優(yōu)先按照ip_hash的結果進行分配,也就是同一個IP的請求固定在某一臺服務器上,其它則按時間順序把請求分配給三臺服務器處理。

  1. upstream serverList {
  2. ip_hash
  3. server 1.2.3.4;
  4. server 1.2.3.5;
  5. server 1.2.3.6;
  6. }

url_hash:按訪問url的hash結果來分配請求,相同的url固定轉發(fā)到同一個后端服務器處理。

  1. upstream serverList {
  2. server 1.2.3.4;
  3. server 1.2.3.5;
  4. server 1.2.3.6;
  5. hash $request_uri;
  6. hash_method crc32;
  • fair:按后端服務器的響應時間來分配請求,響應時間短的優(yōu)先分配。
  1. upstream serverList {
  2. server 1.2.3.4;
  3. server 1.2.3.5;
  4. server 1.2.3.6;
  5. fair;
  6. }}

而在每一種模式中,每一臺服務器后面的可以攜帶的參數(shù)有:

  • down: 當前服務器暫不參與負載
  • weight: 權重,值越大,服務器的負載量越大。
  • max_fails:允許請求失敗的次數(shù),默認為1。
  • fail_timeout:max_fails次失敗后暫停的時間。
  • backup:備份機, 只有其它所有的非backup機器down或者忙時才會請求backup機器。

如下面的配置是指:負載中有三臺服務器,當請求到達時,nginx按時間順序和權重把請求分配給三臺服務器處理,例如有100個請求,有30%是服務器4處理,有50%的請求是服務器5處理,有20%的請求是服務器6處理。

  1. upstream serverList {
  2. server 1.2.3.4 weight=30;
  3. server 1.2.3.5 weight=50;
  4. server 1.2.3.6 weight=20;

如下面的配置是指:負載中有三臺服務器,服務器4的失敗超時時間為60s,服務器5暫不參與負載,服務器6只用作備份機。

  1. upstream serverList {
  2. server 1.2.3.4 fail_timeout=60s;
  3. server 1.2.3.5 down;
  4. server 1.2.3.6 backup;
  5. }

下面是一個配置負載均衡的示例(只寫了關鍵配置):

其中:

  • upstream:是負載的配置模塊,serverList是名稱,隨便起
  • server_name:是客戶端請求的域名地址
  • proxy_pass:是指向負載的列表的模塊,如serverList
  1. upstream serverList {
  2. server 1.2.3.4 weight=30;
  3. server 1.2.3.5 down;
  4. server 1.2.3.6 backup;
  5. }
  6. server {
  7. listen 80;
  8. server_name www.xxx.com;
  9. root html;
  10. index index.html index.htm index.php;
  11. location / {
  12. proxy_pass http://serverList;
  13. proxy_redirect off;
  14. proxy_set_header Host $host;
  15. }
  16. }

5. 靜態(tài)服務器

現(xiàn)在很多項目流行前后分離,也就是前端服務器和后端服務器分離,分別部署,這樣的方式能讓前后端人員能各司其職,不需要互相依賴,而前后分離中,前端項目的運行是不需要用Tomcat、Apache等服務器環(huán)境的,因此可以直接用nginx來作為靜態(tài)服務器。

靜態(tài)服務器的配置如下,其中關鍵配置為:

  • root:直接靜態(tài)項目的絕對路徑的根目錄。
  • server_name : 靜態(tài)網站訪問的域名地址。
  1. server {
  2. listen 80;
  3. server_name www.xxx.com;
  4. client_max_body_size 1024M;
  5. location / {
  6. root /var/www/xxx_static;
  7. index index.html;
  8. }
  9. }

6. nginx的安裝

學了這么多nginx的配置用法之后,我們需要對每一個知識點做一下測試,才能印象深刻,在此之前,我們需要知道nginx是怎么安裝,下面以Linux環(huán)境為例,簡述yum方式安裝nginx的步驟:

安裝依賴:

  1. //一鍵安裝上面四個依賴
  2. yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

安裝nginx:

  1. 1yum install nginx

檢查是否安裝成功:

  1. nginx -v

啟動/挺尸nginx:

  1. /etc/init.d/nginx start
  2. /etc/init.d/nginx stop

編輯配置文件:

  1. /etc/nginx/nginx.conf

這些步驟都完成之后,我們就可以進入nginx的配置文件nginx.conf對上面的各個知識點,進行配置和測試了。

當前文章:Nginx常用功能全揭秘
當前URL:http://www.rwnh.cn/news/102343.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站排名網站內鏈、全網營銷推廣網站設計公司、建站公司網頁設計公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設公司
宜州市| 祁连县| 保靖县| 如东县| 民勤县| 威远县| 夹江县| 岗巴县| 麻栗坡县| 星子县| 松原市| 巴青县| 平塘县| 肥东县| 唐海县| 乐亭县| 望奎县| 勃利县| 富顺县| 工布江达县| 黄骅市| 化隆| 大兴区| 新竹市| 吉木萨尔县| 寿阳县| 池州市| 工布江达县| 昌都县| 恩施市| 许昌县| 寿光市| 新沂市| 昂仁县| 宣威市| 农安县| 岑溪市| 池州市| 晋江市| 车致| 罗田县|