分享

Nginx的正向代理和反向代理以及负载均衡和动静分离

 看见就非常 2020-05-08

Nginx的正向代理和反向代理

Nginx服务的一个重要功能——代理服务。在这里我们还得搞懂代理服务中正向代理和反向代理的区别,以及怎么使用他们,下面会进行讲解。

正向代理简介

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

反向代理简介

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

正向代理的使用
指令作用
resolveraddress [valid=time]用于指定DNS服务器的IP地址。address=DNS服务器的IP地址(支持IPv6地址),time=设置数据包在网络中的有效时间,如:resolver 8.8.8.8 114.114.114.114 valid=30s;
resolver_timeouttime用于设置DNS服务器域名解析超时时间,time=超时时间
proxy_passURL用于设置代理服务器的协议和地址,URL=代理服务器的协议和地址,如:proxy_pass http://$http_host$request_uri; 其中$http_host和$request_uri为Nginx内置变量

实例

vim /usr/local/nginx/conf/nginx.conf
添加:
server
{
	resolver 8.8.8.8;
	listen 81;
	location /
	{
		proxy_pass http://$http_host$request_uri;
	}
}
解释:
#设置DNS服务器地址为8.8.8.8,使用默认的53端口作为DNS服务器的端口,代理服务的监听端口为81,Nginx接收到的所有请求都由location模块处理

注意:Nginx正向代理不支持代理HTTPS协议的站点,不要在正向代理的server块中出现server_name指令。

反向代理的使用
指令作用
proxy_passURL设置被代理服务器的地址,可以是主机名称、IP地址加端口号和UNIX-domain套接字形式。如:proxy_pass http://www.baidu.com/abc/、proxy_pass http://192.168.1.108:8080/abc/、proxy_pass http://unix:/tmp/abc.socket:/abc/。proxy_pass和upstream搭配使用时,看upstream中的server有没有带协议地址,没有就在proxy_pass中带,如:proxy_pass http://upstream_abc;
proxy_hide_headerfield设置Nginx服务器在发送HTTP响应时,隐藏一些头部信息。field=需要隐藏的头部信息。
proxy_pass_headerfield默认情况下Nginx在发送响应报文时,报文头中不包含“Date”、“Server”、“X-Accel”等来自代理服务器的头部信息。该指令可以设置这些头部信息已被发送。field=需要发送的头部。
proxy_pass_request_bodyon | off是否将客户端请求的请求体发送给代理服务器。默认值为on(开启)。
proxy_pass_request_headerson | off是否将客户端请求的请求头发送给代理服务器。默认值为on(开启)。
proxy_set_headerfield value可以更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给被代理服务器。field=要更改的信息所在的头域。value=更改的值,支持使用文本、变量或者变量的组合。
proxy_set_bodyvalue可以更改Nginx服务器接收到的客户端请求的请求体信息,然后将新的请求体发送给被代理服务器。value=为更改的信息,支持使用文本、变量或者变量的组合。
proxy_bindaddress强制将与代理主机的连接绑定到指定的IP地址。address=指定主机的IP地址。
proxy_connect_timeouttime设置Nginx服务器与后端被代理服务器尝试建立连接的超时时间。time=超时时间,默认为60s。
proxy_read_timeouttime配置Nginx服务器向后端被代理服务器发出read请求后,等待响应的超时时间。time=超时时间,默认为60s。
proxy_send_timeouttime配置Nginx服务器向后端被代理服务器发出write请求后,等待响应的超时时间。time=超时时间,默认为60s。
proxy_http_version1.0 | 1.1设置Nginx服务器提供代理服务的HTTP协议版本。默认设置为1.0版本。1.1版本支持upstream服务器组设置中的keepalive指令。
proxy_methodmethod设置Nginx服务器请求被代理服务器时使用的请求方法。method=可以设置为POST或者GET。
proxy_ignore_client_aborton | off设置在客户端中断网络请求时,Nginx服务器是否中断对被代理服务器的请求。默认值为off,当客户端中断网络请求时,Nginx服务器中断对被代理服务器的请求。
proxy_ignore_headersfield设置一些HTTP响应头中的头域,Nginx服务器接收到被代理服务器的响应数据后,不会处理被设置的头域。field=要设置的HTTP响应头的头域。
proxy_redirectredirect replacement | default | off用于修改被代理服务器返回的响应头中的Location头域和Refresh头域。redirect=匹配Location头域值的字符串,支持变量和正则表达式,replacement=用于替换redirect变量内容的字符串,支持变量的使用,default=代表使用location块的uri变量作为replacement,并使用proxy_pass变量做为redirect,off=将当前域下所有的proxy_redirect指令配置全部设置无效。
proxy_intercept_errorson | off配置一个状态是开启还是关闭。开启状态时,如果被代理的服务器返回的HTTP状态代码为400或者大于400,则Nginx服务器使用自定义的错误页(使用error_page指令)。如果是关闭状态,Nginx服务器直接将被代理服务器返回的HTTP状态返回给客户端。
proxy_headers_hash_max_sizesize存放HTTP报文头的hash表的容量。size=HTTP报文头hash表的容量上限,默认为512字符。proxy_headers_hash_max_size 512;
proxy_headers_hash_bucket_sizesize申请存放HTTP报文头部的hash表容量的单位大小。size=设置的容量,默认为64字符。
proxy_next_upstreamstatus在配置Nginx反向代理功能时,如果使用upstream指令配置了一组服务器作为被代理服务器,服务器组中各服务器的访问规则遵循upstream指令配置的轮询规则,同时可以使用该指令配置在发生异常情况时,将请求顺次交由下一个组内服务器处理。status=为设置的服务器返回状态,可以是一个或者多个,这些状态有error(在建立连接、向被代理的服务器发送请求或者读取响应头时服务器发生连接错误)、timeout(在建立连接、向被代理的服务器发送请求或者读取响应头时服务器发生连接超时)、invalid_header(被代理服务器返回的响应头为空或者无效)、http_500|http_502|http_503|http_504|http_404(被代理服务器返回500、502、503、504、404状态代码)、off(无法将请求发送给被代理服务器)
proxy_ssl_session_reuseon | off是否使用基于SSL安全协议的会话连接(“https://”)被代理的服务器

注意:反向代理一般都是跟负载均衡一起使用。

实例

vim /usr/local/nginx/conf/nginx.conf
添加:
...	#其他配置
upstream backend{
	server 192.168.1.108;
	server 192.168.1.109;
}
server
{
	... #其他配置
	location / {
		proxy_pass http://backend;
		proxy_set_header Host $host;
		proxy_set X-Real-IP $remote_addr;
		proxy_set X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}
负载均衡使用

文章最下面介绍了upstream的server指令。
Nginx常见负载均衡算法和第三方负载均衡算法

动静分离

动静分离其实很简单,就是静态文件交给Nginx(这里担任了单独处理静态文件的WEB服务器)处理,动态的资源就交给后端的服务器,比如(Tomcat、Nginx、Apache)。

vim /usr/local/nginx/conf/nginx.conf
添加:
...	#其他配置
server
{
	...	#其他配置
	#动态资源交给后端处理
	location ~.*\.(jsp|php)$ {	#文件格式可以自己添加
    	proxy_pass http://192.168.1.109;
	}
	#静态资源本台Nginx进行处理
	location ~.*\.(html|js|css|gif|jpg|jpeg|png)$ {	#文件格式可以自己添加
    	root html;
    	index index.html index.htm;
    	#expired 10d;	#如果想要静态文件缓存的话就用此命令,缓存时间为10天

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多