Nginx反向代理及配置

Nginx反向代理

二級域名系統

image-20240323215058131

顧名思義,我們有很多的這個不同的二級域名的用戶來訪問我們,比如說微博。它有一個主域名weibo.com。如果我叫一鳴,申請了一個微博,然后我就可以在微博這個主系統上申請一個二級域名來訪問我微博的主頁,具體實現需要在服務器上把域名的泛解析全部都解析到當前的一臺nginx服務器上,nginx可以通過反向代理,把所有的請求轉發到后端的另外一臺業務服務器,業務服務器拿到這個域名拆解字符串,把這個二級域名取出來,再從數據庫里去查詢它的信息并展示相應的內容,當然這個域名在數據庫里邊要存儲,并且它是唯一的。

短網址的實現

image-20240323215131846

比如現在有短網址dwz.cn/dskn1267,當用戶訪問的時候,它會幫我們去跳轉到一個真實的網址。短網址系統里先得有一個數據庫。db會存儲用戶提交上來的短網址和真實地址的映射。最簡單來說,后綴可以用uuid。uuid返回作為key,真實的地址作為value。全部都存在數據庫里。當用戶訪問到我們的系統的時候,訪問到 nginx。nginx通過反向代理,把請求打到后端的應用服務器上。應用服務器獲取到用戶請求的完整的URL,取到之后我們拆分這串字符串,然后去數據庫里去去匹配,拿到真實的地址之后,redirect用戶訪問的這個地址就被轉向了

http DNS

image-20240323215206017

http DNS一般來說不適合瀏覽器來使用,一般都是給手機的這個APP或者是基于CS架構的,比較適用于http dns,它可以在軟件里邊預埋幾個IP地址,這幾個IP地址就是我們的nginx服務器IP地址。在系統啟動之后。APP會向這個IP去發起請求,請求某一個域名的真實的IP地址是什么。那我們的系統接到這個請求之后,參數讀到域名返回這個IP地址。

Nginx隧道式模型 網關、代理與反向代理

image-20240323223815879

反向代理

用戶在訪問我們的系統的時候,通過互聯網,然后打到機房的這個網關路由上。他會把這個請求轉發到具體的一臺服務器上,在這個過程當中,我們的網關肯定是能把網絡請求打到我們的 nginx 服務器上,它作為反向代理服務器的話,它需要把用戶所有的請求全部轉發到我們后端的應用服務器,相應的結果再反饋給 nginx在傳遞給用戶,這樣就叫反向代理。

正向代理
用戶主動的想要去上網。透過這個代理服務器才能訪問到我們的這個外網。那這個代理服務器就稱之為叫正向代理服務器。比如socket 代理服務器,HTTP 代理服務器啊,

正向代理和反向代理對比起來的區別只是我們所在的角度不一樣,

網關指的在我們去訪問互聯網的時候,假如說你拿手機連上了自己家里的路由器,那我就需要去把所有的數據包全部都發送給這個路由器。然后由路由器轉發,請求給我們的這個下一跳的這個網絡,那我們接觸到的第一個呃路由就是我們家里這個路由器,就是我們的網關。

網關就是訪問我們網絡的入口

特點就是它所有的請求都得轉發。都得經過網關.

應用場景

image-20240323230055595

image-20240323230111675

image-20240323230132091

反向代理服務器在我們的系統架構當中的一些應用場景
這是傳統項目當中的這個系統架構圖,前面是用戶,然后經過自己的網絡,然后域名解析,經過互聯網,然后打到機房內部的這個網關。到這個網關的時候,會中轉請求在這里邊呢,還會有防火墻。

那 nginx在這就起到了反向代理的作用,用戶想要訪問內網的任何資源,都必須得通過我這個反向代理服務器。

