最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

為什么我推薦Nginx作為后端服務器代理(原因解析)

 更新時間:2020年07月23日 09:24:57   作者:碼農(nóng)小胖哥  
這篇文章主要介紹了為什么我推薦Nginx作為后端服務器代理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1. 前言

我們真實的服務器不應該直接暴露到公網(wǎng)上去,否則更加容易泄露服務器的信息,也更加容易受到攻擊。一個比較“平民化”的方案是使用Nginx反向代理它。今天就來聊一聊使用Nginx反向代理的一些能力,Nginx代理能幫助我們實現(xiàn)很多非常有效的API控制功能。這也解釋了我為什么一直推薦使用Nginx來代理我們的Spring Boot應用。

2. Nginx可以提供哪些能力

Nginx已經(jīng)不用太多的贊美了,它已經(jīng)得到了業(yè)界的廣泛認可。我們就聊聊它具體能夠?qū)崿F(xiàn)什么功能。

2.1 代理能力

這是針對服務器端我們最常用的功能,一臺具有公網(wǎng)的Nginx服務器可以代理和它能進行內(nèi)網(wǎng)通信的真實的服務器。讓我們的服務器不直接對外暴露,增加其抗風險能力。

假如Nginx服務器192.168.1.8可以和同一內(nèi)網(wǎng)網(wǎng)段的192.168.1.9的應用服務器進行通信,同時Nginx服務器具有公網(wǎng)能力并將公網(wǎng)綁定到域名felord.cn上。那么我們Nginx代理的對應的配置(nginx.conf)是這樣的:

 server {
  listen  80;
  server_name felord.cn;
 # ^~ 表示uri以某個常規(guī)字符串開頭,如果匹配到,則不繼續(xù)往下匹配。不是正則匹配
  location ^~ /api/v1 {
   proxy_set_header Host $host;
   proxy_pass http://192.168.1.9:8080/;
  }
 }

經(jīng)過以上配置后我們服務器真實的接口地址是http://192.168.1.9:8080/foo/get就可以通過http://felord.cn/api/v1/foo/get訪問。

proxy_pass如果以/結(jié)尾,就相當于是絕對根路徑,那么Nginx不會把location中匹配的路徑部分代理走;如果不以/結(jié)尾,也會代理匹配的路徑部分。

2.2 Rewrite功能

Nginx還提供了一個rewrite功能讓我們在請求到達服務器時重寫URI,有點類似Servlet Filter的意味,對請求進行一些預處理。

在2.1的例子中如果我們要實現(xiàn)如果判斷請求為POST的話返回405,只需要更改配置為:

location ^~ /api/v1 {
 proxy_set_header Host $host;
 if ($request_method = POST){
  return 405;
 }
 proxy_pass http://192.168.1.9:8080/;
}

你可以使用Nginx提供的全局變量(如上面配置中的$request_method)或自己設(shè)置的變量作為條件,結(jié)合正則表達式和標志位(last、break、redirectpermanent)實現(xiàn)URI重寫以及重定向。

2.3 配置HTTPS

之前很多同學在群里問如何在Spring Boot項目中配置HTTPS,我都推薦使用Nginx來做這個事情。 Nginx比Spring Boot中配置SSL要方便的多,而且不影響我們本地開發(fā)。Nginx中HTTPS的相關(guān)配置根據(jù)下面的改一改就能用:

http{
 #http節(jié)點中可以添加多個server節(jié)點
 server{
  #ssl 需要監(jiān)聽443端口
  listen 443;
  # CA證書對應的域名
  server_name felord.cn;
  # 開啟ssl
  ssl on;
  # 服務器證書絕對路徑
  ssl_certificate /etc/ssl/cert_felord.cn.crt;
  # 服務器端證書key絕對路徑 
  ssl_certificate_key /etc/ssl/cert_felord.cn.key;
  ssl_session_timeout 5m;
  # 協(xié)議類型
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  # ssl算法列表 
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
  # 是否 服務器決定使用哪種算法 on/off TLSv1.1 的話需要開啟
  ssl_prefer_server_ciphers on;
  
  location ^~ /api/v1 {
   proxy_set_header Host $host;
   proxy_pass http://192.168.1.9:8080/;
  }
 }
 # 如果用戶通過 http 訪問 直接重寫 跳轉(zhuǎn)到 https 這個是一個很有必要的操作
 server{
  listen 80;
  server_name felord.cn;
  rewrite ^/(.*)$ https://felord.cn:443/$1 permanent;
 }

}

