有些客户应用华丹快速开发平台开发的业务系统,业务访问比较大,如企业erp,还有省级政府应用,如税务数据分析平台,药监业务系统,都是全省范围内使用,这些系统建议布署成nginx(或tengine)+Tomcat集群的方式,由nginx处理所有静态内容,将动态内容转发给多个Tomcat处理。即使是在同一台服务器上布署多个Tomcat实例组成集群,实践证明,也会大幅度提升运行效率。建议优先选择Linux服务器,但也有很多用户使用Windows服务器,本文就以Windows为例,简单介绍一下在Windows下布署nginx+Tomcat集群发布华丹在线开发平台WEB应用。
以下简单介绍安装配置过程:
Jdk安装配置从略,要求jdk1.8及以上,为了便于安装Tomcat9。
首先安装配置2个(或4个,实例个数需要考量实际需要及服务器资源情况)Tomcat实例,这里选择是在同一台服务器上安装多个实例,如果是可以在不同服务器上安装效果更好,步骤大同小异。简单步骤如下:
1、从https://tomcat.apache.org/下载apache-tomcat-9.0.41-windows-x64.zip,解压缩至D:\webserver\目录下,重命名为cluster_tomcat_1。
2、将webapps目录整个删除。主要为了安全考虑,不要留自带的manager应用。
3、在D:\webserver\目录下创建目录webapps\ROOT,并将华丹开发平台程序(war包的话需要解压)复制到该目录下,保证index.jsp在ROOT根目录下。
4、将所要用到的数据库jdbc驱动都复制到%tomcat%\lib目录下。
5、修改conf\Server.xml中Connector配置,注意端口号80留给nginx使用,并增加一些必要的参数项,如下:
<Connector port="8085" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
relaxedQueryChars="[]|{}^\`"<>"
URIEncoding="UTF-8" />
其中,URIEncoding="UTF-8"是设置get方式提交的编码。
relaxedQueryChars="[]|{}^\`"<>"是允许url中含有这些特殊符号。
然后将Host段内,appBase值由webapps修改为E:\webserver\webapps。
如里原来根路径不是/,注意修改平台中param.config中 的ContextRoot及Constants.js中ContextRoot值。
6、修改Tomcat中bin目录下的catalina.bat文件,在开始位置setlocal下面一行增加set JAVA_OPTS=-Xms1024m -Xmx1024m,设置Tomcat内存,生产环境最大内存最小内存一般设置同等大小。注意这里设置内存,只能通过startup.bat启动才生效,Tomcat注册成服务后以服务方式启动这个设置不生效,不过这里仍然设上。
7、修改tomcat中bin目录下的service.bat,找到
set DEFAULT_SERVICE_NAME=Tomcat9
set SERVICE_NAME=%DEFAULT_SERVICE_NAME%
将SERVICE_NAME修改成Cluster_Tomcat9_1,注意不要去修改DEFAULT_SERVICE_NAME,这里是为了在一台服务器上安装多个Tomcat实例,将每个Tomcat实例都注册成服务,因此要改服务名,如果是该服务器只布署一台Tomcat实例,无修修改。
搜索--DisplayName "Apache Tomcat 9.0 %SERVICE_NAME%" ^,改成--DisplayName "%SERVICE_NAME%" ^,这个主要是缩短服务显示名称,可以不改。
搜索
if "%JvmMs%" == "" set JvmMs=128
if "%JvmMx%" == "" set JvmMx=256
将最小内存最大内存均设置为1024,即1G,如下:
if "%JvmMs%" == "" set JvmMs=1024
if "%JvmMx%" == "" set JvmMx=1024
修改完后,保存退出,在命令行窗口中目录切换到%tomcat%\bin下,执行service install,会将Tomcat注册成名Cluster_Tomcat9_1的服务,将服务改成自启动,测试服务启动后Tomcat是否正确启动,通过浏览器访问http://127.0.0.1:8085能不能访问平台页面。
按如上方法安装第二个Tomcat实例,注意server.xml中的两个端口号不一样,一是<Server port="8005" shutdown="SHUTDOWN">这里改成8006,二是<Connector port="8085" protocol="HTTP/1.1",这里改成8086,然后service.bat中的SERVICE_NAME修改成Cluster_Tomcat9_2。
如上方法安装,所有Tomcat实例的应用目录均为D:\webserver\Root,方便以后布署维护。
接下来安装配置nginx,步骤如下:
1、参考Windows下安装nginx并将其注册成服务,将nginx安装在D:\webserver\nginx目录下,将注册成服务。
2、D:\webserver目录下,创建static目录,将webapps\Root目录下华丹开发平台WEB应用目录整个复制到该目录下,并删除web-inf整个目录,再删除除根目录下index.jsp目录外的所有的jsp文件,保留静态文件。再次强调,这一步很重要,必须删除,否则一些关键的核心代码就会被nginx直接爆露到网上,别人可以随意下载,造成代码泄露。注意,这里保留一下index.jsp文件是因为下面配置nginx时,将index.jsp设为默为页:
location = / {
#主页文件
index index.jsp;
}
如果没有这个文件,默认页设置失效。
8、配置nginx
修改D:\webserver\nginx\conf\nginx.conf文件,参考如下设置:
#user nobody;
worker_processes auto;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;#隐藏版本号
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access_$year$month$day.log main;
client_max_body_size 10m;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#Gzip Compression
gzip on;
gzip_buffers 16 8k;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_proxied any;
gzip_vary on;
gzip_types
text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml
text/javascript application/javascript application/x-javascript
text/x-json application/json application/x-web-app-manifest+json
text/css text/plain text/x-component
font/opentype application/x-font-ttf application/vnd.ms-fontobject
image/x-icon;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
upstream webserver {
server 127.0.0.1:8085;
server 127.0.0.1:8086;
ip_hash; #同一IP定向到后端同一台webserver,避免session共享的问题
}
server {
listen 80;
if ($time_iso8601 ~ "(\d{4})-(\d{2})-(\d{2})") {
set $time $1$2$3;
}
access_log logs/access_${time}.log main;
charset utf-8;
#文件夹
root E:\webserver\static;
location = / {
#主页文件
index index.jsp;
}
location ~* \.(jsp|do|action)$
{
# 真实的客户端IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
# 请求头中Host信息
proxy_set_header Host $http_host;#注意这里如果涉及到路由器端口映射就必须用$http_host,否则可以用$host
# 代理路由信息,此处取IP有安全隐患
#String ip=request.getHeader("X-Forwarded-For");java中取远程IP需要该项,否则返回nginx地址127.0.0.1
proxy_set_header X-Forwarded-For $remote_addr;#$proxy_add_x_forwarded_for;
# 真实的用户访问协议
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://webserver;
expires -1;
}
#静态文件交给nginx处理,有写~ .*\.(htm|html|xhtml|txt|xml)$,.*表示前面有0-n个字符,意义不大。
location ~* \.(htm|html|xhtml|txt|xml)$
{
#expires 1d;#不设置expires则响应304,默认缓存,设置后,没过期不会访问服务器,也没日志
}
#静态文件交给nginx处理
location ~* \.(js|css)$
{
#expires 1d;
access_log off;
}
#静态文件交给nginx处理
location ~* \.(gif|jpg|jpeg|png|bmp|swf|ico|flv|mid|mp3|wma)$
{
expires 1d;
access_log off;
}
#通常对应下载文件
location ~* \.(rar|zip|doc|ppt|pdf|xls)$
{
}
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root html;
#}
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location ~* /\.ht {
deny all;
}
}
}
配置好后,可在命令行窗口中执行nginx -t,检查配置是否正确。配置完成后,重启nginx服务。
通过上面的操作,我们完成了将华丹开发平台布署在nginx+tomcat集群上,可大幅度提升负载量,提升运行效率。