backend server 就是這個我們的后端的服務器,那 gateway server是網關路由服務器,在里邊會有很多這種其他的業務服務器,比如說管理用戶注冊登錄,管理這個商品。價格,管理庫存,然后展示商品等等。有數據庫服務器測試用的服務器文件,存儲服務器,一些邏輯業務服務器,還有這個保證高可用的 ha server服務器,還有這個權限管理的服務器。這 gateway 服務器是把所有的這個業務服務器統一的管理起來,在中間起到了尋找的作用啊,
還有權限服務器,鑒權的作用并不是說所有的請求都能訪問某些服務的,你需要經過這個 gateway路由服務器去做一次權限認證,也就是我們這個所有的業務邏輯是放在后端tomcat 上跑。然后這個 nginx 只做這個業務中轉請求中轉,所有的請求全都打到我們的后端服務器上,這是最簡單的應用,也是最傳統的應用技術架構,比較適合小型項目,傳統項目以及這個傳統的互聯網項目,像傳統項目的一些 ERP、 CRM 、CMS 等等,這些雖然看起來非常龐大,動不動的一個壓縮包。就有一兩個G大小的這種源代碼,看起來非常龐大,但是它的這個并發量其實并不高,如果并發量并不是特別高的話。尤其是給一些內網用戶使用的話啊,那我們這種直接代理過去就可以了。

在接觸到這種中小型互聯網項目的時候,nginx 作為反向代理服務器,它要起到更多的功能了,比如說我要幫我們去偽裝一下當前訪問的這個地址真實地址,比如想要請求這個item?serviceid=100,這請求呢 URL 打給本來是要給tomcat 的,你直接給了 nginxnginx 能把這個請求直接給我轉發過去,讓用戶正常訪問,這是沒有問題的,
但是這種暴露 URL 的缺點,其實也是無關大雅的,但是有時候讓人看起來好像并不是那么高級,那我們可以把它換成一種展現形式,
比如說/item/100,這 service 其實我沒必要暴露給用戶,不需要讓他知道這是一個什么服務,
然后 ID也不需要讓他去傳遞了,這樣看起來更好記一些。
這是 URL rewrite 這個功能,可以把原本這個 URL 呢,給它變成這個/item/100,也就用戶在請求這個請求這個 URL 的時候呢。通過 nginx 可以幫我們去轉換成真實的 URL,然后把這真實的URL再轉發給我們后端的服務器。
這樣做還有另外一個好處,就是面向于一些搜索引擎,它可能會看起來你這是一個獨立的頁面。它權重會更高一些。
然后 nginx 在這里邊不光是起到反向代理的作用,還可以起到一些額外的這些功能上,業務邏輯上的作用,比如說。轉發一下這個請求,改變一下URL,那這是對于業務邏輯的這種轉發,

業務的數據包不會特別大,比如說我就想要一個 json 數據。我就想是提交一下呃,我修改的密碼,這份數據那幾 k 大小也就夠了,所以在這 nginx 比較能扛,它可能一臺 nginx 后邊對應了數十臺這個業務邏輯服務器。
那 如果nginx 后邊代理的是文件服務器,同樣是業務邏輯轉發,那轉發到我們的 nginx 上之后, nginx 后邊代理的是文件服務器,那這時候的 nginx 很明顯就成了瓶頸了。
因為你后端的數據存儲服務器的存儲的是非常非常多的這種數據,而且數據非常大,比如說一些電影,一些軟件啊非常大的這種數據包那它在傳這個傳遞數據的時候,
nginx 就會成為網絡的瓶頸。那么如果你想要用 nginx 做反向代理的話,那你就得多配一些 nginx,然后去分組去代理就可以了。

負載均衡

負載均衡就是訪問到一個這個服務器,一旦它不可用的時候,它可以把故障轉移到另外一臺服務器。

反向代理

proxy_pass http://baidu.com;
location / {proxy_pass http://baidu.com/;# proxy_pass root 二選一
}

