Nginx代理服务
一、正向代理与反向代理的概念
正向代理示意图.png正向代理:局域网内的机器借助代理服务访问局域网外的网站。代理的对象是客户端,目标是去访问外网的资源。(eg:通过代理翻墙去看看外面的世界)
反向代理示意图.png反向代理:局域网向Internet提供资源,让Internet上其他用户通过代理服务器访问局域网内的资源。代理的对象是服务端,目标是让其他客户端可以访问服务端的资源(eg:公司内的负载均衡、静态资源服务器)
总结:正向代理与反向代理涉及到的技术基本一致,主要是因为应用场景不同而进行区别。
二、正向代理配置的指令
1.resolver指令:用于指定DNS服务器IP地址
2.resolver_timeout指令:用于设置DNS域名解析超时时间
3.proxy_pass指令:用于设置代理服务器的协议和地址(反向代理也会用到,到时候详细介绍)
因为正向代理服务的场合不多,所以指令较少,功能也比较简单
(另外关于nginx正向代理是否支持HTTPS,暂时还没尝试,以后实践了在补充)
三、反向代理配置的指令
1.proxy_pass指令:用于设置被代理服务器的地址
语法结构:
proxy_pass URL;
URL包含传输协议、主机名称或者IP地址加端口号等要素。传输协议通常是"http"或者"https"
注意upstream和proxy_pass搭配使用的两种情况
(1)proxy_list中指明了传输协议
upstream proxy_list
{
server http://192.168.4.30/uri/;
server http://192.168.12.19/uri/;
}
server
{
location /
{
proxy_pass proxy_list;
}
}
(2)proxy_list中没传输协议
upstream proxy_list
{
server 192.168.4.30/uri/;
server 192.168.12.19/uri/;
}
server
{
location /
{
proxy_pass http://proxy_list;
}
}
还有需要注意URL中是否包含URI,以访问"http://www.test.com/test/index.html"为例
server{
server_name www.test.com;
location /test/
{
#proxy_pass http://192.168.12.19; --->转到"http://192.168.12.19/test/index.html"
#proxy_pass http://192.168.12.19/index/; --->转到"http://192.168.12.19/index/index.html"
#proxy_pass http://192.168.12.19/; --->转到"http://192.168.12.19/index.html"
}
}
2.proxy_hide_header指令:设置在发送HTTP响应时,隐藏一些头域信息
3.proxy_pass_header指令:设置一些头域信息以被发送
4.proxy_pass_request_body、proxy_pass_request_headers指令:是否将客户端的请求体、请求头发送给代理服务器
5.proxy_set_header、proxy_set_body指令:设置新的请求头、请求体发往代理服务器
还有14个指令,以后再慢慢补,先把自己常用的指令先整理出来。
四、nginx服务器负载均衡相关配置
nginx服务器是现在静态的给予优先级的加权轮询算法,主要使用配置proxy_pass和upstream指令,以下是实例
upstream backend
{
server 192.168.4.30 weight=5;
server 192.168.12.19 weight=3;
server 192.168.11.17 ; #默认weight=1
}
server
{
location /
{
proxy_pass http://backend;
proxy_set_header Host $host;
}
}
根据backend服务器组中的不同的优先级别,实现加权轮询。 192.168.4.30的级别最高,优先接收和处理请求,192.168.11.17的级别最低,最少处理请求,192.168.12.19处于中等优先级。
轮询负载均衡就是将所有服务器组的weight设置为一样的即可
五、总结
在工作中经常会涉及到nginx代理相关的内容,但是总是一知半解或者随用随百度......希望有跟我一样想法的小伙伴可以通过这篇文章可以对nginx代理有更明确地认识和应用能力。
另外学习时间仓促,欢迎批评指正!