1. 程式人生 > 其它 >Nginx反向代理服務

Nginx反向代理服務

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;
	}
}