關于Nginx,除了用它做正常的Web服務器,還經常用它做網絡代理服務器使用;來解決網絡訪問受限的問題。日常大家討論最多的就是“正向代理”和"反向代理"。很多人,經常會弄不明白什么是"正向代理",什么又是"反向代理",他們之間到底有什么區別?
其實Nginx只有一種代理轉發功能。之所以大家經常會說正向代理或者是反向代理是因為站的角度不一樣。我們可以想象一下80-90年代,機關大院里面負責收發信件的老大爺,把老大爺收發信件動作,想象成Nginx對請求的轉發功能。
當老大爺把內部信件發往外部時,我們定義為正向代理,那么當老大爺把外部發往內部的信件轉發給內部每個具體的人時,就叫做反向代理。但是對于老大爺來說都是代理,完成的動作都是一樣的。對于Nginx來說也是一樣的,所有網絡請求轉發指令都是一樣的。
Nginx代理指令對比
1.將內部請求轉發到外部。
- upstream baidu {
- server www.baidu.com;
- }
- server{
- listen 8100;
- server_name proxy_baidu;
- location / {
- proxy_pass http://baidu;
- }
- }
訪問 proxy_ip:8100 將會通過代理服務器把請求發出去。
1.將外部請求轉發到內部
- upstream test-api {
- ip_hash;
- server 192.168.32.12:80;
- server 192.168.32.13:80;
- }
- server{
- listen 8080;
- location / {
- proxy_pass http://test-api;
- }
- }
這段配置將會把外部發往Nginx請求轉發給內部的192.168.32.12和192.168.32.13這兩臺服務器。
結論
通過對比兩段配置會發現,對于Nginx來說,無論正向代理還是反向代理,指令都是一樣的。所以對于Nginx來說,都是代理,不分正反。最后附上一份示意圖,來進一步說明Nginx網絡代理的角色。
原文鏈接:https://www.toutiao.com/i6989475489471562252/