LNMP架構十九(Nginx代理)
十九、Nginx代理
1、什麼是代理伺服器
代理伺服器,客戶機在傳送請求時,不會直接傳送給目的主機,而是先發送給代理伺服器,代理服務接受客戶機請求之後,再向主機發出,並接收目的主機返回的資料,存放在代理伺服器的快取中,再發送給客戶機。
2、為什麼要使用代理伺服器
(1)提高訪問速度
由於目標主機返回的資料會存放在代理伺服器的快取中,因此下一次客戶再訪問相同的站點資料時,會直接從代理伺服器的快取中讀取,起到了快取的作用,尤其對於熱門站點能明顯提高請求速度。
(2)防火牆作用
由於所有的客戶機請求都必須通過代理伺服器訪問遠端站點,因此可在代理伺服器上設限,過濾某些不安全資訊。
(3)通過代理伺服器訪問不能訪問的目標站點
網際網路上有許多開發的代理伺服器,客戶機在訪問受限時,可通過不受限的代理伺服器訪問目標站點,通俗說,我們使用的翻牆瀏覽器就是利用了代理伺服器,雖然不能出國,但也可直接訪問外網。
3、什麼是正向代理?什麼是反向代理?
正向代理,架設在客戶機與目標主機之間,只用於代理內部網路對Internet的連線請求,客戶機必須指定代理伺服器,並將本來要直接傳送到Web伺服器上的http請求傳送到代理伺服器中。
反向代理伺服器架設在伺服器端,通過緩衝經常被請求的頁面來緩解伺服器的工作量,將客戶機請求轉發給內部網路上的目標伺服器;並將從伺服器上得到的結果返回給Internet上請求連線的客戶端,此時代理伺服器與目標主機一起對外表現為一個伺服器。現在許多大型web網站都用到反向代理。除了可以防止外網對內網伺服器的惡性攻擊、快取以減少伺服器的壓力和訪問安全控制之外,還可以進行負載均衡,將使用者請求分配給多個伺服器。
4、正向代理配置
1)正向代理:
server端:
應用在nginx的server端,不要server_name,需要新增一個resolver。
vi /etc/nginx/conf.d/zproxy.conf
server {
# 配置DNS解析IP地址,比如 Google Public DNS,以及超時時間(5秒)
resolver 8.8.8.8; # 必需
resolver_timeout 5s;# 監聽埠
listen 8081;access_log /usr/local/nginx/logs/proxy.access.log;
error_log /usr/local/nginx/proxy.error.log;location / { # 通用匹配,任何請求都匹配的到;
# nginx固定語法,直接轉發請求,配置正向代理引數,實現連同訪問協議一併轉發;
proxy_pass $scheme://$host$request_uri;
# 解決如果URL中帶"."後Nginx 503錯誤
proxy_set_header Host $http_host;# 配置快取大小
proxy_buffers 256 4k;
# 關閉磁碟快取讀寫減少I/O
proxy_max_temp_file_size 0;
# 代理連線超時時間
proxy_connect_timeout 30;# 配置代理伺服器HTTP狀態快取時間
proxy_cache_valid 200 302 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
測試
5、反向代理配置
vi /etc/nginx/conf.d/fproxy.conf
server {
listen 80;
server_name localhost; #實際情況可以寫域名
access_log logs/nginx.access.log main;
location / {
root /usr/share/nginx/html; #訪問根路徑
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr; #使用者的真實ip就被放在X-real-ip這個變數裡,然後在web端可以獲取
proxy_set_header Host $host;#如果客戶端發過來的請求的header中有’HOST’這個欄位時, $http_host和$host都是原始的’HOST’欄位
#比如請求的時候HOST的值是www.csdn.net 那麼反代後還是www.csdn.net 。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #在nginx 作為代理伺服器時,設定的IP列表,會把經過的機器ip,代理機器ip都記錄下來proxy_pass http://x.x.x.x:port #代理的後端ip
}}
具體的nginx proxy_set_header解釋可以檢視 https://blog.csdn.net/Michaelwubo/article/details/81203343
測試,訪問代理伺服器的80埠,跳轉至後端。