Nginx反向代理服務
阿新 • • 發佈:2021-08-07
Nginx反向代理服務
Nginx反向代理服務
Nginx代理服務基本概述
什麼是代理
代理一詞往往並不陌生, 該服務我們常常用到如(代理理財、代理租房、代理收貨等等),如下圖所示
沒有代理情況
在沒有代理模式的情況下,客戶端和Nginx
服務端,都是客戶端直接請求服務端,服務端直接響應客戶端
企業場景
那麼在網際網路請求裡面,客戶端往往無法直接向服務端發起請求,那麼就需要用到代理服務,來實現客戶端和服務通訊,如下圖所示
Nginx代理服務常見模式
Nginx作為代理服務,按照應用場景模式進行總結,代理分為正向代理、反向代理
正向代理
正向代理,(內部上網)客戶端<—>代理->服務端
反向代理
反向代理,用於公司叢集架構中,客戶端->代理<—>服務端
正向代理與反向代理的區別
1.區別在於形式上服務的”物件”不一樣
2.正向代理代理的物件是客戶端,為客戶端服務
3.反向代理代理的物件是服務端,為服務端服務
Nginx代理服務支援協議
Nginx作為代理服務,可支援的代理協議非常的多,具體如下圖
反向代理使用協議
如果將Nginx作為反向代理服務,常常會用到如下幾種代理協議,如下圖所示
反向代理模組
反向代理模式與Nginx代理模組總結如表格所示
反向代理模式 | Nginx****配置模組 |
---|---|
http、websocket、https | ngx_http_proxy_module |
fastcgi | ngx_http_fastcgi_module |
uwsgi | ngx_http_uwsgi_module |
grpc | ngx_http_v2_module |
環境準備
主機名 | 角色 | 外網IP | 內網IP |
---|---|---|---|
lb01 | 反向代理伺服器 | 10.0.0.5 | 172.16.1.5 |
web01 | 被代理的伺服器 | 10.0.0.7 | 172.16.1.7 |
部署代理伺服器
# 1.安裝nginx [root@lb01 ~]# yum install -y nginx # 2.修改nginx的配置檔案 [root@lb01 ~]# vim /etc/nginx/conf.d/proxy.conf server{ listen 80; server_name blog.drz.com; location / { proxy_pass http://172.16.1.7:80; } } # 3.本地域名解析C:\Windows\System32\drivers\etc\hosts 10.0.0.5 blog.drz.com ## 代理172.16.1.7的80埠 proxy_pass http://172.16.1.7:80; ## 存在問題,後端網站是通過IP訪問的,沒有通過域名 proxy_set_header Host $http_host; ## 將域名放入請求頭中,帶到後端 server{ listen 80; server_name zh.drz.com; location / { proxy_pass http://172.16.1.7:80; proxy_set_header Host $http_host; } } ## 存在問題,後端無法獲取真實使用者IP,只能獲取代理伺服器IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ## 透傳使用者的真實ip到web伺服器 server{ listen 80; server_name zh.drz.com; location / { proxy_pass http://172.16.1.7:80; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ## 減少代理的配置 [root@lb01 nginx]# vim /etc/nginx/proxy_params ## 將域名放入請求頭中,帶到後端 proxy_set_header Host $http_host; ## 透傳使用者的真實ip到web伺服器 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # http1.1版本 proxy_http_version 1.1; # 代理到web伺服器的連線超時時間 proxy_connect_timeout 60; # web伺服器回傳資料給代理伺服器的超時時間 proxy_send_timeout 60; # 代理伺服器等待web伺服器的響應時間 proxy_read_timeout 60; # 開啟緩衝區 proxy_buffering on; # 請求頭緩衝區的大小 proxy_buffer_size 32k; # 開啟4個緩衝區,每個緩衝區大小為128k proxy_buffers 4 128k; ## 代理配置檔案 [root@lb01 nginx]# vim /etc/nginx/conf.d/proxy.conf server{ listen 80; server_name zh.drz.com; location / { proxy_pass http://172.16.1.7:80; include /etc/nginx/proxy_params; } }