這里就用到了rewrite來提高用戶體驗。

2.4 負載均衡

一般項目都是從小做到大起來的,起步的時候部署一個服務器就夠用了,如果你的項目用戶多了起來,首先恭喜你,說明你的項目方向很對。但是伴隨而來還有服務器壓力,你一定不想服務器宕機帶來的各種損失,你需要快速提高服務器的抗壓能力,或者你想不停機維護避免業(yè)務中斷,這些都可以通過Nginx的負載均衡來實現(xiàn),而且非常簡單。假如felord.cn我們部署了三個節(jié)點:

最簡單的輪詢策略

輪番派發(fā)請求,這種配置是最簡單的:

http {
 
 upstream app {
   # 節(jié)點1
   server 192.168.1.9:8080;
   # 節(jié)點2
   server 192.168.1.10:8081;
   # 節(jié)點3
   server 192.168.1.11:8082;
 }
 
 server {
  listen  80;
  server_name felord.cn;
 # ^~ 表示uri以某個常規(guī)字符串開頭,如果匹配到,則不繼續(xù)往下匹配。不是正則匹配
  location ^~ /api/v1 {
   proxy_set_header Host $host;
   # 負載均衡
   proxy_pass http://app/;
  }
 }
}

加權(quán)輪詢策略

指定輪詢幾率,weight和訪問比率成正比,用于后端服務器性能不均的情況:

upstream app {
  # 節(jié)點1
  server 192.168.1.9:8080 weight = 6;
  # 節(jié)點2
  server 192.168.1.10:8081 weight = 3;
  # 節(jié)點3
  server 192.168.1.11:8082 weight = 1;
}

最終請求處理數(shù)將為6:3:1 進行分配。其實簡單輪詢可以看作所有的權(quán)重均分為1。輪詢宕機可自動剔除。

IP HASH

根據(jù)訪問IP進行Hash,這樣每個客戶端將固定訪問服務器,如果服務器宕機,需要手動剔除。

upstream app {
  ip_hash;
  # 節(jié)點1
  server 192.168.1.9:8080 weight = 6;
  # 節(jié)點2
  server 192.168.1.10:8081 weight = 3;
  # 節(jié)點3
  server 192.168.1.11:8082 weight = 1;
}

最少連接

請求將轉(zhuǎn)發(fā)到連接數(shù)較少的服務器上,充分利用服務器資源:

upstream app {
  least_conn;
  # 節(jié)點1
  server 192.168.1.9:8080 weight = 6;
  # 節(jié)點2
  server 192.168.1.10:8081 weight = 3;
  # 節(jié)點3
  server 192.168.1.11:8082 weight = 1;
}

其它方式

我們可以借助一些插件來實現(xiàn)其它模式的負載均衡,例如借助于nginx-upsync-module實現(xiàn)動態(tài)負載均衡。我們是不是借助于此可以開發(fā)一個灰度發(fā)布功能呢?

2.5 限流

通過對Nginx的配置,我們可以實現(xiàn)漏桶算法和令牌桶算法,通過限制單位時間的請求數(shù)、同一時間的連接數(shù)來限制訪問速度。這一塊我并沒有深入研究過這里就提一提,你可以查詢相關(guān)的資料研究。

3. 總結(jié)

Nginx非常強大,推薦使用它來代理我們的后端應用,我們可以通過配置實現(xiàn)很多有用的功能,而不必進行一些非業(yè)務邏輯的編碼來實現(xiàn),如果你在Spring Boot中實現(xiàn)限流、配置SSL的話,麻煩不說,還影響本地開發(fā),使用Nginx可以讓我們專心到業(yè)務中去。可以說Nginx在這里充當了一個小網(wǎng)關(guān)的作用,其實很多知名網(wǎng)關(guān)底層都是Nginx,比如Kong、Orange、Apache APISIX等,如果你有興趣可以玩一玩Nginx的高級形態(tài)Openresty。

