国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

前端開發者必備的Nginx知識

開發 前端
nginx現在幾乎是眾多大型網站的必用技術,大多數情況下,我們不需要親自去配置它,但是了解它在應用程序中所擔任的角色,以及如何解決這些問題是非常必要的。

nginx在應用程序中的作用

  •  解決跨域
  •  請求過濾
  •  配置gzip
  •  負載均衡
  •  靜態資源服務器

nginx是一個高性能的HTTP和反向代理服務器,也是一個通用的TCP/UDP代理服務器,最初由俄羅斯人Igor Sysoev編寫。

nginx現在幾乎是眾多大型網站的必用技術,大多數情況下,我們不需要親自去配置它,但是了解它在應用程序中所擔任的角色,以及如何解決這些問題是非常必要的。

下面我將從nginx在企業中的真實應用來解釋nginx在應用程序中起到的作用。

為了便于理解,首先先來了解一下一些基礎知識,nginx是一個高性能的反向代理服務器那么什么是反向代理呢?

正向代理與反向代理

代理是在服務器和客戶端之間假設的一層服務器,代理將接收客戶端的請求并將它轉發給服務器,然后將服務端的響應轉發給客戶端。

不管是正向代理還是反向代理,實現的都是上面的功能。

正向代理

正向代理,意思是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。

正向代理是為我們服務的,即為客戶端服務的,客戶端可以根據正向代理訪問到它本身無法訪問到的服務器資源。

正向代理對我們是透明的,對服務端是非透明的,即服務端并不知道自己收到的是來自代理的訪問還是來自真實客戶端的訪問。

反向代理

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。

反向代理是為服務端服務的,反向代理可以幫助服務器接收來自客戶端的請求,幫助服務器做請求轉發,負載均衡等。

反向代理對服務端是透明的,對我們是非透明的,即我們并不知道自己訪問的是代理服務器,而服務器知道反向代理在為他服務。

基本配置

配置結構

