linux高階-Nginx(八)-反向代理上

Nginx 反向代理功能

  • 反向代理:反向代理也叫reverse proxy,指的是代理外網用戶的請求到內部的指定web服務器,並將數據返回給用戶的一種方式,這是用的比較多的一種方式.
  • Nginx除了可以在企業提供高性能的web服務之外,另外還可以將本身不具備的請求通過某種預定義的協議轉發至其它服務器處理,不同的協議就是Nginx服務器與其他服務器進行通信的一種規範,主要在不同的場景使用以下模塊實現不同的功能:
ngx_http_proxy_module: 將客戶端的請求以http協議轉發至指定服務器進行處理。
ngx_stream_proxy_module:將客戶端的請求以tcp協議轉發至指定服務器處理。
ngx_http_fastcgi_module:將客戶端對php的請求以fastcgi協議轉發至指定服務器助理。
ngx_http_uwsgi_module:將客戶端對Python的請求以uwsgi協議轉發至指定服務器處理。
  • 生產環境部署結構:

在這裏插入圖片描述

1.實現http反向代理

172.20.26.14 #Nginx 代理服務器
172.20.26.24 #後端web A,Apache部署
172.20.26.34 #後端web B,Apache部署
  • 訪問邏輯圖

在這裏插入圖片描述

1.1 部署後端Apache服務器

//172.20.26.24
apt install apache2 -y
echo "web1 172.20.26.24" > /var/www/html/index.html
systemctl start httpd && systemctl enable httpd

//172.20.26.34
apt install apache2 -y
echo "web2 172.20.26.34" >> /var/www/html/index.html
systemctl start httpd && systemctl enable httpd

//訪問測試
curl http://172.20.26.24
web1 192.168.7.103
curl http://172.20.26.34
web2 192.168.7.104

1.2 Nginx http 反向代理入門

1.2.1 反向代理配置參數

proxy_pass;
#用來設置將客戶端請求轉發給的後端服務器的主機,可以是主機名、IP地址:端口的方式,也可以代理到預先設置的
主機羣組,需要模塊gx_http_upstream_module支持。
location /web {
index index.html;
proxy_pass http://172.20.26.24:80;
#不帶斜線將訪問的/web,等於訪問後端服務器 http://172.20.26.24:80/web/index.html,即後端服務
器配置的站點根目錄要有web目錄纔可以被訪問,這是一個追加/web到後端服務器
http://servername:port/WEB/INDEX.HTML的操作
proxy_pass http://172.20.26.24:80/;
#帶斜線,等於訪問後端服務器的http://172.20.26.24:80/index.html 內容返回給客戶端
}
#重啓Nginx測試訪問效果:
# curl -L http://www.bokebi.net/web/index.html
proxy_hide_header field;
#用於nginx作爲反向代理的時候,在返回給客戶端http響應的時候,隱藏後端服務版本相應頭部的信息,可以設置在
http/server或location塊,
location /web {
index index.html;
proxy_pass http://172.20.26.24:80/;
proxy_hide_header ETag;
}
proxy_pass_header field;
#默認nginx在響應報文中不傳遞後端服務器的首部字段Date, Server, X-Pad, X-Accel等參數,如果要傳遞的
話則要使用 proxy_pass_header field聲明將後端服務器返回的值傳遞給客戶端。
proxy_pass_request_body on | off;
#是否向後端服務器發送HTTP包體部分,可以設置在http/server或location塊,默認即爲開啓
proxy_pass_request_headers on | off;
#是否將客戶端的請求頭部轉發給後端服務器,可以設置在http/server或location塊,默認即爲開啓

proxy_set_header;
#可以更改或添加客戶端的請求頭部信息內容並轉發至後端服務器,比如在後端服務器想要獲取客戶端的真實IP的時
候,就要更改每一個報文的頭部,如下:
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $remote_addr;
#添加HOST到報文頭部,如果客戶端爲NAT上網那麼其值爲客戶端的共用的公網IP地址,常用於在日之中記錄客戶端的
真實IP地址。
proxy_connect_timeout time;
#配置nginx服務器與後端服務器嘗試建立連接的超時時間,默認爲60秒,用法如下:
proxy_connect_timeout 60s;
#60s爲自定義nginx與後端服務器建立連接的超時時間
proxy_read_time time;
#配置nginx服務器向後端服務器或服務器組發起read請求後,等待的超時時間,默認60s
proxy_send_time time;
#配置nginx項後端服務器或服務器組發起write請求後,等待的超時時間,默認60s
proxy_http_version 1.0;
#用於設置nginx提供代理服務的HTTP協議的版本,默認http 1.0
proxy_ignore_client_abort off;
#當客戶端網絡中斷請求時,nginx服務器中斷其對後端服務器的請求。即如果此項設置爲on開啓,則服務器會忽略客
戶端中斷並一直等着代理服務執行返回,如果設置爲off,則客戶端中斷後Nginx也會中斷客戶端請求並立即記錄499日
志,默認爲off。
proxy_headers_hash_bucket_size 128;
#當配置了 proxy_hide_header和proxy_set_header的時候,用於設置nginx保存HTTP報文頭的hash表的上
限。
proxy_headers_hash_max_size 512;
#設置proxy_headers_hash_bucket_size的最大可用空間
server_namse_hash_bucket_size 512;
#server_name hash表申請空間大小
server_names_hash_max_szie 512;
#設置服務器名稱hash表的上限大小

1.2.2 反向代理示例–單臺web服務器

server {
listen 80;
server_name www.bokebi.net;
location / {
proxy_pass http://172.20.26.24:80/;
}
}
#重啓Nginx 並訪問測試

1.2.3 反向代理示例–指定location

server {
listen 80;
server_name www.bokebi.net;
location / {
index index.html index.php;
root /data/nginx/html/pc;
}
location /web {
#proxy_pass http://172.20.26.24:80/; #注意有後面的/,
proxy_pass http://172.20.26.34:80/;
}
}

#後端web服務器必須要有相對於的訪問URL
//172.20.26.24
mkdir /var/www/html/web
echo "web1 page for apache" > /var/www/html/web/index.html

//172.20.26.34
mkdir /var/www/html/web
echo "web2 page for apache" > /var/www/html/web/index.html
  • 重啓Nginx並訪問測試

在這裏插入圖片描述

//查看172.20.26.14apache的訪問日誌:
tail -f /var/log/httpd/access_log
172.20.26.14 - - [09/Jan/2020:20:24:36 +0800] "GET / HTTP/1.0" 304 143 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
172.20.26.14 - - [09/Jan/2020:20:24:37 +0800] "GET / HTTP/1.0" 304 143 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
172.20.26.14 - - [09/Jan/2020:20:24:38 +0800] "GET / HTTP/1.0" 304 143 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章