什么是反向代理?
正向代理: 一般的訪問流程是客戶端直接向目標服務器發送請求并獲取內容,使用正向代理后,客戶端改為向代理服務器發送請求,并指定目標服務器(原始服務器),然后由代理服務器和原始服務器通信,轉交請求并獲得的內容,再返回給客戶端。正向代理隱藏了真實的客戶端,為客戶端收發請求,使真實客戶端對服務器不可見。
反向代理: 反向代理(Reverse Proxy)是一種服務器架構模式,它充當服務器和客戶端之間的中間層,將客戶端的請求轉發到多個后端服務器,并將響應返回給客戶端。在反向代理中,客戶端不直接與后端服務器通信,而是通過反向代理服務器與后端服務器進行通信,使真實服務器對客戶端不可見。
反向代理的工作原理?
客戶端發送請求到反向代理服務器。
反向代理服務器接收到請求后,根據配置規則或負載均衡算法選擇一個后端服務器。
反向代理服務器將請求轉發給所選的后端服務器。
后端服務器處理請求并生成響應。
反向代理服務器將后端服務器的響應返回給客戶端。
如何配置反向代理?
打開 Nginx 的配置文件,通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/default.conf
在 http 塊中添加以下配置來配置反向代理:
server {listen 80;server_name your_domain.com;location / {proxy_pass http://backend_server;}
}
listen:指定 Nginx 監聽的端口。
server_name:指定服務器的域名或 IP 地址。
location /:指定要代理的 URL 路徑。
proxy_pass:指定反向代理的目標服務器地址。
在上面的配置中,將 your_domain.com
替換為你的域名或 IP 地址,將 http://backend_server
替換為實際的后端服務器地址。
重啟 Nginx:
完成配置后,保存文件并重新啟動 Nginx 服務,以使配置生效。在 Ubuntu 上,可以使用以下命令重啟 Nginx:
sudo service nginx restart
驗證反向代理:
確保你的反向代理已正確配置。訪問 your_domain.com
或配置的域名,Nginx 將會代理請求并將其轉發到指定的后端服務器。后端服務器的響應將通過 Nginx 返回給客戶端。
uwsgi_pass和proxy_pass的區別
uwsgi_pass和proxy_pass是Nginx配置中用于將請求轉發到不同類型后端服務器的指令,它們有以下區別:
uwsgi_pass:
uwsgi_pass用于將請求轉發給uwsgi服務器,通過uwsgi協議與后端uwsgi應用程序進行通信。uwsgi服務器是專門用于處理uwsgi協議的服務器,它能夠直接與uwsgi應用程序進行交互,提供更高效和定制化的通信方式。當使用uwsgi_pass指令時,Nginx會將請求直接傳遞給uwsgi服務器,而不會進行HTTP協議的解析和轉發。
proxy_pass:
proxy_pass用于將請求轉發給HTTP或HTTPS服務器,通過HTTP協議與后端應用程序進行通信。這個后端服務器可以是任何支持HTTP協議的服務器,如Nginx、Apache、Node.js等。當使用proxy_pass指令時,Nginx會充當反向代理服務器,接收客戶端的請求,并將其轉發給后端的HTTP服務器進行處理。
反向代理實例一
實現效果:使用 Nginx 反向代理,訪問 http://www.123.com 直接跳轉到 127.0.0.1:8080
注意:此處如果要想從http://www.123.com
跳轉到本機指定的ip,需要修改本機的hosts文件。此處略過
配置代碼
server {listen 80;server_name www.123.com;location / {root html;index index.html index.htm;proxy_pass http://127.0.0.1:8080}
}
如上配置,我們監聽 80 端口,訪問域名為 http://www.123.com
(不加端口號時默認為 80 端口),故訪問該域名時會跳轉到 127.0.0.1:8080 路徑上。
此處的意思為:nginx 反向代理服務監聽 192.168.17.129的80端口,如果有請求過來,則轉到proxy_pass配置的對應服務器上,僅此而已。
反向代理的作用?
負載均衡:反向代理可以將請求分發給多個后端服務器,平衡服務器負載,提高系統的性能和可靠性。它可以根據不同的算法(如輪詢、加權輪詢、最少連接數等)來選擇后端服務器,確保請求被合理地分配。
緩存加速:反向代理可以緩存靜態內容或頻繁請求的動態內容,減輕后端服務器的負載并加快響應速度。它可以在緩存中保存響應,并在后續請求中直接返回緩存的響應,而無需訪問后端服務器。
安全性和訪問控制:反向代理可以充當安全屏障,隱藏后端服務器的真實IP地址和架構細節,提供一定的安全性。它可以實施訪問控制、身份驗證和授權策略,保護后端服務器免受惡意請求和攻擊。
SSL加密和解密:反向代理可以承擔SSL終止(SSL Termination)的功能,將客戶端和后端服務器之間的SSL/TLS加密和解密處理在代理層進行,減輕后端服務器的計算負載。