生产环境下的Tomcat配置

2.2 Tomcat配置

Tomcat要根据实际的生产环境进行优化,主要有以下几个需要修改的地方

2.2.1内存

修改tomcat安装目录bin/catalina.sh,添加export JAVA_OPTS='-Xms1024m-Xmx1024m',前面是初始化内存大小,后面是可以使用最大内存

2.2.2线程及连接

编辑安装目录下conf/server.xml

<Connector  port="8080"

  maxThreads="500"

 minSpareThreads="25"

maxSpareThreads="75"

acceptCount="100"

/>

配置开启最大线程为500,25个空线程等待,75个最大空线程等待及连接数大于maxThreads时最多允许100个连接等待。以上根据实际项目配置,也可以配置线程池。

连接参数的配置也是修改connector参数,主要有:

connectionTimeout 网络连接超时,单位毫秒,设置为0表示永不超时

keepAliveTimeout 长连接最大保持时间,单位毫秒

MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数,1表示禁用,-1表示不限制个数,默认100个,一般设置在100~200之间

2.2.3多虚拟主机及多实例

多虚拟主机是在一个实例中的server.xml中配置多个虚拟目录以指向相同或不同项目,多实例是安装多个Tomcat实例,修改为不同端口,启动不同进程实现不同项目或者同项目的访问,与虚拟主机不同的是多实例可以实现简单的单台主机上的负载均衡。具体配置这里不介绍了。

2.2.4集群

Tomcat集群是在多台主机上实现负载均衡的技术,由于APP目前只有一台主机,集群到了第二阶段才能考虑。

2.3 Mysql

Mysql的表结构是开发人员根据程序需要来设计,这个要根据项目区分。

3、部署及问题

最后将项目的静态文件及动态文件分别部署到Nginx和Tomcat上,做到动静分离。Tomcat上没有必要放置多余的静态文件,但要配置好和后台数据库连接的jdbc,如:

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://192.168.1.1:3306/kingdom?characterEncoding=utf-8

jdbc.username=root

jdbc.password=root

别忘了还有个连接DB的驱动jar包。这样一个Nginx+Tomcat+Mysql架构的项目就部署完毕。接下来说说遇到的问题。

问题1:连接不到后台数据库,但数据库本身没有问题,服务开启并且也可以登录。在排除了防火墙之类的配置后,用其他主机远程登录提示Accessdenied for user 'root'@'ip' (using password:YES),mysql默认禁止远程连接,解决办法:

mysql -uroot -p

mysql>GRANT all privileges ON *.* toroot@'%' IDENTIFIED BY "root" with grant option;

格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by"用户密码";

权限分为select,update,insert,delete或者直接all

数据库名.表名可以*.*表示所有

登录主机'%'表示所有

用户密码不是本机真实密码,为本机给远程登陆用户设的密码

之后FLUSH PRIVILEGES;即可

问题2:访问Nginx上的应用连接不到数据库,但直接访问Tomcat正常。将Nginx指向其他APP访问正常,说明Nginx配置没有问题,连接不到数据库是因为Nginx连接不到Tomcat,而Tomcat连接着数据库,Nginx只能访问自己本地的项目。从以上判断应该是Tomcat上项目的权限问题。找到故障点后着手解决,发现Tomcat上项目主目录下没有crossdomain.xml文件,这是Tomcat的跨域策略文件,配置后问题解决。

问题3:一切就绪后使用Loadrunner进行压力测试,Nginx日志报错accept() failed (24: Toomany open files),这是由于服务器开的文件描述符太小造成。ulimit–n只能改变当前shell的设定,要永久改变有以下三步:

(1.) /etc/pam.d/login添加

session???required????/lib/security/pam_limits.so

(2.)?/etc/security/limits.conf添加

www???????????-??????nofile?????????1006154

www 是一个用户,如果是想所有用户生效的话换成 * ,设置的数值与硬件配置有关,别设置太大

(3.) ?修改/etc/rc.local添加

echo 8061540 >/proc/sys/fs/file-max

第一阶段的生产环境搭建完毕,还有很多需要测试和优化的地方,这期间Google也帮了大忙,第二阶段的扩展也会在这个基础上展开,记录与总结也会继续

 

 

--

    Tomcat 5 在生产环境中为了避免被攻击,需要注意删除以下目录的文件或者是要修改某些文件的配置。

         一、  找到%Tomcat_Home%\conf目录下的web.xml文件,修改如下所示的参数设置,默认是true,修改为false值,表示是客户端浏览的时候不做目录文件的列表,例如:访问如下地址http://127.0.0.1/test/  如果这个参数设置为true的话,就会把test目录下的所有jsp文件都列出来,这样给攻击者一个清楚的文件列表,造成极大的危害。

     <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>

二、在%Tomcat_Home%\conf\Catalina\localhost目录下,是当前tomcat服务器配置的在运行的站点配置文件,其中balancer.xml文件是配置tomcat均衡的一个站点,这个不需要删除;但是admin.xml与mannager.xml文件是默认的管理站点,可以删除,以免攻击者从中得到有用的信息;ROOT.xml文件是tomcat默认站点的配置文件。另外要注意的一点是如果要删除一个虚拟站点的话,我们就需要把对应的配置文件从这个目录中删除,例如:要删除虚拟站点test,那么就要把这个目录下的test.xml文件删除,否则,就算是在%Tomcat_Home%\conf\目录下的server.xml配置文件中删除了这个虚拟站点,也会在tomcat 启动的时候加载这个虚拟站点的程序。造成你以为没有删除这个虚拟站点。

猜你喜欢

转载自javaeye-mao.iteye.com/blog/1545526
今日推荐