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 启动的时候加载这个虚拟站点的程序。造成你以为没有删除这个虚拟站点。