文章目标
本文主要介绍Nginx安装配置,代理服务器搭建等基础知识,然后通过代理方式,实现Java项目无缝升级,提高系统可用性。
Nginx安装配置
安装
我的环境是CentOS6,请读者根据自身环境选择相应的安装方式,以下内容参考自:http://nginx.org/en/docs
wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm yum install nginx nginx -v
线装的是最新稳定版,当前是1.8.0,安装完毕后,使用命令 nginx 就可以启动 nginx 服务了:
nginx ps -ef|grep nginx
简述
nginx 由一个主进程(master)和若干工作进程(worker)组成,master负责配置维护及请求调度,worker处理实际请求,worker的数量可在配置文件中定义或Nginx根据机器配置(CPU Cores)自调整。配置文件位置因安装方式与环境而有所不同,可通过 find / -name nginx.conf确定,我这里是在 /etc/nginx/nginx.conf, 日志文件在 /var/log/nginx目录。
启停命令
nginx // 启动 nginx -s stop // 快速关闭(暴力) nginx -s quit // 当worker处理完请求后再关闭 nginx -s reload // 重加载配置文件使修改生效。该操作首先会校验文件合法性,如果返回success,就启动一个新的worker进程接受新请求,等旧的worker进程处理完之前的请求后,再关闭它。
master进程id记录在 /var/run/nginx.pid 文件中,正常停止时会删除该文件,nginx不建议手动关闭(如kill),这可能会导致不可预知的问题。
搭建静态资源服务器
cd /etc/nginx cp nginx.conf nginx.conf.bak vi nginx.conf // 在相应位置加入以下配置信息 http { #include /etc/nginx/conf.d/*.conf; server { location / { root /data/www; } location /images/ { root /data/www; } } } nginx -s reload
访问http://localhost/images/default.jpg 将访问 /data/www/images/default.jpg
访问 http://localhost/html/index.html 将访问 /data/www/html/index.html
Note : 如果访问异常,可以看日志 /var/log/nginx
搭建代理服务器
Nginx最常用的功能就是充当代理服务器,即Nginx从客户端接收请求,然后转交给被代理机器处理,得到反馈后再发回给客户端。这个过程中,被代理的机器对外是透明的。
将所有请求转发到8080口的应用服务器上,下例用的是tomcat。
vi nginx.conf // 在相应位置加入以下配置信息 http { #include /etc/nginx/conf.d/*.conf; server { location / { proxy_pass http://localhost:8080/; } } } nginx -s reload
访问 http://localhost/blog/1将访问 http://localhost:8080/blog/1
Nginx + Tomcat 平滑升级
Java hotswap始终是一个难题,在做功能更新的时候将会产生一段不可用时间,通过Nginx平滑启动,可实现应用的无缝升级。具体流程如下:
1) 准备两台Tomcat, 分别以8080,9090口提供服务
2) 假设当前是Nginx + Tomcat:8080 在提供服务
3) 将功能的更新发到当前闲置的Tomcat:9090
4) 修改Nginx配置文件,将新请求从8080转到9090口
5) 执行nginx -s reload,新的请求将平缓过渡到9090,8080上的worker进程将在处理完剩余请求后才关闭
平滑切换测试
新建一个Servlet项目(demo)并发到8080,9090口的tomcat上,假设Servlet名字是DemoServlet,代码如下:
Thread.sleep(3000); response.setContentType("text/html"); Object arg = request.getParameter("arg"); PrintWriter w = response.getWriter(); w.print(arg); w.close();
首先确保以下两个链接访问是正常的:
http://localhost:8080/demo/DemoServlet?arg=abcd
http://localhost:9090/demo/DemoServlet?arg=abcd
Nginx配置使用8080口提供服务,9090暂时闲置:
server { location / { proxy_pass http://localhost:8080/; } }
确保可以通过Nginx访问Servlet: http://localhost/demo/DemoServlet?arg=abcd
通过编程或工具,不断地向Nginx发送请求。观察请求响应情况,结合Nginx日志判断在服务切换过程中(8080 -> 9090),是否有请求丢失的情况。下面使用Jmeter演示:
1) 开启50个线程不断地往Nginx的demo/DemoServlet 发请求,这时,实际的处理工作是Tomcat:8080在做的,从下图可以看到请求都被正常处理了。
2) 假设这时候应用要更新了,因为8080正在服务,所以应该将更新内容发到9090上,然后修改Nginx.conf将新请求发往9090,切换过程中继续观察请求处理结果。
server { location / { #proxy_pass http://localhost:8080/; proxy_pass http://localhost:9090/; } } nginx -s reload
可以看到新请求都被转发给9090口了,这时8080口在处理完剩余的请求后,worker进程将自动关闭。
Note: 如果项目涉及会话共享的问题,请另行参考其它文章。
More: 对于hotswap如果大家有更好的方法,请告之。
参考资料
官网资料:http://nginx.org/en/docs
热部署:http://www.ibm.com/developerworks/cn/java/j-lo-hotdeploy/
Apache+Tomcat无缝升级:http://www.ibm.com/developerworks/cn/opensource/os-lo-apache-tomcat/
相关推荐
基于 Nginx 的 Java Web 项目灰度发布框架
把java开发的war包后更新到linux服务器后,通过本资源的配置nginx+tomcat实现两台服务器负载均衡,并配置了https的访问方式,并同时支持ipv6网络的访问
使Nginx实现灰度发布 -weifengCorp - 博客园upstream hilinux_01 { server 192.168.1.100:8080 m
java分布式项目中,运用ftp客户端实现图片上传,nginx提供http服务实现图片回显
nginx-tomcat整合实现JAVA程序负载均衡
此手册主要用于记录个人进行nginx升级的步骤和心得,介绍了2种升级方式。 YUM upgrade升级:本方式适用于使用rpm安装nginx的方式,优点是升级操作简单便捷,缺点是无法升级到指定版本,默认升级至YUM安装支持的...
基于moduo实现的集群聊天服务器和客户端源码,使用mysql数据库存储相关数据。采用nginx实现负载均衡,结合redis发布-订阅模式来实现在不同服务器上客户端进行通信。 基于moduo实现的集群聊天服务器和客户端源码,...
基于muduo库实现的集群聊天服务器,通过mysql存储数据,通过nginx实现tcp负载均衡,通过redis实现集群内服务器间的消息订阅发布。 基于muduo库实现的集群聊天服务器,通过mysql存储数据,通过nginx实现tcp负载均衡,...
解析nginx配置文件,并将nginx配置文件格式化成对象,方便java程序管理nginx配置。解析配置文件并非使用正则匹配,而是使用语法分析树处理解决的。 标签:nginx
一、nginx介绍及功能讲解 二、nginx的安装 三、nginx配置相关指令 四、nginx的实例应用(项目部署)
大型电商项目实战1:Redis+Rest+Linux+Nginx+Spring+SpringMVC实现JAVA高并发秒杀系统,baidu链接,谢谢
使用nginx部署前端项目是一篇非常详细的教程,旨在帮助初学者使用Nginx来部署前端项目。本文首先介绍了Nginx的基本概念和作用,解释了为什么Nginx是一个强大的Web服务器和反向代理。然后,文章详细讲解了如何在Linux...
CentOS Nginx PHP JAVA多语言镜像使用手册
基于java搭建的流媒体服务器(nginx+ffmpeg)可运行在linux上,具体文章说明:https://blog.csdn.net/weixin_40263855/article/details/87917484
Java性能调优 6步实现项目性能全面升级+面试高频性能问题讲解视频教程分享,性能优化的N种企业级解决方案,囊括了【数据库优化】、【Tomcat优化】、【JVM优化】、【垃圾回收】、【Netty优化】、【Nginx优化】、...
java基于nginx的tomcat负载均衡和集群
Nginx实现MYSQL主备高可用双活Nginx实现MySQL主备高可用双活Nginx实现MYSQL主备高可用双活Nginx实现MYSQL主备高可用双活Nginx实现MYSQL主备高可用双活
windows基于nginx搭建rtmp流服务器,已配置好配口号1935。 在根目录下执行命令nginx.exe -c conf\nginx-win-rtmp.conf即可开启服务器
基于nginx负载均衡的集群聊天系统,其中技术点有网络方面、数据库方面、线程安全方面;功能点有添加好友、单人聊天、群组聊天等 基于nginx负载均衡的集群聊天系统,其中技术点有网络方面、数据库方面、线程安全方面...