• 【推荐】CentOS安装Tomcat7.0.57+启动配置+安全配置+性能配置


    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成。

    #准备工作#

    在安装Tomcat之前,请确保已经安装了JDK-1.7环境,具体见《CentOS安装JDK-1.7》

    #Tomcat7的安装#

     开始下载Tomcat7并安装:

    # cd /usr/local/src
    # wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.57/bin/apache-tomcat-7.0.57.zip
    # cp apache-tomcat-7.0.57.zip /usr/local/
    # cd /usr/local
    # unzip apache-tomcat-7.0.57.zip
    # rm -f apache-tomcat-7.0.57.zip
    # mv apache-tomcat-7.0.57/ tomcat-7.0.57
    # ln -s /usr/local/tomcat-7.0.57/ /usr/local/tomcat

    给系统设置Tomcat的路径:

    # vim /etc/profile
    
    export CATALINA_HOME=/usr/local/tomcat
    
    # source /etc/profile

    可以先尝试启动Tomcat看能否正常访问:

    # sh /usr/local/tomcat/bin/startup.sh
    Cannot find /usr/local/tomcat/bin/catalina.sh
    The file is absent or does not have execute permission
    This file is needed to run this program
    
    # chmod +x /usr/local/tomcat/bin/*.sh
    # sh /usr/local/tomcat/bin/startup.sh
    Using CATALINA_BASE:   /usr/local/tomcat
    Using CATALINA_HOME:   /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME:        /usr/java/jdk1.7.0_72
    Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Tomcat started.

    注:如果提示没有执行权限则可以先chmod一下sh文件。

    这个时候显示服务器已经启动Tomcat成功了,打开浏览器访问地址http://youripaddress:8080/应该可以看到:

    关闭Tomcat则是:

    # sh /usr/local/tomcat/bin/shutdown.sh

     #Tomcat7的启动配置#

    上面的步骤虽然已经可以正常启动Tomcat服务器,但是是以系统root账户来启动的,这是一种很不安全的行为。使用ps命令查看即可得知:

    # ps aux | grep tomcat
    root     14829 56.4 12.9 958580 64872 pts/0    Sl   10:22   0:05 /usr/java/jdk1.7.0_72/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

    这里介绍一种方案(也是官方推荐的),使用root权限执行Tomcat自带的脚本daemon.sh,该脚本使用jsvc以普通用户权限去启动Tomcat,原理是root用户fork非root用户,同时可以监听80端口。

    1)新建一个tomcat用户和用户组: 

    # id tomcat
    id: tomcat:无此用户
    # groupadd tomcat
    # useradd -g tomcat -s /sbin/nologin tomcat
    # id tomcat
    uid=503(tomcat) gid=503(tomcat) 组=503(tomcat)

    2)修改Tomcat目录的权限:

    # chown -R tomcat:tomcat /usr/local/tomcat-7.0.57
    # chown -R tomcat:tomcat /usr/local/tomcat
    # chmod -R 770 /usr/local/tomcat

    3)生成jsvc:

    # cd /usr/local/tomcat/bin
    # tar zxf commons-daemon-native.tar.gz
    # ls
    commons-daemon-1.0.15-native-src
    # cd commons-daemon-1.0.15-native-src/unix
    # ./configure --with-java=/usr/java/jdk1.7.0_72/
    ...
    *** All done ***
    Now you can issue "make"
    # make
    # cp jsvc /usr/local/tomcat/bin

    注:上面configure时请指定当前系统的JDK路径。 

    4)最后可以使用daemon.sh来启动Tomcat了: 

    # cd /usr/local/tomcat/bin
    # ./daemon.sh
    Unknown command: `'
    Usage: daemon.sh ( commands ... )
    commands:
      run               Start Tomcat without detaching from console
      start             Start Tomcat
      stop              Stop Tomcat
      version           What version of commons daemon and Tomcat
                        are you running?
    # ./daemon.sh start

    这时可以查看下当前Tomcat进程的用户:

    # ps aux | grep tomcat
    root     16770  0.0  0.0  10432   408 ?        Ss   11:09   0:00 jsvc.exec -java-home /usr/java/jdk1.7.0_72 -user tomcat -pidfile /usr/local/tomcat/logs/catalina-daemon.pid -wait 10 -outfile /usr/local/tomcat/logs/catalina-daemon.out -errfile &1 -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/commons-daemon.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs= -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap
    tomcat   16771  2.2 14.2 959544 71428 ?        Sl   11:09   0:05 jsvc.exec -java-home /usr/java/jdk1.7.0_72 -user tomcat -pidfile /usr/local/tomcat/logs/catalina-daemon.pid -wait 10 -outfile /usr/local/tomcat/logs/catalina-daemon.out -errfile &1 -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/commons-daemon.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs= -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap

    注:正常情况下就是有两个进程,参数都是一样,但属主不一样,一个是root,一个是tomcat。

    可以看到现在Tomcat使用的是tomcat用户权限在运行了。

    如果要关闭Tomcat,则可以使用命令:

    # cd /usr/local/tomcat/bin
    # ./daemon.sh stop

    另外,使用Daemon后台启动有个要注意的地方就是必须保证权限,必须保证以下几个命令:

    # chown -R tomcat:tomcat /usr/local/tomcat-7.0.57
    # chown -R tomcat:tomcat /usr/local/tomcat
    # chmod -R 777 /usr/local/tomcat-7.0.57/conf/Catalina
    # chmod -R 777 /usr/local/tomcat-7.0.57/conf/Catalina/localhost

    当然,我们还有一种方案是直接以普通用户tomcat去执行startup.sh来启动Tomcat,但是这个弊端是非root用户只能监听大于1024的端口,这种情况就无法使得Tomcat去监听80/443端口,并不是一种比较完美的方案。

    还有,当使用daemon.sh来启动Tomcat的时候,其日志会默认写入到CATALINA_HOME/logs/catalina-dameon.out这个文件里,这个文件日后会变得很大,需要清理。另外如果要查看启动时的日志,可以使用tail -f来跟踪。

     #Tomcat7的安全配置#

    1、删除/usr/local/tomcat/webapps下的所有目录。

    2、禁止Tomcat服务器进行目录遍历,以防止泄漏系统信息及服务器信息:

    # vim /usr/local/tomcat/conf/web.xml
    
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
            <init-param>
                <param-name>listings</param-name>
                <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    3、开启Tomcat的日志记录功能:

    # vim /usr/local/tomcat/conf/server.xml
    
    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>

    4、禁止显示错误信息:

    # vim /usr/local/tomcat/conf/web.xml
    
    <error-page>
        <error-code>404</error-code>
        <location>/404.jsp</location>
    </error-page>

    5、最好删除jspx文件的解析,默认的Tomcat是可以解析jspx文件的,这个可能会带来安全风险,如果项目中不需要支持jspx文件,可以删除对jspx文件的解析功能,比如:

    # vim /usr/local/tomcat/conf/web.xml
    
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <!--<url-pattern>*.jspx</url-pattern>-->
    </servlet-mapping>

    6、分配好文件目录权限,Web目录和文件属主不能与Tomcat启动用户属主相同,比如Tomcat如果是以tomcat用户权限启动的,则Web文件和目录的属主必须是非tomcat账户(比如可以是root账户)。另外,Web目录权限统一设置为755,web文件权限统一设置为644,只有上传目录这类可读写目录的权限才设置为777。

     #Tomcat7的性能配置#

    为了提高系统的可用性,根据业务需求,还可以对Tomcat进行一些配置,比如修改webapps目录到/data/www、修改线程数、配置合适的启动内存、设置UTF8编码等。

    1、修改webapp默认目录:

    # vim /usr/local/tomcat/conf/server.xml
    
    <Host name="localhost"  appBase="/data/vsftpd/www" unpackWARs="true" autoDeploy="true">

    2、 在处理GET请求时,Tomcat默认使用ISO-8859-1编码作为默认编码,这里一般根据业务需求最好设置为UTF-8编码:

    # vim /usr/local/tomcat/conf/server.xml
    
    <Connector port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

    3、 有时会提示内存泄漏(尤其是MySQL的驱动模块),这是因为在高版本的Tomcat中增加了检测内存泄漏的模块,其实一般可以将其禁止:

    # vim /usr/local/tomcat/conf/server.xml
    
    <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

    4、还可以根据系统配置和项目需求设置分配更多的内存给Tomcat:

    # vim /usr/local/tomcat/bin/catalina.sh
    
    JAVA_OPTS="$JAVA_OPTS -Xms128m -Xmx256m -XX:PermSize=128m -XX:MaxNewSize=256m -XX:MaxPermSize=256m -Djava.awt.headless=true"

    注:分配多少内存根据当前服务器情况而定,上面将java.awt.headless允许是因为某些验证码组件需要开启该功能。

    5、配置maxThreads(最大线程数)、acceptCount(当线程数处理达到最大时接受排队的请求个数)、connectionTimeout(连接超时时间)等。

    <Connection maxThreads="5000" minSpareThreads="20" acceptCount="1000" connectionTimeout="20000" disableUploadTimeout="true" enableLookups="false" />
  • 相关阅读:
    JVM(二)JVM内存布局
    JVM(一) OpenJDK1.8源码在Ubuntu16.04下的编译
    阿里面试
    npm run dev/npm run start报错
    vue 项目报错 You may use special comments to disable some warnings.
    ES6模块化
    jQuery中的动画
    jsonp的封装
    ajax中get,post,以及二合一的封装
    小案例之刮奖
  • 原文地址:https://www.cnblogs.com/brishenzhou/p/6141357.html
Copyright © 2020-2023  润新知