nginx 初探 之反向代理
首先要解释的是什么叫做反向代理?
平时我们浏览网页可以输入网址直接访问, 但如果访问国外的网站, 可能就没那么简单('中国特色'), 这时候我们需要配置一个代理服务器,
然后通过此服务器中转来访问需要的网址. 这个过程就是(正向)代理. 客户端是知道自己使用了代理的.
反向代理是相对于(正向)代理说的. 倘若我们要访问的网站是集群部署的, 服务器不止一台,那么该由哪台服务器来响应请求呢?
这时候网站需要一个代理服务器,对外暴露服务(网址), 浏览器(客户端)只访问代理服务器, 由代理服务器根据一定的策略决定哪台服务器响应.
这个过程就是反向代理. 客户端不知道自己的请求被代理服务器转发了..
祭出一张图:
nginx就是一款优秀的http服务器和反向代理服务器,我们把它安装并启动后,在浏览器中输入localhost,就可以看到nginx默认页.
nginx配置文是nginx.conf ,打开来找到下面的部分:
server {
listen 80; #nginx监听在80端口
server_name localhost; #nginx要监听的地址
#charset koi8-r;
#access_log logs/host.access.log main;
location / { # / 表示 兜底的匹配方式,匹配所有未找到合适匹配的请求
root html; #这里是nginx默认根目录
indexl index.html index.htm;#默认的首页
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html { #"=/50x.html" 表示精确匹配 localhost/50x.html 的请求
root html;
}
从注释可以看出来, 当访问地址localhost的时候,发现是 端口是 80 ,且server_name是localhost , 能够匹配 的 location为 / .所以被解析为nginx_server_path/html/index.html .
如果我们要自定义转发的地址怎么办呢,添加两个配置即可 upstream ,proxy_pass.
upstream anyname{#要转发到的服务器列表
server 192.168.0.103:8080 weight=1;#服务器地址1,权重1.
server 192.168.0.103:8081 weight=1;#服务器地址2,权重1
#server 192.168.0.103:8082 backup; #热备
#ip_hash;#固定转发
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://anyname; #代理转发
root html;
index login.html index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
这样就可以随意转发请求到自定义的服务器了.
nginx作为 反向代理服务器,也有软负载均衡的能力,主要有这么几种类型
1、热备:如果你有n+1台服务器,当n台服务器都发生事故时,才启用热备服务器给提供服务。服务器处理请求的顺序:ABCABCABC突然ABC都挂啦,BBBBBBBBBBBBBB.....
upstream mysvr {
server 192.168.0.103:8080;
server 192.168.10.103:8082 backup; #热备
}
2、轮询:nginx默认就是轮询,其权重都默认为1,服务器处理请求的顺序:ABABABABAB....
upstream mysvr {
server 192.168.0.103:8080;
server 192.168.10.103:8081;
}
3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....
upstream mysvr {
server 192.168.0.103:8080 weight=1;
server 192.168.10.103:8081 weight=2;
}
4、ip_hash:nginx会让相同的客户端ip请求相同的服务器,可以避免分布式session的问题,但也容易负载失衡。
upstream mysvr {
server 192.168.0.103:8080;
server 192.168.10.103:8081;
ip_hash;
}
关于nginx负载均衡配置的几个状态参数讲解。
-
down,表示当前的server暂时不参与负载均衡。
-
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
-
max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
-
fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
upstream mysvr {
server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;
}
上面就是nginx反向代理和负载均衡的简单配置.如果要深入学习请google之.我也是在学习中,如有错误,敬请斧正,不胜感激.