Nginx正向代理和反向代理详解及其配置

代理,顾名思义就是通过中间代理服务器去完成客户端和服务器端的通信,因为某些资源无法直接通过客户端从服务器端请求得到,如国内访问谷歌资源,就需要用代理服务器,将国内ip转换为国外ip,然后去访问资源。

Nginx 作为代理服务可以实现很多的协议代理, 主要以 http 代理为主
在这里插入图片描述

正向代理

正向代理是相对于客户端而言,如客户端无法直接访问服务器的某个资源,而某个代理服务器可以访问该资源,则客户端可以通过该代理服务器去访问该资源。
举个例子:
A:客户端(租客) B:服务端(房主) C:代理(房屋出租中介)
A想租B的房子,但是B的房子只能通过中介C才能出租,这时候A联系C的活被B揽下来了,B去联系C租到了房子。这个过程中,A、B并没有联系,B只知道把房子交给了C,但是A知道房子是通过中介C从B哪里取到的。

在这里插入图片描述
上图显示,服务端的图片资源只能通过69网段请求得到,Nginx配置如下:

//nginx.conf

location	~	.*\.(jpg|gif|png)$	{
	allow	192.168.69.0/24;
	deny	all;
	root	/soft/code/images;
}

如果你的nginx.conf的http下用include包含了同目录下的所有conf文件,则可以单独写一个zx_proxy.conf,否则可以直接写在nginx.conf文件中,内容如下:
//nginx.conf或者zx_proxy.conf

server	{
	listen 80;
	resolver	233.5.5.5;
	location	/	{
		proxy_pass	http://$http_host$request_uri;
		proxy_set_header	Host 	$http_host;
		proxy_set_header	X-Real-IP	$remote_addr;
		proxy_set_header	X-Forwarded-For	$proxy_add_x_forwarded_for;
  }
}

客户端使⽤用SwitchySharp浏览器器插件配置正向代理理,IP在69网段中(192.168.69.0/24)。
此时就可以在客户端浏览器访问到192.168.69.113下的图片资源,打开192.168.69.113主机上Nginx的access.log日志文件,可以发现remote_addr的值为192.168.69.112,也就是代理服务器的IP,http_x_forwarded_for值为192.168.160.1。
也就是说客户端只管在浏览器上输入http://192.168.69.113/xx.jgp,浏览器自动会通过配置好的代理IP去访问目标浏览器上的资源。

反向代理

反向代理是相对服务端而言,对客户端时无感知的,无需再客户端做任何配置,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
举个例子:
A:客户端(租客) B:服务端(房主) C:代理(房屋出租中介)
A去找C租房子,C找到B拿到钥匙后给了A,就把房子租给了A。但是这个过程A并不知道B才是真正的房东,他可能认为房东就是C。
比如我访问csdn中的一篇博客https://blog.csdn.net/IT_10/article/details/89365436,现在我想通过我的192.168.69.113域名去访问这篇博客,即https://192.168.69.113/IT_10/article/details/89365436也能访问到这篇博客,Nginx中的具体配置如下:

location / {
    root   html;
    index  index.html index.htm;
    #只需要加下面这段代码即可
    proxy_pass http://blog.csdn.net;
}

Nginx反向代理常用配置

#...
http {
   log_format  main  '$remote_addr "$http_x_real_ip" - $remote_user [$time_local] "$request" "$http_host" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"';
	server{
	#...
	     location /reverseproxy/ {
	         proxy_pass https://127.0.0.1:8081;
	         include proxy_params;
	     }
	#...
	}
}
#...

//proxy_params
#$host对应log_format中的$http_host,代理服务器和web服务器该值都为客户端请求的ip
#proxy_set_header   Host    $host;
#对于代理服务器,$http_host的值就是客户端请求的ip,对于web服务器,该值为代理服务器ip
proxy_set_header    Host    $proxy_host;
#对于web服务器,通过$http_x_real_ip可以获取真实客户端ip
proxy_set_header    X-Real-IP   $remote_addr;
#也可以通过下面这种方式,在web服务器的log中通过$http_x_forwarded_for获取真实客户端ip
#proxy_set_header   X-Forwarded-For $remote_addr;
#当有多级代理的时候,显示:realclient-ip,proxy1ip,proxy2ip
proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;

#与后端服务器建立连接的超时时间
proxy_connect_timeout 30;
#向后端服务器发送请求的超时时间
proxy_send_timeout 60;
#从后端服务器读取响应的超时时间
proxy_read_timeout 60;

proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值