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) 编辑 收藏 举报