1. 架构说明: nginx + 4个tomcat
nginx作为前端代理,并且肩负负载均衡的作用,多个tomcat可以解决单台服务器高并发的性能问题,至于后端放几个tomcat要看你的服务器有多大内存,我的服务器是4核的CPU,8G内存。
2. nginx安装简单说明:
编译参数:
--prefix=/opt/mysql/ --enable-assembler --with-extra-charsets=complex \
--enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server \
--enable-local-infile --with-plugins=innobase
可以根据自己的环境修改配置
nginx.conf配置:
user www;
worker_processes 8;
error_log /opt/logs/nginx/default/error/log;
pid logs/nginx.pid;
worker_rlimit_nofile 51200;
events {
use epoll;
worker_connections 1024; #有的设置到65535
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 128k;
large_client_header_buffers 8 128k;
client_max_body_size 200m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
log_format main '$remote_addr $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log /opt/logs/nginx/default/access/log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 8;
gzip_http_version 1.1;
gzip_types text/plain application/xml;
gzip_vary on;
proxy_temp_path /opt/nginx_cache/proxy_temp_path;
proxy_cache_path /opt/nginx_cache/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
upstream testservers {
server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8082 weight=1 max_fails=2 fail_timeout=30s;
server 127.0.0.1:8083 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name test.com;
index index.html index.htm index.php index.jsp;
charset utf-8;
location ~ .*\.(js|jpg|JPG|jpeg|JPEG|bmp|gif|GIF)$ {
proxy_cache cache_one;
proxy_cache_valid 200 304 1h;
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args;
proxy_pass http://testervers;
proxy_redirect default;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Range $http_range;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}
location / {
proxy_pass http://testservers;
proxy_redirect default;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Range $http_range;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}
# 对管理后台进行访问限制
location ^~/manager/ {
allow 你的IP;
deny all;
proxy_pass http://testservers;
proxy_redirect default;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Range $http_range;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}
}
}
}
从上面配置可以看出,nginx会把http请求均匀分发给8080,8081,8082,8083几个端口的后端服务,实现负载均衡的效果。
3. Tomcat 配置
server.xml配置,由于一个<Service></Service>会启动一个实例,所以我们这里要启动4个tomcat实例就设置4个Service :
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina0">
<Connector port="8080" protocol="HTTP/1.1"
minSpareThreads="100"
acceptCount="1000"
connectionTimeout="50000"
maxThreads="3000"
disableUploadTimeout="true"
URIEncoding="UTF-8"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="/opt/www/webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
<Service name="Catalina1">
<Connector port="8081" protocol="HTTP/1.1"
minSpareThreads="100"
acceptCount="1000"
connectionTimeout="50000"
maxThreads="3000"
disableUploadTimeout="true"
URIEncoding="UTF-8"
redirectPort="8444" />
<Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="/opt/www/webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
<Service name="Catalina2">
<Connector port="8082" protocol="HTTP/1.1"
minSpareThreads="100"
acceptCount="1000"
connectionTimeout="50000"
maxThreads="3000"
disableUploadTimeout="true"
URIEncoding="UTF-8"
redirectPort="8445" />
<Connector port="8011" protocol="AJP/1.3" redirectPort="8445" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="/opt/www/webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
<Service name="Catalina3">
<Connector port="8083" protocol="HTTP/1.1"
minSpareThreads="100"
acceptCount="1000"
connectionTimeout="50000"
maxThreads="3000"
disableUploadTimeout="true"
URIEncoding="UTF-8"
redirectPort="8446" />
<Connector port="8011" protocol="AJP/1.3" redirectPort="8446" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="/opt/www/webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>
然后可以设置tomcat为Linux的服务,以便可以自动启动,创建权限为755的配置文件:/etc/init.d/tomcat,内容如下:
#!/bin/bash
#
# tomcatd This shell script takes care of starting and stopping
# standalone tomcat
#
# chkconfig: 345 91 10
# description: tomcat service
# processname: tomcat
# config file:
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
prog=tomcat
export JAVA_HOME=/opt/jdk
export CATALINA_HOME=/opt/tomcat
export CATALINA_OPTS='-Xms2048m -Xmx2048m' #初始化JVM内存可以自己根据情况设置
PATH=$PATH:$JAVA_HOME/bin
STARTUP=$CATALINA_HOME/bin/startup.sh
SHUTDOWN=$CATALINA_HOME/bin/shutdown.sh
if [ ! -f $CATALINA_HOME/bin/startup.sh ]
then
echo "CATALINA_HOME for tomcat not available"
exit
fi
start() {
# Start daemons.
echo -n $"Startting tomcat service: "
daemon $STARTUP
RETVAL=$?
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Stoping tomcat service: "
$SHUTDOWN
RETVAL=$?
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit $RETVAL
添加服务:chkconfig --add tomcat
设置自动启动:chkconfig tomcat on
另外,需要修改tomcat/bin/startup.sh,在#!/bin/sh下面添加:CATALINA_OPTS='-Xms2048m -Xmx2048m'
4. Tomcat全局filter解决乱码问题:
代码就不写了,说下过程,filter代码网上到处都是,我要说的在tomcat/conf/web.xml中增加filter配置,和在单独应用中增加一样,然后把filter的class打包jar文件放在tomcat/lib目录下即可。
分享到:
相关推荐
在Linux平台上搭建Java Web服务器是一项综合性的技术任务,涉及到操作系统配置、网络服务部署以及应用服务器的安装与调优。根据给定的文件信息,我们可以深入探讨以下关键知识点: ### 一、Linux环境下软件包管理 ...
总之,Tomcat作为一款强大的Java Web服务器,其简易的搭建过程和灵活的配置使得开发者能够快速地创建和运行Java Web应用。了解并熟练掌握Tomcat的安装、配置和管理,是每个Java Web开发者的必备技能。
在Linux下,Apache和Tomcat组合可以创建一个高效且可扩展的Java应用服务器集群。 1. **安装Apache和Tomcat** - 安装Apache HTTP服务器,通常使用`apt-get`或`yum`命令,具体取决于你的Linux发行版。 - 安装多个...
本文将详细讲解如何使用Linux操作系统,结合Nginx反向代理服务器和Tomcat应用服务器来搭建一个集群环境,实现负载均衡和服务高可用性。这个过程涉及到的知识点包括Linux系统管理、Nginx配置、Tomcat集群设置以及源码...
6. **启动与停止Tomcat**:在`$CATALINA_HOME/bin`目录下,使用`startup.sh`(Linux/macOS)或`startup.bat`(Windows)脚本启动Tomcat,使用`shutdown.sh`或`shutdown.bat`停止服务。 7. **部署Web应用**:将Web...
在Linux环境下搭建Apache Tomcat服务器是一项常见的任务,尤其对于那些从事Java Web开发或者需要运行Java应用程序的用户来说。Apache Tomcat是一款开源的Java Servlet容器,它实现了Java EE的Web部分,包括Servlet、...
本文将深入探讨如何使用Tomcat来搭建这样的环境,并涉及与之相关的技术,如Java JDK、多版本Tomcat管理和Web应用程序的部署。 首先,让我们关注Java Development Kit (JDK)。在本例中,我们有`jdk-8u151-linux-x64....
在Linux环境中,安装和配置Java及Tomcat是搭建服务器应用的基础步骤。以下是对这个过程的详细解释: 首先,我们需要安装Java。在这个例子中,我们使用的是Java Enterprise Edition (Java EE) SDK 5.04。这一步骤...
Xen具有高性能和高扩展性的特点,适用于构建云服务平台和服务器集群。 2. Linux操作系统:实验中使用的Linux操作系统为Ubuntu Server 14.04 64位版本。Ubuntu Server是一个流行的Linux发行版,具有稳定、安全、易于...
在高并发的Web应用环境中,单个服务器可能无法满足性能需求,这时就需要使用集群技术来提高服务的可用性和可扩展性。Tomcat作为一款广泛应用的Java Servlet容器,支持集群配置,可以实现负载均衡和故障转移。本文档...
在Linux环境下配置Java环境并安装JDK以及Tomcat服务器是一项重要的技能,对于开发基于Java的应用程序至关重要。本文将详细介绍在Linux系统(以CentOS为例)上安装Java Development Kit (JDK) 和Apache Tomcat的过程...
Tomcat 9是其最新的稳定版本,支持Java EE 8标准,提供了更高的性能和稳定性。Tomcat的安装可以通过下载压缩包形式,解压后配置环境变量即可,这种方式无需复杂的安装过程,适合开发和测试环境。 在Linux平台上安装...
在构建云端Linux环境时,"云服务器搭建linux环境三件套"通常指的是Java开发环境(JDK)、Web服务器(Nginx)以及应用服务器(Tomcat)。这些组件是许多基于Java的应用程序部署的基础,尤其在云计算场景下,它们能够...
2. **启动与停止**:在Tomcat的bin目录下,你可以通过执行`startup.sh`(Unix/Linux)或`startup.bat`(Windows)脚本来启动服务器,使用`shutdown.sh`或`shutdown.bat`来关闭服务器。 3. **部署应用**:将你的Web...
Nginx以其高性能、轻量级和反向代理能力而备受青睐,而Tomcat作为Java应用服务器,常用于运行Java Servlet和JavaServer Pages。Session管理在多服务器环境中是个关键问题,确保用户会话在集群中的连续性。 首先,让...
在这个特定的环境中,我们看到三台服务器分别用于运行Apache和两个Tomcat实例,这样的配置通常是为实现负载均衡或高可用性。以下是详细的知识点解析: 1. **Linux CentOS 5.1**: CentOS是一款基于Red Hat ...
这意味着开发者在Windows环境下也能方便地搭建和管理Java Web服务器,无需考虑额外的平台适配问题。这对于使用Windows系统的个人开发者和小型团队来说,提供了极大的便利。 【集成开发环境IDE】 Tomcat7能够无缝...