创建虚拟主机
在nginx.conf配置文件中,一个server就是一个虚拟主机,虚拟主机的访问可以通过端口和域名两种方式。
相同端口不同域名.png
不同端口的访问很简单,只要在输入浏览器地址后加上端口号即可。下面模拟不同域名的访问。如上图。
首先在本机hosts文件中配置好IP地址对应的域名(一个域名只能对应一个IP地址,但是一个IP地址可以对应多个域名),然后在浏览器中直接输入域名进行访问。
hosts配置.png
nginx反向代理
客户机发送请求,nginx接收请求然后分发给tomcat,tomcat响应并返回数据,nginx接收数据并返回给客户机。在客户机看来只是一个服务器。这种服务器端的代理称为反向代理。
注意:location匹配是一种正则表达式的模糊匹配。如下例:
location /user/home {
proxy_pass http://example.com;
# proxy_pass定义的末尾没有指定URI,意味着客户端发送的URI请求会被原样发送给上游(就是upstream中的定义)。
# 比如,如果客户端发来的请求是/user/home/please,则发送给example.com服务器的请求会是
# http://example.com/user/home/please。
}
location /user/home {
proxy_pass http://example.com/new/prefix;
#proxy_pass末尾定义了URI的部分(/new/prefix),意味着匹配该location定义的请求将在转发时被替换为此处定义的URI。
#比如,当一个/user/home/please请求到来时,Nginx转发给上游的请求则是http://example.com/new/prefix/please
#/user/home被替换成了/new/prefix,这点需要注意。
#有时候,此类替换无法完成,则proxy_pass处定义的URI会被忽略,Nginx会把原始请求的URI或其他地方定义的URI发送给上游。
#比如,对于一个使用正则表达式定义的location,Nginx无法决定哪部分URI匹配该表达式,所以会把原始请求的URI发送给上游。
#而如果在同一location下还定义了一个rewrite条目改写了该请求的URI,则改写的URI会被发送给上游。
}
URL结尾处是否有/的区别:
以http://192.168.157.4/proxy/test.html
第一种:
location /proxy/ {
proxy_pass http://192.168.157.4:80/;
}
结果:会被代理到http://192.168.157.4:80/test.html 这个url
第二种(相对于第一种,最后少一个 /)
location /proxy/ {
proxy_pass http://192.168.157.4:80;
}
结果:会被代理到http://192.168.157.4:80/proxy/test.html 这个url
第三种:
location /proxy/ {
proxy_pass http://192.168.157.4:80/abcd/;
}
结果:会被代理到http://192.168.157.4:80/abcd/test.html 这个url。
第四种(相对于第三种,最后少一个 / ):
location /proxy/ {
proxy_pass http://192.168.157.4:80/abcd;
}
结果:会被代理到http://192.168.157.4:80/abcdtest.html 这个url
nginx负载均衡
负载均衡就是多个服务器同时跑一样的程序,当客户机发送请求时,nginx轮询服务器,看哪台比较闲然后将请求发给哪台。来测试一把,启动两个tomcat(当然实际上大公司肯定有很多台服务器,但原理是一样的)跑相同的程序(注意修改tomcat的端口,也将index.html的内容修改一下好看效果),然后修改nginx.conf。
nginx刷新:nginx -s reload 。然后在浏览器中输入www.gorodn.com回车,然后不断按F5刷新页面,看看是不是出现你自己修改index.html的内容。显示结果应该第一次到8080这台服务器,第二次到8081这台服务器,如此循环。当有更多台服务器时也是这样轮询。但是可以控制某台服务器接收频率(比如某台服务器性能比其他的都好,那这台应该处理更多的请求),通过调整weight的值(不写,默认都是1),数值越大接收频率越高。来试试,将8081的weight调整为2 。然后访问,在F5刷新,注意这次一定快速按F5才有可能到8080这台服务器,因为大部分到8081这台了。这就是负载均衡。
负载均衡2.png
负载均衡还是另外两种高效的方式:
- lvs+nginx,lvs是四层负载均衡(就是网络传输的第四层),而nginx是7层负载均衡,客户机请求先到lvs,lvs代理发给nginx,nginx代理发给tomcat(当然这里也可以不nginx,直接有lvs发给tomcat),lvs能达到F5的60%性能,可以说已经是相当牛逼了。
- F5 它是最牛逼的负载均衡,是硬件层面,需要几十万来购买
nginx高可用
因为入口只有一个,那就是nginx,如果nginx挂了那就无法访问了,为了让nginx不宕机(或当高并发时不那么容易宕机)有三种方式:
- 可以使用一台备用的nginx服务器实现,就是当主nginx服务器宕机时备用nginx服务器起来替代主nginx服务器。可以使用keepalived+nginx实现主备,两台机器上都安装nginx和keepalived,备用服务器中keepalived会一直给主服务器发送心跳包看主服务器挂了没好自己上(主服务器没挂它就没表现的机会)。
- lvs+nginx+keepalived,lvs是四层负载均衡(就是网络传输的第四层),而nginx是7层负载均衡,lvs能达到F5的60%性能,可以说已经是相当牛逼了。
- F5 它是最牛逼的负载均衡,是硬件层面,需要几十万来购买
网友评论