nginx 正向代理 反向代理

nginx 一般用于做虚拟主机,正向代理和反向代理。nginx 性能优越,对资源占用极少,效率特别高。

 

虚拟主机:用nginx 吧 我磁盘的某个文件夹映射 出去,别人就可以直接通过http 协议查看里面的html ,css,js,图片,音乐等静态文件了。

正向代理:公式处于安全考虑,不能让每台机子都上外网,但是有一台机子可以上外网,会过滤一些敏感数据,别的机子通过这个电脑上外网。(客户端代理)

反向代理:概念出现晚于客户端代理,   服务器垂直拓展成本太高,我们可以水平拓展,用多台高性价比主机代替,一台高性能主机。用一台反向代理服务器来均衡这些服务器集群的负债,对外只暴露这台反向代理主机。

 

正向代理和放线代理的区别,一个是客户端代理(强调客户知道服务器端但是不能直接访问,代理帮我访问,代理位于客户端),一个是服务器端代理(客服部知道真实的服务器是那个,只知道代理服务器,代理位于服务器端)。

 

正向代理类似美团跑腿,客户知道要买那家的吃的,但是处于一些原因(懒),不能自己去买,找美团跑腿做代理帮忙买,商家甚至不知道谁买了这个商品。如果外卖吃出毛病直接找商家。

反向代理类似于超市或者大商场。客户去买超市买东西,这东西可能是商家合作入驻的,客户不知道买的具体那个商家的东西,在这个超市买的东西钱直接给超市,然后超市和真实的商家怎么结算客户并不关系。出出毛病也是找超市。

 

 

window 版本的 nginx 启动 :  直接运行 nginx.exe 或者 在命令行运行 nginx.exe

 

重新期价在配置:  nginx.exe -s reload

强制关闭:nginx.exe -s stop

 正常退出:nginx.exe -s quit

查看版本: nginx.exe  -v

 

 备注:主要配置文件是 config/nginx.config

 

 

2 映射静态资源, 下面的 配置  监听 80 端口, /目录映射的目录地址 是当前相对目录的 html,首页 index.html 或者 index.htm

  

 

  备注:路径越短的 优先级月底 ,就是说 / 优先级最低。

 

 

3 配置静态资源, WebTest 开头的 ,都会代理到这个路径

  

 

 

 

4 配置多个 server ,这样 会监听2 个端口,不同端口处理不同的 资源

 

 

5 配置负载均衡 ,路径已 api 开头的会 负载均衡到 ip1的8080  和  ip2的8081 端口,只需要注意的 默认的权重是1 ,默认负载算法是 轮询

 

 

 

 

 

 

关于nginx的负载均衡算法

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstream backserver {
    server 192.168.0.14;
    server 192.168.0.15;
}

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的
情况。

upstream backserver {
    server 192.168.0.14 weight=3;
    server 192.168.0.15 weight=7;
}
备注:会自动剔除异常节点

权重越高,在被访问的概率越大,如上例,分别是30%,70%。

3、上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
}

备注:ip_hash 也能自动剔除异常节点,这算法在于解决 用户身份是通过 cookie 里面的 sessionId 来识别的 服务( cookie 负载均衡的时候 都会带过去服务器端,也都可以读到,但是 Session对象只有一个服务器有 ),现在的 通过 token ,然后把 用户状态信息放在公共地方的 程序 不受这种限制。

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver {
    server server1;
    server server2;
    fair;
}

5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
}

 

 

 

 

 

 

 负载负载均衡节点 异常的时候, nginx 是自动剔除  这些参数控制的

  upstream m_pool {
        server 127.0.0.1:12001 max_fails=5 fail_timeout=30s;
        server 127.0.0.1:12002 max_fails=5 fail_timeout=30s;
        server 127.0.0.1:12003 max_fails=5 fail_timeout=30s;
    }

 

 

max_fails:连续错误 5 次,nginx 会标记这个节点为 down

fail_timeout: 多少秒以后重连 down 的节点。

 

 

 

nginx 变量:

nginx 各参数翻译,作用

$arg_PARAMETER #这个变量包含GET请求中,如果有变量PARAMETER时的值。

$args #这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;

$binary_remote_addr #二进制的客户地址。

$body_bytes_sent #响应时送出的body字节数数量。即使连接中断,这个数据也是精确的。

$content_length #请求头中的Content-length字段。

$content_type #请求头中的Content-Type字段。

$cookie_COOKIE #cookie COOKIE变量的值

$document_root #当前请求在root指令中指定的值。

KaTeX parse error: Expected 'EOF', got '#' at position 14: document_uri #̲与uri相同。

$host #请求主机头字段,否则为服务器名称。

$hostname #Set to the machine’s hostname as returned by gethostname

$http_HEADER

KaTeX parse error: Expected 'EOF', got '#' at position 9: is_args #̲如果有args参数,这个变量等于”?”,否则等于”",空值。

$http_user_agent #客户端agent信息

$http_cookie #客户端cookie信息

$limit_rate #这个变量可以限制连接速率。

KaTeX parse error: Expected 'EOF', got '#' at position 14: query_string #̲与args相同。

$request_body_file #客户端请求主体信息的临时文件名。

$request_method #客户端请求的动作,通常为GET或POST。

$remote_addr #客户端的IP地址。

$remote_port #客户端的端口。

$remote_user #已经经过Auth Basic Module验证的用户名。

$request_completion #如果请求结束,设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时,为空(Empty)。

$request_method #GET或POST

$request_filename #当前请求的文件路径,由root或alias指令与URI请求生成。

$request_uri #包含请求参数的原始URI,不包含主机名,如:”/foo/bar.PHP?arg=baz”。不能修改。

$scheme #HTTP方法(如http,https)。

$server_protocol #请求使用的协议,通常是HTTP/1.0或HTTP/1.1。

$server_addr #服务器地址,在完成一次系统调用后可以确定这个值。

$server_name #服务器名称。

$server_port #请求到达服务器的端口号。

 

 

 location 规则:

 

 

 

Rewrite 规则:

格式

关键字 正则 替代内容 flag标记

 

 

flag标记说明:

last #本条规则匹配完成后,继续向下匹配新的location URI规则

break #本条规则匹配完成即终止,不再匹配后面的任何规则

redirect #返回302临时重定向,浏览器地址会显示跳转后的URL地址

permanent #返回301永久重定向,浏览器地址栏会显示跳转后的URL地址

rewrite参数的标签段位置:

server,location,if

 

 

名词解释

 

正向代理: 客户端请求 --> 代理服务器  --> 外网资源  (客户端没有外网权限)

反向代理:  客户端请求 --> 代理服务器   --> 代理服务器请求内网的 资源服务器 ( 内网服务器不想暴露自己)

 

posted on 2020-03-05 20:40  zhangyukun  阅读(324)  评论(0编辑  收藏  举报

导航