到此這篇關(guān)于為什么我推薦Nginx作為后端服務器代理的文章就介紹到這了,更多相關(guān)Nginx作為后端服務器代理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • nginx并發(fā)數(shù)限制limit_conn基本語法

    nginx并發(fā)數(shù)限制limit_conn基本語法

    這篇文章主要為大家介紹了nginx并發(fā)數(shù)限制limit_conn基本語法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • uwsgi+nginx代理Django無法訪問靜態(tài)資源的解決

    uwsgi+nginx代理Django無法訪問靜態(tài)資源的解決

    這篇文章主要介紹了uwsgi+nginx代理Django無法訪問靜態(tài)資源,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • 一文快速了解Nginx超時設(shè)置

    一文快速了解Nginx超時設(shè)置

    這篇文章主要給大家介紹了關(guān)于如何通過一文快速了解Nginx超時設(shè)置的相關(guān)資料,:后端正常的業(yè)務處理時間超過了nginx的超時時間,導致nginx主動返回504,為解決這個問題,我們網(wǎng)上搜索發(fā)現(xiàn)可以通過調(diào)整這幾個參數(shù)來調(diào)大nginx的超時時間,需要的朋友可以參考下
    2023-11-11
  • Nginx中配置WebSocket代理的詳細步驟

    Nginx中配置WebSocket代理的詳細步驟

    Nginx 可以配置為 WebSocket 代理,將 WebSocket 連接從客戶端轉(zhuǎn)發(fā)到后端服務器,以下是如何在 Nginx 中配置 WebSocket 代理的詳細步驟和示例配置,需要的朋友可以參考下
    2025-02-02
  • nginx安裝時,make編譯可能會出現(xiàn)的錯誤問題

    nginx安裝時,make編譯可能會出現(xiàn)的錯誤問題

    這篇文章主要介紹了nginx安裝時,make編譯可能會出現(xiàn)的錯誤問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • nginx反向代理踩過的坑及解決

    nginx反向代理踩過的坑及解決

    這篇文章主要介紹了nginx反向代理踩過的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • nginx 代理服務器配置雙向證書驗證的方法

    nginx 代理服務器配置雙向證書驗證的方法

    這篇文章主要介紹了nginx 代理服務器配置雙向證書驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 前端項目中Nginx配置指南詳解

    前端項目中Nginx配置指南詳解

    這篇文章主要為大家詳細介紹了在前端項目開發(fā)中如何配置Nginx,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-09-09
  • Nginx 虛擬主機配置的三種方式(基于域名)

    Nginx 虛擬主機配置的三種方式(基于域名)

    Nginx配置虛擬主機支持3種方式:基于IP的虛擬主機配置,基于端口的虛擬主機配置,基于域名的虛擬主機配置。本文主要介紹了基于域名的實現(xiàn),感興趣的小伙伴們可以參考一下
    2018-10-10
  • Nginx服務器中強制使用緩存的配置及緩存優(yōu)先級的講解

    Nginx服務器中強制使用緩存的配置及緩存優(yōu)先級的講解

    這篇文章主要介紹了Nginx服務器中強制使用緩存的配置及緩存優(yōu)先級的講解,一定程度上可以幫助大家解決Nginx不緩存或緩存失效的問題,需要的朋友可以參考下
    2016-01-01

最新評論

南木林县| 延边| 桂阳县| 高邮市| 潢川县| 陇南市| 和田市| 巩留县| 湘阴县| 五常市| 绩溪县| 乌拉特中旗| 阿拉尔市| 叶城县| 青河县| 桐梓县| 宝丰县| 遵化市| 钟祥市| 阜城县| 资源县| 卓资县| 会宁县| 乃东县| 德庆县| 涟水县| 浙江省| 内江市| 贡山| 枝江市| 绥芬河市| 奉贤区| 宝丰县| 麻江县| 长沙县| 普兰店市| 宾川县| 涡阳县| 太仓市| 庆云县| 纳雍县|