nginx的应用场景
简介
Nginx (“engine x”) 是一个高性能的 HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上 nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
作为 web 服务器的功能
Nginx可以作为静态页面的 web服务器,同时还支持 CGI协议的动态语言,比如 perl、php等。但是不支持 java。Java程序只能通过与 tomcat配合完成。Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高达 50,000个并发连接数。
代理
正向代理
客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
反向代理
由反向代理服务器去选择目标服务器获取数据后,在返
回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP地址。
负载均衡
我们单台机器无法支持运转的时候,可以横向扩充多台机器,将压力分散出去
动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速
度。降低原来单个服务器的压力。
案例
反向代理案例一(无条件代理)
实现效果:使用 nginx反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080
我们需要修改本地的host文件,将 www.123.com 映射到 127.0.0.1
我们便可以通过 www.123.com:8080 访问到第一步出现的 Tomcat初始界面。
之后去编写nginx的配置文件
如上配置,我们监听 80端口,访问域名为 www.123.com,不加端口号时默认为 80端口,故访问该域名时会跳转到 127.0.0.1:8080路径上。在浏览器端输入 www.123.com 结果如下:
反向代理案例二(有匹配规则的代理)
实现效果:使用 nginx反向代理,根据访问的路径跳转到不同端口的服务中
nginx监听端口为 9001,
访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082
我们需要有两个tomcat启动
一个启动80一个启动8081
之后配置nginx
location指令说明
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。
2、~:用于表示 uri 包含正则表达式,并且区分大小写。
3、~ **:用于表示 uri 包含正则表达式,并且不区分大小写。
4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location
块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
负载均衡
实现了访问一个路径,可以以轮询(一边一次的)方式去8080和8081两个端口访问
这里我们在两个tomcat里都准备好对应的文件
之后配置nginx
随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx就是其中的一个,在 linux下有 Nginx、LVS、Haproxy等等服务可以提供负载均衡服
务,而且 Nginx提供了几种分配方式(策略):
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 dow n 掉,能自动剔除。
2、weight
weight 代表权,重默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如:
upstream server_pool{
server 192.168.5.21 weight=10;
server 192.168.5.22 weight=10;
}
3、ip_hash
每个请求按访问ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:
upstream server_pool{
ip_hash;
server 192.168.5.21:80;
server 192.168.5.22:80;
}
4、fa ir(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{
server 192.168.5.21:80;
server 192.168.5.22:80;
fair;
}
动静分离
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和
静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx
处理静态页面,Tomcat处理动态页面。
我们现在我们的服务器上设置一个存放静态资源的文件
之后去写nginx的配置文件
重点是添加 location,最后检查 Nginx 配置是否正确即可,然后测试动静分离是否成功,之需要删除后端 tomcat服务器上的某个静态文件,查看是否能访问,如果可以访问说明静态资源 nginx 直接返回了,不走后端 tomcat 服务器
效果图