反向代理
- 代理
- 正向代理
- 反向代理
- Nginx 反向代理
- Nginx 反向代理相關指令介紹
- listen
- server_name
- location
- proxy_pass
- index
- Nginx 服務器的反向代理服務是其最常用的重要功能,由反向代理服務也可以衍生出很多與此相關的
- Nginx 服務器重要功能,比如后面會介紹的負載均衡,我會先介紹 Nginx 的反向代理,當然在了解反向代理之前,我們需要先知道什么是代理以及什么是正向代理,
代理
- 在Java設計模式中,代理模式是這樣定義的:給某個物件提供一個代理物件,并由代理物件控制原物件的參考,
- 代理簡單來說,就是如果我們需要做什么,但又不想直接去做,那么這時候就找另外一個人幫我們去做,那么這個例子里面的中介公司就是給我們做代理服務的,我們委托中介公司幫我們找房子,我們只負責付款,其他事情中介公司幫我們干了,
- Nginx 主要能夠代理如下幾種協議,其中用到的最多的就是做Http代理服務器,

正向代理
- 這里我再舉一個例子:大家都知道,現在國內是訪問不了 Google的,那么怎么才能訪問 Google呢?我們又想,美國人不是能訪問 Google嗎(這不廢話,Google就是美國的),如果我們電腦的對外公網 IP 地址能變成美國的 IP 地址,那不就可以訪問 Google了,VPN 就是這樣產生的,
- 我們在訪問 Google 時,先連上 VPN 服務器將我們的 IP 地址變成美國的 IP 地址,然后就可以順利的訪問了,
- 這里的 VPN 就是做正向代理的,正向代理服務器位于客戶端和服務器之間,為了向服務器獲取資料,客戶端要向代理服務器發送一個請求,并指定目標服務器,代理服務器將目標服務器回傳的資料轉交給客戶端,這里客戶端是要進行一些正向代理的設定的,
- 正向代理代理的是客戶端
反向代理
- 反向代理,其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求發送到反向代理服務器,由反向代理服務器去選擇目標服務器獲取資料后,在回傳給客戶端,此時反向代理服務器和目標服務器對外就是一個服務器,暴露的是代理服務器地址,隱藏了真實服務器IP地址,
- 反向代理代理的是服務器
Nginx 反向代理
使用 nginx 反向代理 www.123.com 直接跳轉到127.0.0.1:8080;
- 啟動一個tomcat:瀏覽器地址欄輸入 127.0.0.1:8080,出現如下界面

- 通過修改本地windows.System32.drivers.etc.hosts檔案,將 www.123.com 映射到 127.0.0.1
127.0.0.1 www.123.com
- 在 nginx.conf 組態檔中增加如下配置:
server {
listen 80;
server_name www.123.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
#...省略無關配置
}
4.如上配置,我們監聽80埠,訪問域名為www.123.com,不加埠號時默認為80埠,故訪問該域名時會跳轉到127.0.0.1:8080路徑上,我們在瀏覽器端輸入 www.123.com 結果如下:

- 總結
其實這里更貼切的說是通過nginx代理埠,原先訪問的是8080埠,通過nginx代理之后,通過80
埠就可以訪問了,
Nginx 反向代理相關指令介紹
listen
一、配置監聽的IP地址
listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred] [accept_filter=filter] [bind] [ssl];
二、配置監聽埠
listen port[default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [ssl];
server_name
該指令用于虛擬主機的配置,通常分為以下兩種:
一、 基于名稱的虛擬主機配置
語法格式如下:
server_name name ...;
- 對于name 來說,可以只有一個名稱,也可以有多個名稱,中間用空格隔開,而每個名字由兩
段或者三段組成,每段之間用“.”隔開,
server_name 123.com www.123.com
- 可以使用通配符“*”,但通配符只能用在由三段字符組成的首段或者尾端,或者由兩端字符組成
的尾端
server_name *.123.com www.123.*
二、基于 IP 地址的虛擬主機配置
語法結構和基于域名匹配一樣,而且不需要考慮通配符和正則運算式的問題,
server_name 192.168.1.1
location
該指令用于匹配 URL,
語法如下:
location [ = | ~ | ~* | ^~] uri {
}
1、= :用于不含正則運算式的 uri 前,要求請求字串與 uri 嚴格匹配,如果匹配成功,就停止繼
續向下搜索并立即處理該請求,
2、~:用于表示 uri 包含正則運算式,并且區分大小寫,
3、~:用于表示 uri 包含正則運算式,并且不區分大小寫,
4、^~:用于不含正則運算式的 uri 前,要求 Nginx 服務器找到標識 uri 和請求字串匹配度最高的
location 后,立即使用此 location 處理請求,而不再使用 location 塊中的正則 uri 和請求字串做匹
配,
注意:如果 uri 包含正則運算式,則必須要有 ~ 或者 ~ 標識,
proxy_pass
該指令用于設定被代理服務器的地址,可以是主機名稱、IP地址加埠號的形式,
語法結構如下:
proxy_pass URL;
URL 為被代理服務器的地址,可以包含傳輸協議、主機名稱或IP地址加埠號,URI等,
proxy_pass http://www.123.com/uri;
proxy_pass http://127.0.0.1:8080;
index
該指令用于設定網站的默認首頁,
語法為:
index filename ...;
后面的檔案名稱可以有多個,中間用空格隔開,
index index.html index.jsp;
通常該指令有兩個作用:第一個是用戶在請求訪問網站時,請求地址可以不寫首頁名稱;
第二個是可以對一個請求,根據請求內容而設定不同的首頁,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290054.html
標籤:其他
