HOME 首頁
SERVICE 服務產品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    nginx內網轉外網(nginx轉發(fā)內網到外網)

    發(fā)布時間:2023-03-13 00:32:31     稿源: 創(chuàng)意嶺    閱讀: 73        問大家

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于nginx內網轉外網的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    ChatGPT國內免費在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網頁版、PC客戶端

    官網:https://ai.de1919.com

    本文目錄:

    nginx內網轉外網(nginx轉發(fā)內網到外網)

    一、Ribbon實現(xiàn)前端負載均衡(本地路由導向)-加在消費者端

    1配置消費者路徑能支持通用訪問

    如用 provider-user 替換 localhost:7900

    2配置要讓這個application.name進行解析,到Eureka換成對應地址

    ribbon和nginx比較

    1)nginx(外網轉內網,沒有進行業(yè)務加工)基于C語言,快速,性能高達5w/s

    redis 5w/s,RibbitMQ (進行了業(yè)務加工)1.2w.s,ApacheActiveMQ 0.6w/s

    kafuka 20w/s~50w/s大數據用(可以丟失數據,大數據取的是近似值)

    Zuul2.0 200w/s

    負載均衡、反向代理、代理后端服務器。隱藏真實地址,防火墻設置真實地址不能外網直接訪問

    2)Ribbon負載均衡,前端,客戶端開始導向(轉向)

    二、nginx只用一個公網端口轉發(fā)多個內網服務

      一個常見的問題,生產環(huán)境的一臺有公網ip的服務器,為了安全起見,運維只給開一個端口,于是考慮用nginx根據url的前綴路徑來轉發(fā)到不同服務。例如:

    以springboot工程為例,我們自己的web服務一般都會通過設置

    來給該服務的所有url設置一個統(tǒng)一的前綴路徑 /xxxxxx 。這時候nginx就可以將所有帶有前綴 /xxxxxx 的請求轉發(fā)到該服務。這是一個很簡單的事。

      問題是有很多第三方服務,例如kafka manager,他是沒有這樣的前綴的,假設kafka安裝在 192.168.0.182 機器上,kafka manager的訪問地址就是 http://192.168.0.182:3000 ,我們當然可以在首次訪問時通過地址 http://192.168.0.182:3000/kafka 讓nginx根據 /kafka 識別到這是kafka manager服務并轉發(fā)到 http://192.168.0.182:3000 ,但是我們打開kafka manager頁面上的鏈接時是不會有我們自己添加的 /kafka 前綴的,上面的方法失效。

      我們都知道http服務是無狀態(tài)的,就像上面所說即使訪問了kafka manager的主頁,點擊主頁上按鈕發(fā)起的請求也無法被識別為kafka manager請求。但是web服務絕大多是都是需要有狀態(tài)的,主要有session/cookie、token兩種方式來解決這個問題。也可以用來解決上面的問題。

    在nginx中配置:

      這時候又有一個問題,使用同樣的ip:port來訪問這些服務,在瀏覽器看來所有的服務都是一個域的,他們的cookie就會是同一個cookie,這時候nginx沒辦法根據cookie的不同轉發(fā)到不同的服務。

      我們想到了給每個服務配置一個域名(沒有那么多公網域名可用,就在本地hosts文件配置了),產生跨域的效果,讓不同的服務有獨立的cookie。

       從來都是解決跨域問題,從沒想過有一天要主動跨域

      如果配置了域名,完全可以讓nginx根據域名來做識別轉發(fā),為什么要用cookie呢?如果你都是配置了公網域名,那確實可以這么干,但是我們是改的hosts文件,保不齊誰的域名就寫錯了,或者因為只是本地hosts文件的修改根本就沒必要統(tǒng)一域名,這時候根據域名做轉發(fā)就不行了。

      kafka manager的訪問是不需要認證的,暴露在公網上、面向所有人是一件可怕的事,我們是設置了VPN和訪問白名單。

    三、10. Nginx實現(xiàn)反向代理

    反向代理: reverse proxy, 指的是代理外網用戶的請求到內部的指定的服務器, 并將數據返回給用戶的一種方式, 這是用的比較多的一種方式

    Nginx除了可以為企業(yè)提供高性能的web服務之外, 另外還可以將Nginx本身不具備的請求通過某種預定義的協(xié)議轉發(fā)至其他服務器處理, 不同的協(xié)議就是Nginx服務器與其他服務器進行通信的一種規(guī)范, 主要在不同的場景使用以下模塊實現(xiàn)不同的功能

    生成環(huán)境部署架構:

    訪問邏輯圖:

    Nginx反向代理http服務:

    1. proxy_pass

    2. proxy_hide_header field

    修改前, 響應報文頭部會攜帶ETag信息

    修改后ETag信息被隱藏

    3. proxy_pass_header field

    4. proxy_pass_request_body

    5. proxy_pass_request_headers

    6. proxy_set_header

    由于proxy_set_header只是修改了請求報文的頭部信息, 添加了自定義的字段, 因此, 還需要在后端服務器修改日志定義格式, 才能方便將客戶端ip記錄到日志信息中

    注意1:通過set_proxy_header自定義變量只是給請求報文添加了一個自定義的字段, 其字段值是人為根據系統(tǒng)內置變量設定的

    注意2: 這種方法, 在多級代理的情況下, 并不能將客戶端ip, 逐層的傳給后端服務器, 而是需要利用$proxy_add_x_forwarded_for變量實現(xiàn)

    注意3: 如果一定要使用proxy_set_header去傳遞客戶端ip和每一層代理的ip地址, 那么需要在每一層nginx代理都開啟proxy_set_header, 并且設置不同的自定義變量去引用nginx自帶變量$remote_addr, 這樣每一級nginx都會記錄上一級, 也就包括客戶端的ip地址, 同時, 在后端服務器的日志格式中, 要添加多個nginx自定義的變量, 這樣也可以把客戶端ip和中間經過的代理的ip全部傳遞給后端的服務器

    proxy_add_x_forwarded_for實現(xiàn)多級代理ip地址透傳示例: 需要在每一級代理都開啟

    實驗環(huán)境:

    7. 有關反向代理時間的幾個參數

    8. proxy_ignore_client_abort

    9. hash表大小的設置

    客戶端 ----- http協(xié)議 ------- nginx(代理服務器,10.0.0.86) ----- http --- apache (10.0.0.85)

    客戶端, 通過訪問nginx上定義的虛擬主機中的server_name域名, 通過內部定義的location匹配規(guī)則, 被轉發(fā)到10.0.0.85服務器

    代理服務器與后端服務器連接出現(xiàn)問題可能發(fā)生的報錯:

    如果后端服務器想把圖片資源放到固定的目錄下, 也可以自定義, 比如存到/var/www/html/static, 那么nginx的location就要修改為如下:

    緩存功能相關參數:

    實驗環(huán)境:

    proxy_pass 可以讓Nginx將客戶端請求轉發(fā)至后端單臺服務器, 但是無法轉發(fā)至特定的一組服務器, 而且不能對后端服務器提供相應的服務器狀態(tài)監(jiān)測.

    Nginx可以基于 ngx_http_upstream_module 模塊提供服務器分組轉發(fā), 權重分配, 狀態(tài)監(jiān)測, 使用不同的調度算法等高級功能

    關于ip_forward

    注意: 本實驗過程要先關閉緩存

    訪問固定的URI會被調度到相同的服務器

    四、通過 Nginx 的正向代理審計監(jiān)控內網用戶的外網訪問記錄

    一個位于客戶端和目標服務器之間的 Nginx 正向代理服務器, 客戶端向 Nginx 正向代理發(fā)送一個請求并指定目標服務器,然后代理向目標服務器轉交請求并將獲得的內容返回給客戶端及本地代理服務器緩存

    適用場景:

    正向代理又細分為 http、https 流量的 透明代理 和 非透明代理

    如何代理加密的 HTTPS 流量是正向代理需要解決的主要問題, 當前主要的兩種方式:

    1、透明代理, 利用本機 hosts 或 DNS 解析待訪問的目標域名到代理服務器 Ip

    2、非透明代理, 需在客戶終端設置代理服務器信息

    1、HTTP CONNECT 隧道 方式(非透明代理)

    2、NGINX Stream 方式(HTTPS 流量的透明正向代理)

    以上就是關于nginx內網轉外網相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。


    推薦閱讀:

    bing的聊天機器人(bing聊天機器人下載)

    chatonline漢語(chatting中文)

    bing國內版網頁地址(bingo網頁)

    度假酒店景觀設計說明(酒店景觀方案)

    網絡營銷方式有幾種(網絡營銷方式有幾種方式)