基于反向代理的負載均衡

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream httpds { # httpds 隨意定義 server 192.168.1.102:80;server 192.168.1.103:80;}server {listen       80;server_name  localhost;location / {proxy_pass http://httpds;# root   vod;# index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

負載均衡策略

輪詢

默認情況下使用輪詢方式,逐一轉發,這種方式適用于無狀態請求。

weight(權重)

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

upstream httpds {server 127.0.0.1:8050 weight=10 down;server 127.0.0.1:8060 weight=1;server 127.0.0.1:8060 weight=1 backup;}

down:表示當前的server暫時不參與負載

weight:默認為1.weight越大,負載的權重就越大。

backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。

ip_hash

根據客戶端的ip地址轉發同一臺服務器,可以保持回話。

least_conn

最少連接訪問

url_hash

根據用戶訪問的url定向轉發請求

fair

根據后端服務器響應時間轉發請求

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95527.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95527.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式系統通信總線全景探秘:從板內到云端

引言 在嵌入式系統設計中,選擇合適的通信總線是決定系統性能、成本和可靠性的關鍵因素。從簡單的芯片間通信到復雜的工業網絡,不同的總線技術各司其職,形成了嵌入式世界的"交通網絡"。本文將深入探討五種經典且重要的通信技術&…

2022版Unity創建時沒有2D燈光(2D Light),沒有Global LIght2D怎么辦?

簡單來說就是你的渲染管線沒有升級到URP管線,所以才沒有這些2D燈光 如果你的創建燈光和我一樣,沒有紅線劃掉的部分,說明你和我的問題一樣,看下面的教程可以解決。 1. 確保Unity版本 確保你的Unity版本至少為2019.4或更高版本&…

技術小白如何快速的了解opentenbase?--把握四大特色

1.基本介紹 作為一名計算機專業相關背景的學生,我們或多或者接觸過一些數據庫,對于數據庫肯定是有所了解的; 你可能學習的是和微軟的sql server這樣的數據庫; 你可能接觸的更多的是企業級項目開發里面使用的這個mysql數據庫&#…

企業微信AI落地:如何選擇企業微信服務商?

現在企業用企業微信做客戶運營,最怕的不是“沒AI工具”,而是“AI用不起來”——要么功能不貼業務場景,員工嫌麻煩不用;要么回復不專業,客戶體驗差;要么數據不同步,管理者看不到效果。其實解決這…

【學Python自動化】 11 標準庫簡介 —— 第二部分

一、格式化輸出 reprlib 模塊 提供定制版 repr(),縮略顯示大型或深層嵌套對象import reprlib reprlib.repr(set(supercalifragilisticexpialidocious)) # "{a, c, d, e, f, g, ...}"pprint 模塊 美化輸出,添加換行和縮進顯示復雜數據結構impor…

【Kubernetes】知識點2

15. 什么是Pod的根容器?答:Pod 的根容器是每個 Pod 中默認存在的一個特殊容器pause容器,有時也稱為infra容器,它是Pod 啟動時創建的第一個容器,也是整個 Pod中所有容器的 “父容器”。其核心作用是為 Pod 內的所有容器…

視頻增強AI哪個效果好?實戰對比幫你找到最適合的工具

hitpaw 牛小影hitpaw 牛小影在處理低質量視頻時,我們經常會遇到畫面模糊、噪點過多、分辨率不足等問題,比如老舊視頻資料修復、監控錄像清晰化、手機拍攝視頻畫質提升等。這時候,一款好用的視頻增強AI軟件就成了剛需。下面就為大家盤點幾款效…

C#工作流示例(WorkflowCore)

using Microsoft.Extensions.DependencyInjection; using WorkflowCore.Interface; using WorkflowCore.Models;namespace LeaveRequestWorkflow {// 請假申請單public class LeaveBill{/// <summary>/// 申請人/// </summary>public string EmployeeName { get; s…

兩個子進程之間使用命名pipe

兩個子進程間可以使用命名管道&#xff0c;非常簡單。管道如果文件一樣存在硬盤中&#xff0c;使用ls可以查看&#xff0c;管道文件0字節。使用fork函數分別創建兩個子進程。 一個負責讀數據&#xff0c;一個負責寫數據。 #define _GNU_SOURCE #include <stdio.h> #inclu…

第一講、Kafka 初識與環境搭建

一、Kafka 是什么&#xff1f; Apache Kafka 是一個分布式的消息隊列&#xff08;Message Queue&#xff09;與流處理平臺。 它最早由 LinkedIn 開發&#xff0c;后來捐贈給 Apache 基金會&#xff0c;現已廣泛應用于日志收集、實時數據管道和大數據處理。 Kafka 的特點&…

Conda相關的用法

1、背景 此文主要記錄conda的一些用法&#xff0c;大部分命令來自ai搜索以及自己的理解。 2、安裝conda 2.1 選擇 conda 版本 2.1.1 Anaconda 含有 Conda 大量科學計算包&#xff08;NumPy、Pandas、Matplotlib 等&#xff09;適合數據科學、機器學習初學者下載地址&…

數據庫選擇有講究?SQLite、PostgreSQL還是MySQL?

不同規模的項目&#xff0c;數據庫選擇有講究。大家好&#xff0c;我是技術支持彼得&#xff0c;每天兩眼一睜就是為客戶解決問題。在日常使用我們的視頻平臺時&#xff0c;很多用戶會問到數據庫選擇的問題。今天就來詳細說說EasyGBS、EasyNVR和EasyCVR三大平臺該如何選擇數據庫…

在VMware的Win10虛擬機中安裝使用ENSP

VMware安裝Windows10 安裝ENSP及相關軟件 把安裝ENSP所使用的相關復制到已安裝好的Windows10虛擬機中&#xff0c;如下圖所示。 安裝VirtualBox 安裝時請確保路徑為英文目錄&#xff0c;并在出現"安裝設備軟件"或"Oracle USB設備"提示時選擇安裝選項。具…

Go 語言面試題詳解之接口 (Interface) 詳解一文吃透

自古流傳著一個傳言...在 Go 語言面試的時候必有人會問接口&#xff08;interface&#xff09;的實現原理。這又是為什么&#xff1f;為何對接口如此執著&#xff1f;實際上&#xff0c;Go 語言的接口設計在整體扮演著非常重要的角色&#xff0c;沒有他&#xff0c;很多程序估計…

ansible循環+判斷(with,loop,when,if,for)

一、文檔核心定位 本文檔聚焦Ansible自動化運維中的兩大核心功能——循環與判斷&#xff0c;通過“功能說明完整Playbook代碼”的形式&#xff0c;覆蓋循環迭代場景&#xff08;列表、字典、文件等&#xff09;、數據處理過濾器&#xff08;字符串、數字、加密等&#xff09;、…

在linux下使用MySQL常用的命令集合

1. 數據庫查看和選擇-- 查看所有數據庫 SHOW DATABASES;-- 選擇使用某個數據庫&#xff08;需要修改&#xff1a;your_database_name&#xff09; USE your_database_name;-- 查看當前正在使用的數據庫 SELECT DATABASE();說明&#xff1a;your_database_name 替換為你要操作的…

mysy2使用

參考鏈接 https://blog.csdn.net/qq_36525177/article/details/115279468 介紹 要把linux程序在windows上編譯&#xff0c;且最好兼容posix標準&#xff0c;就用msys2。 使用 1、先下載安裝&#xff0c;我裝在D:\mysy2 2、打開vscode&#xff0c;不要切換目錄&#xff0c;…

【Protues仿真】基于AT89C52單片機的溫濕度測量

目錄 0案例視頻效果展示 1DHT11溫度濕度傳感器 1.1傳感器簡介 1.2引腳定義&#xff08;從左到右&#xff0c;面對網格面&#xff09; 1.3時序 & 校驗&#xff08;原理速覽&#xff09; 1.4常見故障排查 2 DHT11溫度濕度傳感器數據 2.1 DHT11溫度濕度傳感器數據格式…

JavaScript箭頭函數與普通函數:兩種工作方式的深度解析

文章目錄JavaScript箭頭函數與普通函數&#xff1a;兩種"工作方式"的深度解析 &#x1f3f9;&#x1f19a;&#x1f468;&#x1f4bc;引言&#xff1a;為什么需要箭頭函數&#xff1f;核心區別全景圖對比表格&#xff1a;箭頭函數 vs 普通函數關系示意圖一、this綁定…

藍光三維掃描技術賦能內衣胸墊設計:從精準制造到個性化體驗的革新之旅

在競爭激烈的內衣市場中&#xff0c;產品設計的精準性、舒適度和個性化已成為品牌制勝的關鍵。傳統內衣設計依賴主觀經驗與樣品反復調整&#xff0c;不僅周期長、成本高&#xff0c;且難以實現對復雜胸型的精準適配。為應對這一挑戰&#xff0c;某知名內衣品牌采用新拓三維XTOM…