常用的服务器上Tomcat配置

1. JVM

1.1. 使用 Server JRE 替代JDK。

服务器上不要安装JDK,请使用 Server JRE. 服务器上根本不需要编译器,代码应该在Release服务器上完成编译打包工作。

理由:一旦服务器被控制,可以防止在其服务器上编译其他恶意代码并植入到你的程序中。

1.2. JAVA_OPTS

export JAVA_OPTS="-server -Xms512m -Xmx4096m  -XX:PermSize=64M -XX:MaxPermSize=512m"

-Xms 指定初始化时化的栈内存

-Xmx 指定最大栈内存

2. Tomcat 优化

2.1. maxThreads 连接数限制

maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果你的网站访问量非常大可能使用运行多个Tomcat实例的方法。

即,在一个服务器上启动多个tomcat然后做负载均衡处理。

<Connector port="8080" address="localhost"
	maxThreads="2048" maxHttpHeaderSize="8192"
	emptySessionPath="true" protocol="HTTP/1.1"
	enableLookups="false" redirectPort="8181" acceptCount="100"
	connectionTimeout="20000" disableUploadTimeout="true" />

提示

很多做过php运维的朋友在这里会犯一个大错误,php优化服务器通常怎做法是安装cpu以及内存的情况配置连接数,连接数过万都很正常,但java不同jvm配置要非常小心,稍有差错就会崩溃。

maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。

2.2. 虚拟主机

不要使用Tomcat的虚拟主机,每个站点一个实例。即,启动多个tomcat.

这也是PHP运维在这里常犯的错误,PHP的做法是一个Web下面放置多个虚拟主机,而不是每个主机启动一个web服务器。Tomcat 是多线程,共享内存,任何一个虚拟主机中的应用出现崩溃,会影响到所有应用程序。采用多个实例方式虽然开销比较大,但保证了应用程序隔离与安全。

2.3. 压错传输

通常所说的gzip压缩,Tomcat通过在server.xml配置设置压缩的选项。

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               compression="on"
               compressionMinSize1="2048"
               noCompressionUserAgents="gozilla, traviata"
               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,,application/octet-stream"/>

提示

压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。

3. Tomcat 安全配置

3.1. 安装后初始化配置

当Tomcat完成安装后你首先要做的事情如下:

首次安装完成后立即删除webapps下面的所有代码