下面是一個nginx配置文件的基本結構:

 

  1. events {   
  2.  
  3. http   
  4.  
  5.     server  
  6.     {   
  7.         location path  
  8.         {  
  9.             ...  
  10.         }  
  11.         location path  
  12.         {  
  13.             ...  
  14.         }  
  15.      }  
  16.     server  
  17.     {  
  18.         ...  
  19.     }  
  •  main:nginx的全局配置,對全局生效。
  •  events:配置影響nginx服務器或與用戶的網絡連接。
  •  http:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置。
  •  server:配置虛擬主機的相關參數,一個http中可以有多個server。
  •  location:配置請求的路由,以及各種頁面的處理情況。
  •  upstream:配置后端服務器具體地址,負載均衡配置不可或缺的部分。

內置變量

下面是nginx一些配置中常用的內置全局變量,你可以在配置的任何位置使用它們。

 

  1. | 變量名 | 功能 | 
  2.  
  3. ------ | ------ | 
  4.  
  5. | $host| 請求信息中的Host,如果請求中沒有Host行,則等于設置的服務器名 | 
  6.  
  7. | $request_method | 客戶端請求類型,如GET、POST 
  8.  
  9. | $remote_addr | 客戶端的IP地址 | 
  10.  
  11. |$args | 請求中的參數 | 
  12.  
  13. |$content_length| 請求頭中的Content-length字段 | 
  14.  
  15. |$http_user_agent | 客戶端agent信息 | 
  16.  
  17. |$http_cookie | 客戶端cookie信息 | 
  18.  
  19. |$remote_addr | 客戶端的IP地址 | 
  20.  
  21. |$remote_port | 客戶端的端口 | 
  22.  
  23. |$server_protocol | 請求使用的協議,如HTTP/1.0、·HTTP/1.1` | 
  24.  
  25. |$server_addr | 服務器地址 | 
  26.  
  27. |$server_name| 服務器名稱| 
  28.  
  29. |$server_port|服務器的端口號| 

 

解決跨域

先追本溯源以下,跨域究竟是怎么回事。

跨域的定義

同源策略限制了從同一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的重要安全機制。通常不允許不同源間的讀操作。

同源的定義

如果兩個頁面的協議,端口(如果有指定)和域名都相同,則兩個頁面具有相同的源。

nginx解決跨域的原理

例如:

  •  前端server的域名為:fe.server.com
  •  后端服務的域名為:dev.server.com

現在我在fe.server.com對dev.server.com發起請求一定會出現跨域。

現在我們只需要啟動一個nginx服務器,將server_name設置為fe.server.com,然后設置相應的location以攔截前端需要跨域的請求,然后將請求代理回dev.server.com。如下面的配置: 

  1. server {  
  2.         listen       80;  
  3.         server_name  fe.server.com;  
  4.         location / {  
  5.                 proxy_pass dev.server.com;  
  6.         } 

這樣可以巧妙繞過瀏覽器的同源策略:fe.server.com訪問nginx的fe.server.com屬于同源訪問,而nginx對服務端轉發的請求不會觸發瀏覽器的同源策略。

請求過濾

[[259263]]

根據狀態碼過濾 

  1. error_page 500 501 502 503 504 506 /50x.html;  
  2.     location = /50x.html {  
  3.         #將跟路徑改編為存放html的路徑。  
  4.         root /root/static/html;  
  5.     } 

根據URL名稱過濾,精準匹配URL,不匹配的URL全部重定向到主頁。 

  1. location / {  
  2.     rewrite  ^.*$ /index.html  redirect;  

根據請求類型過濾。 

  1. if ( $request_method !~ ^(GET|POST|HEAD)$ ) {  
  2.         return 403;  
  3.     } 

配置gzip

GZIP是規定的三種標準HTTP壓縮格式之一。目前絕大多數的網站都在使用 GZIP 傳輸 HTML、CSS、JavaScript 等資源文件。

對于文本文件,GZip 的效果非常明顯,開啟后傳輸所需流量大約會降至 1/4 ~ 1/3。

并不是每個瀏覽器都支持gzip的,如何知道客戶端是否支持gzip呢,請求頭中的Accept-Encoding來標識對壓縮的支持。

啟用gzip同時需要客戶端和服務端的支持,如果客戶端支持gzip的解析,那么只要服務端能夠返回gzip的文件就可以啟用gzip了,我們可以通過nginx的配置來讓服務端支持gzip。下面的respone中content-encoding:gzip,指服務端開啟了gzip的壓縮方式。

   

  1. gzip                    on;  
  2.    gzip_http_version       1.1;  
  3.    gzip_comp_level         5;  
  4.    gzip_min_length         1000;  
  5.    gzip_types text/csv text/xml text/css text/plain text/javascript application/javascript application/x-javascript application/json application/xml; 

gzip

  •  開啟或者關閉gzip模塊
  •  默認值為 off
  •  可配置為 on / off

gzip_http_version

  •  啟用 GZip 所需的 HTTP 較低版本
  •  默認值為 HTTP/1.1

這里為什么默認版本不是1.0呢?

HTTP 運行在 TCP 連接之上,自然也有著跟 TCP 一樣的三次握手、慢啟動等特性。

啟用持久連接情況下,服務器發出響應后讓TCP連接繼續打開著。同一對客戶/服務器之間的后續請求和響應可以通過這個連接發送。

為了盡可能的提升HTTP 性能,使用持久連接就顯得尤為重要了。

HTTP/1.1 默認支持 TCP 持久連接,HTTP/1.0 也可以通過顯式指定 Connection: keep-alive 來啟用持久連接。對于 TCP 持久連接上的 HTTP 報文,客戶端需要一種機制來準確判斷結束位置,而在 HTTP/1.0 中,這種機制只有 Content-Length。而在HTTP/1.1 中新增的 Transfer-Encoding: chunked 所對應的分塊傳輸機制可以解決這類問題。

nginx同樣有著配置chunked的屬性chunked_transfer_encoding,這個屬性是默認開啟的。

Nginx 在啟用了GZip的情況下,不會等文件 GZip 完成再返回響應,而是邊壓縮邊響應,這樣可以顯著提高 TTFB(Time To First Byte,首字節時間,WEB 性能優化重要指標)。這樣僅有的問題是,Nginx 開始返回響應時,它無法知道將要傳輸的文件最終有多大,也就是無法給出 Content-Length 這個響應頭部。

所以,在HTTP1.0中如果利用Nginx 啟用了GZip,是無法獲得 Content-Length 的,這導致HTTP1.0中開啟持久鏈接和使用GZip只能二選一,所以在這里gzip_http_version默認設置為1.1。

gzip_comp_level

  •  壓縮級別,級別越高壓縮率越大,當然壓縮時間也就越長(傳輸快但比較消耗cpu)。
  •  默認值為 1
  •  壓縮級別取值為1-9

gzip_min_length

  •  設置允許壓縮的頁面最小字節數,Content-Length小于該值的請求將不會被壓縮
  •  默認值:0
  •  當設置的值較小時,壓縮后的長度可能比原文件大,建議設置1000以上

gzip_types

  •  要采用gzip壓縮的文件類型(MIME類型)
  •  默認值:text/html(默認不壓縮js/css)

負載均衡

什么是負載均衡

[[259266]]

如上面的圖,前面是眾多的服務窗口,下面有很多用戶需要服務,我們需要一個工具或策略來幫助我們將如此多的用戶分配到每個窗口,來達到資源的充分利用以及更少的排隊時間。

把前面的服務窗口想像成我們的后端服務器,而后面終端的人則是無數個客戶端正在發起請求。負載均衡就是用來幫助我們將眾多的客戶端請求合理的分配到各個服務器,以達到服務端資源的充分利用和更少的請求時間。

nginx如何實現負載均衡

Upstream指定后端服務器地址列表 

  1. upstream balanceServer {  
  2.     server 10.1.22.33:12345;  
  3.     server 10.1.22.34:12345;  
  4.     server 10.1.22.35:12345;  

在server中攔截響應請求,并將請求轉發到Upstream中配置的服務器列表。   

  1. server {  
  2.        server_name  fe.server.com;  
  3.        listen 80;  
  4.        location /api {  
  5.            proxy_pass http://balanceServer;  
  6.        }  
  7.    } 

上面的配置只是指定了nginx需要轉發的服務端列表,并沒有指定分配策略。

nginx實現負載均衡的策略

輪詢策略

默認情況下采用的策略,將所有客戶端請求輪詢分配給服務端。這種策略是可以正常工作的,但是如果其中某一臺服務器壓力太大,出現延遲,會影響所有分配在這臺服務器下的用戶。 

  1. upstream balanceServer {  
  2.     server 10.1.22.33:12345;  
  3.     server 10.1.22.34:12345;  
  4.     server 10.1.22.35:12345;  

最小連接數策略

將請求優先分配給壓力較小的服務器,它可以平衡每個隊列的長度,并避免向壓力大的服務器添加更多的請求。 

  1. upstream balanceServer {  
  2.     least_conn;  
  3.     server 10.1.22.33:12345;  
  4.     server 10.1.22.34:12345;  
  5.     server 10.1.22.35:12345;  

最快響應時間策略

依賴于NGINX Plus,優先分配給響應時間最短的服務器。 

  1. upstream balanceServer {  
  2.     fair;  
  3.     server 10.1.22.33:12345;  
  4.     server 10.1.22.34:12345;  
  5.     server 10.1.22.35:12345;  

客戶端ip綁定

來自同一個ip的請求永遠只分配一臺服務器,有效解決了動態網頁存在的session共享問題。 

  1. upstream balanceServer {  
  2.     ip_hash;  
  3.     server 10.1.22.33:12345;  
  4.     server 10.1.22.34:12345;  
  5.     server 10.1.22.35:12345;  

靜態資源服務器 

  1. location ~* \.(png|gif|jpg|jpeg)$ {  
  2.     root    /root/static/;    
  3.     autoindex on;  
  4.     access_log  off;  
  5.     expires     10h;# 設置過期時間為10小時   

匹配以png|gif|jpg|jpeg為結尾的請求,并將請求轉發到本地路徑,root中指定的路徑即nginx本地路徑。同時也可以進行一些緩存的設置。

小結

nginx的功能非常強大,還有很多需要探索,上面的一些配置都是公司配置的真實應用(精簡過了),如果您有什么意見或者建議,歡迎在下方留言...

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2021-04-08 10:40:24

前端工具代碼

2021-04-01 07:52:57

前端開發技術熱點

2013-08-08 10:26:08

前端開發Web

2013-10-08 10:42:27

前端開發開發

2025-03-03 00:00:03

2024-02-04 09:18:00

Python內存管理垃圾回收

2024-08-09 15:01:00

2025-01-08 08:30:14

2014-02-01 21:31:10

JavaScriptJS框架

2014-04-01 13:50:28

安卓Android開發者

2014-03-14 11:44:28

安卓開發者Android開發

2013-07-19 09:47:57

White ElephHadoopLinkedIn

2013-12-30 13:46:27

Android開發者

2017-10-23 09:27:47

2025-07-31 06:00:00

Go后端開發

2022-09-15 17:08:20

JavaScripWeb開發

2014-04-18 13:20:34

Android安卓開發工具

2012-02-13 10:21:11

Skala PreviiOS應用

2023-11-30 15:30:19

Python編程語言

2015-09-06 16:22:48

JavaScriptSublimeText
點贊
收藏

51CTO技術棧公眾號

热re99久久精品国99热蜜月| 糖心vlog在线免费观看| 最新日韩一区| 欧美人xxxx| 黄色网址入口| 久久久久九九视频| 日韩国产欧美亚洲| 北条麻妃国产九九精品视频| 成人免费毛片在线观看| 成人综合在线网站| 少妇无码av无码专区在线观看| 岛国精品在线观看| 野外做受又硬又粗又大视频√| 国产一区二区三区免费在线观看| 欧美精品久久96人妻无码| 久久爱www久久做| 蜜臀在线免费观看| 成人黄色国产精品网站大全在线免费观看 | 国产不卡人人| 久久aⅴ国产紧身牛仔裤| 李宗瑞系列合集久久| 日韩国产在线播放| av一区在线播放| 无遮挡亚洲一区| 高清国产午夜精品久久久久久| 亚洲黄色网址在线观看| 久久精品噜噜噜成人av农村| 天堂√在线观看一区二区| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产三级视频在线看| 国产精品久久久爽爽爽麻豆色哟哟| 精品国产一区二区三区久久久久久| 红桃视频国产精品| 国产在线精品一区二区中文| 欧美欧美黄在线二区| 国产成人精品亚洲精品| 天天天综合网| 日韩在线第一区| 风间由美一区二区三区在线观看| 免费激情视频在线观看| 亚洲综合一区二区三区| 高清性色生活片在线观看| 日韩精品一区二区三区三区免费| 影视一区二区三区| 欧美精品激情blacked18| 综合干狼人综合首页| 99porn视频在线| 国产激情一区二区三区四区| 97在线资源在| 欧美日韩第一区日日骚| 国产精品诱惑| 国产精品美女主播在线观看纯欲| 亚洲视频大全| 国产一区二区视频播放| 亚洲.国产.中文慕字在线| 国产精品一区二区三区视频网站| 一区二区三区黄色| 久久国产精品成人免费观看的软件| 麻豆av一区二区三区| 国产91在线|亚洲| 81精品国产乱码久久久久久| 久久av资源| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 深夜成人在线| 欧美精品激情blacked18| 综合久久综合| av高清在线免费观看| 亚洲精品精品亚洲| h片视频在线观看| 久久久久久高潮国产精品视| 黄色亚洲精品| 成人午夜剧场免费观看完整版| 欧美性色欧美a在线播放| 性欧美1819sex性高清| 欧美专区国产专区| 精品亚洲国产成人av制服丝袜| 97cao在线| 亚洲精品在线观看网站| 久久a爱视频| 亚洲人成人77777线观看| 中文一区二区完整视频在线观看| 天使と恶魔の榨精在线播放| 7m精品福利视频导航| 久久99精品国产.久久久久久 | 中文视频在线| 日韩欧美一区二区三区在线视频| 伊人色综合网| 亚洲精品国精品久久99热一| 91在线看黄| 久久天天躁狠狠躁夜夜爽蜜月 | 亚洲精品视频二区| 欧美日韩国产高清电影| 男女h黄动漫啪啪无遮挡软件| 亚洲激情图片一区| 天堂久久午夜av| 92国产精品久久久久首页| 久久久国产午夜精品 | 欧美性69xxxx肥| a成人v在线| 精品日本美女福利在线观看| 亚洲va国产va欧美va观看| 男人天堂久久久| 日韩午夜一区| 亚洲精品极品| 乱插在线www| 最近中文字幕2019免费| 欧美专区亚洲专区| 蜜臀av一区二区三区| 国产啪精品视频| 免费成人在线视频观看| 日本黄大片在线观看| 欧美激情成人在线视频| 国产精品三级电影| 91精品国产91久久综合| 日韩伦理福利| 日韩小视频网站| 日韩女优在线播放| 国产精品久久国产精麻豆99网站| silk一区二区三区精品视频| 99re6在线视频| 综合视频在线观看| 91超碰这里只有精品国产| 99精品免费| 在线三级中文| 九七午夜视频| 日本美女爱爱视频| 不卡视频一区二区| 精品一区二区亚洲| 蜜臀av性久久久久蜜臀aⅴ| 电影一区二区| 在线观看麻豆蜜桃| 国产精品久久国产| 伊人男人综合视频网| 精品国产91亚洲一区二区三区婷婷 | 秋霞福利视频| 91丝袜美腿美女视频网站| 欧美性猛交xxxx黑人猛交| 欧美日韩网站| 毛片免费看不卡网站| 国产女王在线**视频| 男人草女人视频| 搡老女人一区二区三区视频tv| 国产剧情一区在线| 国产91精品精华液一区二区三区| 日一区二区三区| 麻豆国产精品一区二区三区| 亚洲欧美日韩一区二区| 一区二区福利视频| 国产免费一区二区三区| 亚洲 中文字幕 日韩 无码| 天堂在线中文字幕| 中文字幕一区二区三区四区久久| 日韩精品电影在线观看| 国产精品久久久久久久久图文区| 久久精品国产电影| 午夜精品一区二区在线观看 | 亚洲va欧美va天堂v国产综合| 亚洲嫩模很污视频| 久久大香伊蕉在人线观看热2| www.日本视频| 国产精品毛片aⅴ一区二区三区| 日本午夜一本久久久综合| 91麻豆国产福利精品| 日韩av在线精品| 秋霞久久久久久一区二区| 国产在线视频福利| 日韩大片在线观看| 91蜜桃传媒精品久久久一区二区| 91麻豆精品国产综合久久久久久 | 亚洲激情另类| 欧美日韩国产一区中文午夜| 久久久国产视频| 亚洲不卡中文字幕无码| 国产综合色区在线观看| 丝袜亚洲另类欧美| 91亚洲国产成人精品一区二区三| 久久精品中文字幕一区| 久久久久久久激情| 国产精品调教| 色欧美日韩亚洲| 久久天天狠狠| 国产精品第一区| 国产精品久久久久久久久久免费| 欧美色综合一区二区三区| 国产欧美在线| 在线视频中文亚洲| 天天噜天天色| 美脚恋feet久草欧美| 久久激情综合网| 精品久久一区二区| 久久精品五月婷婷| jk破处视频在线| 日本在线电影一区二区三区| 中文字幕日韩av资源站| 美女av一区二区| 91精品无人成人www| 久久电影在线| 国产欧美精品一区aⅴ影院| 亚洲精品98久久久久久中文字幕| 国产精品h视频|