反向代理(Reverse Proxy)方式是指用代理服務器來接受 internet 上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給 internet 上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。nginx
舉個例子,一個用戶訪問 www.example.com/readme,可是 www.example.com 上並不存在 readme 頁面,它是偷偷從另一臺服務器上取回來,而後做爲本身的內容返回給用戶。可是用戶並不知情這個過程。對用戶來講,就像是直接從 www.example.com 獲取 readme 頁面同樣。這裏所提到的 www.example.com 這個域名對應的服務器就設置了反向代理功能。web
反向代理服務器,對於客戶端而言它就像是原始服務器,而且客戶端不須要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將得到的內容返回給客戶端,就像這些內容本來就是它本身的同樣。以下圖所示:django
反向代理的典型用途是將防火牆後面的服務器提供給 Internet 用戶訪問,增強安全防禦。反向代理還能夠爲後端的多臺服務器提供負載均衡,或爲後端較慢的服務器提供 緩衝 服務。另外,反向代理還能夠啓用高級 URL 策略和管理技術,從而使處於不一樣 web 服務器系統的 web 頁面同時存在於同一個 URL 空間下。後端
Nginx 的其中一個用途是作 HTTP 反向代理,下面簡單介紹 Nginx 做爲反向代理服務器的方法。api
使用nginx反向代理django的api請求安全
配置文件nginx.conf
服務器
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
server_tokens off;
# 配置反向代理,將訪問 / 的url路徑,反向請求至http://192.168.43.128:8000
server {
listen 8080;
location / {
proxy_pass http://192.168.43.128:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
複製代碼
測試以下:網絡
能夠看到請求8000端口號正常。負載均衡
能夠看到訪問是正常返回結果的。說明nginx反向代理成功。測試