rm -rf /srv/apache-tomcat/webapps/*

注释或删除 tomcat-users.xml 所有用户权限,看上去如下:

# cat conf/tomcat-users.xml
<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<tomcat-users>
</tomcat-users>

隐藏Tomcat版本信息

vim $CATALINA_HOME/conf/server.xml

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
				maxThreads="8192"
				minSpareThreads="64"
				maxSpareThreads="128"
				acceptCount="128"
				enableLookups="false"
                server="Neo App Srv 1.0"/>

# curl -I http://localhost:8080/
HTTP/1.1 400 Bad Request
Transfer-Encoding: chunked
Date: Thu, 20 Oct 2011 09:51:55 GMT
Connection: close
Server: Neo App Srv 1.0

服务器信息已经被改为 Server: Neo App Srv 1.0

3.2. 启动用户与端口

不要使用root用户启动tomcat,Java程序与C程序不同。nginx,httpd 使用root用户启动守护80端口,子进程/线程会通过setuid(),setgid()两个函数切换到普通用户。即父进程所有者是root用户,子进程与多线程所有者是一个非root用户,这个用户没有shell,无法通过ssh与控制台登陆系统,Java 的JVM 是与系统无关的,是建立在OS之上的,你使用什么用户启动Tomcat,那麽Tomcat 就会继承该所有者的权限。

这造成了一个问题,Linux系统小于1024的端口只有root可以使用,这也是为什么Tomcat默认端口是8080。如果你想使用80端口只能使用root启动Tomcat。这有带来了很多安全问题。

解决方案是创建一个不同用户,如:

groupadd -g 80 daemon
adduser -o --home /daemon --shell /sbin/nologin --uid 80 --gid 80 -c "Web Server" daemon

注意 /sbin/nologin , 意味着该用户不能登录,同时我也没有给它指定密码,这个用户只能用于启动tomcat

chown daemon:daemon -R /srv/*
su - daemon -c "/srv/apache-tomcat/bin/startup.sh"

接下来解决80端口问题, 思路就是80去调用8080,或者映射端口。

下面是影射方案,80 跳转 8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

取消跳转
iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

查看规则
iptables -t nat -L

另一个就是从80请求去调用8080的方案

这个方案可以在 Tomcat 前段增加反向代理,例如:Nginx,Apache,Squid,Varnish或者F5, Array这类设备等等

3.3. 应用程序安全

关闭war自动部署 unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序

应用程序部署与tomcat启动,不能使用同一个用户。

我的tomcat 安装在 /srv目录下,Tomcat启动用户为daemon; 应用程序放在/www目录下www所有者是www用户。这样的目的是一旦tomcat被植入web shell程序,它将不能创建或编辑/www目录下面的任何内容。

adduser --home /www -c "Web Application" www

3.4. JSESSIONID

修改 Cookie 变量 JSESSIONID, 这个cookie 是用于维持Session关系。建议你改为PHPSESSID。

时间: 2024-12-09 12:15:35

常用的服务器上Tomcat配置的相关文章

Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化

Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化  大 | 中 | 小  [ 2008-10-28 16:55 | by 张宴 ] [文章作者:张宴 本文版本:v1.0 最后修改:2008.10.28 转载请注明原文链接:http://blog.zyan.cc/post/375/] VPS(全称Virtual Private Server)是利用最新虚拟化技术在一台物理服务器上创建多个相互隔离的虚拟私有主机.它们以最

解决 :Linux服务器上tomcat为java分配的内存不足:PermGen space

在linux 下启动tomcat 的时候 由于项目多,出现 内存不足:PermGen space 而启动不了: 解决方案: 修改TOMCAT_HOME/bin/catalina.sh 在"echo "Using CATALINA_BASE: $CATALINA_BASE""上面加入以下行: JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m" 解决

Flask+Nginx+uWSGI在Ubuntu服务器上的配置

Flask+Nginx+uWSGI在Ubuntu服务器上的配置 Step1 安装系统环境 Ubuntu服务器选择是阿里云的ECS服务,ECS提供单独的内存\CPU\带宽\存储规格可以选择,并且提供合适的镜像可以安装.安装镜像后通过ssh进行远程管理,配置.配置的自由程度非常高,也适合进行远程的编程和调试,作为编程调试的服务器和测试服务器非常棒. 服务器的环境: * 确认系统版本 cat /proc/version Linux version 3.13.0-95-generic ([email p

IBM X3650 M3服务器上RAID配置实战

背景知识:RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现的.RAID可以充分发挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能确保数据安全性,在任何一块硬盘出现问题的情况下都可以继续工作,不会受到损坏硬盘的影响.RAID可以分为软raid和硬raid,一般中高档的服务器多使用硬件raid控制器,硬件Raid基于Raid卡,软件Raid基于操作系统. 单位新到一台IBM X3650 M3服务器准备做测试用,有一段时间没有亲自做RAID了,所以

解决IE apk变成zip:Android 手机应用程序文件下载服务器Nginx+Tomcat配置解决方法

APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码.由于APK文件本身就是压缩包,如果用户的电脑上装了WinRAR(85%的装机量),用IE下载APK文件,扩展名就会被自动改为“.zip”. 如果你的下载服务器为Nginx服务器,那么,在Nginx安装目录下的conf/mime.types文件的对应位置,加上以下一

关于云服务器中tomcat配置出现的部分问题以及处理方法

问题描述:(一)针对tomcat的8080端口修改为80端口之后不能使用域名直接访问:(二)添加的项目不能通过域名直接访问(服务器端还待解决) 配置基本流程: 1.需要先购买合适的服务器,进行域名备案,正确的域名解析: 域名解析是否成功可以通过本地电脑的dos命令验证:Windows + R 运行 cmd 命令,在出现的dos命令行输入“ping www.xxx.com”,即 ping + 域名,通过核对返回数据的ip地址来判断域名是否解析成功(刚解析的域名可能需要过一段时间才能生效) 2.下载

在服务器上,配置redis可以外网访问

首先linux开放默认端口6379打开redis配置文件redis-conf注释掉 bind 127.0.0.1(默认只有本地主要才能访问)这个注释掉现在处于受保护的状态,外网连不上,因为没有密码 在服务器上,这里以linux服务器为例,为redis配置密码. 1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redis,如果没有开启redis则需要先开启:[[email protected] bin]# redis-

当AD域与DNS不再一台服务器上时配置

当DNS服务器与AD域在一起时很容易设置但当DNS与AD域不在一起时就不太容易做,具体应该这样做:准备两台全新的Windows server2008服务器.一. 1.安装DNS服务器:??2.安装DNS后点击 开始>管理工具>DNS:3.右击 正向查找区域 然后新建区域为主要区域:4.区域名称与域名一样取名17w1.com,安装成功后右击点击17w1.com,?![](https://s1.51cto.com/images/blog/201906/10/0b8cfc26fd5ea133d498

浪潮服务器上RAID配置实战及RAID相关知识

 RAID基本概念,专用术语介绍 我们提供的RAID卡支持各种常用RAID级别,如 0,1,5,10,50等,您可以根据数据的重要性来选择,在开始使用RAID卡之前,我们希望您能够对下面的概念有较深的理解,从而更好的配置和使用您的服务器. RAID 0 是无数据冗余的存储空间条带化,具有低成本.极高读写性能.高存储空间利用率的RAID级别,适用于Video / Audio存储.临时文件的转储等对速度要求极其严格的特殊应用.但由于没有数据冗余,其安全性大大降低.构成阵列的任何一块硬盘损坏都将带来数