The server setting guide using Apache and Tomcat in CentOS7
Tags: Apache, Tomcat, Linux

서론

CentOS7 에서 Apache, Tomcat 을 사용하여 운영 서버 환경을 설정하는 방법에 대해서 배워 보겠습니다.

DB Install

운영 환경에 맞는 데이터베이스를 설치해야 합니다. 데이터베이스 설치에 관한 내용은 이 포스팅에서는 다루지 않겠습니다.

부팅 시 재시작 : systemctl enable mysqld

상태 확인: systemctl status mysqld

Apache Install

CentOS 에서 Apache 를 설치하는 방법은 크게 컴파일 설치 방식 과, yum 방식 이 존재합니다.

컴파일 설치 방식 : 소스파일을 다운로드하고 컴파일하여 설치하는 방식

yum 방식 : RPM 패키지 파일을 yum 방식으로 설치하는 방식

컴파일 설치 방식으로 진행할 경우 apache root directory 는 디폴트로 /usr/local/apache2 가 됩니다. yum 방식으로 진행하는 경우 apache root directory 는 /etc/httpd 가 됩니다.

yum 을 통해서 설치하는 방식이 손쉽고, 버그나 취약점 업데이트 또한 간단하게 대응할 수 있지만, 컴파일 설치가 설치 시에 디테일한 부분들을 설정/튜닝 할 수 있습니다. 설치를 원하는 버전이 RPM 파일로 없는 경우에도 컴파일 설치를 해야합니다.

80 포트를 사용하는 Apache 같은 경우에는 root 권한으로 설치 해야 합니다. 설치후 Apache 의 virtualhost 라던지 각종 설정 파일의 소유자는 root 입니다. 따라서, 주로 운영/개발에서 톰캣을 재시작할 때에는 사용자 권한으로 진행하며 아파치 재시작 시에는 root 권한으로 진행합니다.

이 포스팅에서는 자주 사용하는 yum 설치 방식에 대해서만 다루겠습니다.

YUM 방식

Yum은 패키지 저장소에서 패키지를 검색하고 다운로드 하여 설치까지 처리하면서 패키지들의 의존성을 고려하여 설치할때 패키지 의존성에 대한 error를 줄일 수 있습니다.

1. 필수 패키지 gcc 설치

yum -y install gcc make gcc-c++ pcre-devel

2. 패키지 설치

yum install -y httpd

3. 패키지 설치 확인

rpm -qa httpd

4. 서비스 생성 확인 및 기동

systemctl status httpd

systemctl status httpd 에 에러가 나와있는지 확인 후, 만약에 에러가 있다면 해결해야 합니다. (구선생님 이용.. God Google..)

5. 서비스 실행

systemctl start httpd

서비스가 기동되어 있지않으면 실행 시켜줘야 합니다.

6. 포트 리스닝 확인

netstat -tnlp

서비스를 구동하였으니 포트가 정상적으로 리스닝 상태인지 확인합니다.

7. 자동 재시작 설정 및 80 포트 방화벽 열기

주소창에 IP(or localhost) 입력 후 apache 화면이 나오는지 확인해야합니다. 나오는 경우 딱히 신경쓸게 없지만, 나오지 않는 경우에는 해당 포트 번호가 뚫려있는지 확인해야 하므로 telnet 을 이용해야 합니다.

# telnet 으로 포트가 열려있는지 확인

Window 제어판에서 telnet 설치 후 cmd 창을 열어서 telnet ip port 로 붙는지 확인.

로 붙는지 확인. telnet 192.xxx.x.x 80

# CentOS7 방화벽 열기

실행 중인 포트 방화벽 목록 보기 : firewall-cmd --list-all

포트 방화벽 열기 : firewall-cmd --permanent --zone=public --add-port=80/tcp

방화벽 설정 : firewall-cmd --permanent --add-service=http / firewall-cmd --permanent --add-service=https

방화벽 재시작 : firewall-cmd --reload

다시 해당 IP(or localhost)로 Apache 화면이 뜨는지 확인

Apache 화면까지 뜨셨으면 리눅스 재부팅 시 Apache 가 자동 재시작 되게끔 하는 설정을 추가해야 합니다.

reboot 명령어 입력 후 CentOS7 리부팅

아파치가 자동으로 실행 되는지 확인하고, 80 포트 방화벽도 잘 열려있는지 확인

아파치가 자동으로 실행이 안된다면 chkconfig httpd on 명령어 입력

명령어 입력 자동 재시작 명령어 : systemctl enable httpd

# Apache 정보 숨기기

Apache 정보가 노출되는 것도 취약점의 일부입니다.

vi httpd.conf

ServerTokens Prod

ServerSignature Off

JDK 설치

Open JDK 1.8 설치 방법에 대해서 추가적으로 다루겠습니다.

1. OPEN-JDK 1.8 설치

yum install java-1.8.0-openjdk

yum install java-1.8.0-openjdk-devel

java -version 과 javac -version 을 쳤을때 화면에 결과가 나와야 합니다.

2. 환경변수 등록

/usr/bin/java 경로에 심볼릭링크가 걸려있기 때문에 실제 경로를 찾아서 환경변수에 등록해주어야 합니다.

input : readlink -f /usr/bin/java

output : /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08–0.el7_7.x86_64/jre/bin/java

실제 경로를 찾았으면 /etc/profile 을 vi 로 열어줍니다. 그리고 JAVA_HOME, PATH, CLASSPATH 를 등록합니다.

vi /etc/profile

...

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64

PATH=$PATH:$JAVA_HOME/bin

CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar



export JAVA_HOME PATH CLASSPATH

환경 변수를 등록했다면 ssh 연결을 재시작하거나 source /etc/profile 명령어를 입력해줍니다. 그 후 등록한 환경 변수가 제대로 적용되었는지 테스트합니다.

# echo $JAVA_HOME

# echo $PATH

# echo $CLASSPATH

3. HelloWorld.java 컴파일 후 실행

vi HelloWorld.java

public class HelloWorld{

public static void main(String[] args){

System.out.println("Hello World!!");

}

} # javac HelloWorld.java

# java -cp . HelloWorld

Hello World!!

Tomcat Install

Tomcat 8 을 기준으로 설명하겠습니다. 톰캣을 컴파일 버전으로 설치할 때 항상 최신버전으로 합니다. 그리고 폴더명은 가급적 version 을 제거한 상태로 변경시킵니다. (나중에 최신버전으로 업데이트할 때마다 폴더명 변경하는 것은 너무 번거로움)

1. 의존성 설치

yum install -y wget

2. 톰캣 설치

컴파일 버전으로 설치합니다. 설치 위치는 각자 원하는 곳에 잡으면 되며, 저는 /usr/local/tomcat8 이렇게 잡고 설치하겠습니다.

톰캣 공식 사이트에서 원하는 버전의 version.tar.gz 파일의 주소를 복사합니다.

그리고 톰캣을 설치하고자하는 location 으로 가서 (Ex. /usr/local) tar.gz 파일을 받고 압축을 풉니다.

# wget http://apache.tt.co.kr/tomcat/tomcat-8/v8.0.52/bin/apache-tomcat-8.0.52.tar.gz

# tar xvfz apache-tomcat-8.0.52.tar.gz

압축 파일은 삭제합니다.

rm tomcat + Tab

3. 환경 변수 설정

JDK를 설치했을 때와 마찬가지로, 어느 디렉터리에서나 tomcat 을 실행 할 수 있도록 환경변수를 설정해야 합니다. Tomcat 은 자바 프로그램이므로 Java 가 설치되어 있어야 합니다.

vi /etc/profile

/etc/profile 을 열어 아래와 같이 편집한 다음 변경사항을 적용합니다.

#tomcat

export CATALINA_HOME=/usr/local/victolee/tomcat8.0.52

변경사항 적용 : source /etc/profile

4. 톰캣 환경 설정

톰캣의 server.xml 에서 톰캣의 port 를 변경해줘야 합니다. 일반적으로 8080 은 사용하지 않고 앞에 숫자 하나를 붙여서 사용하곤합니다. (Ex. 58080 이런식) 8080 과 같은 Registered port 는 Dynamic Port 로 바꿔서 사용하는 것이 좋습니다. 그리고 AJP 포트 건들면 안됩니다. 나중에 Apache 와 연동할 때 사용하기 때문입니다.

# 포트번호와 URIEncoding 설정

vi /usr/local/tomcat8/conf/server.xml

<Connector port="58080" protocol="HTTP/1.1"

URIEncoding="UTF-8"

connectionTimeout="20000"

redirectPort="8443" />

그리고 포트번호를 바꿨으니, 해당 포트의 방화벽도 열어야 합니다.

실행 중인 포트 방화벽 목록 보기 : firewall-cmd --list-all

포트 방화벽 열기 : firewall-cmd --permanent --zone=public --add-port=58080/tcp

방화벽 재시작 : firewall-cmd --reload

그리고 cmd 에서 telnet ip port 로 해당 포트에 접근이 되는지 확인 합니다.

# 톰캣 server.xml reloadable false 설정

class 디렉터리에 파일 반영 시 서버 자동 재시작을 막는 기능입니다.

<Context docBase="/data/project/site" path="/" reloadable="false" allowLinking="true" />

# 톰캣 SSL 설정

<Connector port="28443" protocol="org.apache.coyote.http11.Http11NioProtocol"

maxThreads="150" scheme="https" secure="true" SSLEnabled="true">

<SSLHostConfig>

<Certificate certificateKeyFile="/etc/pki/tls/private/gymzzak/_wildcard_gymzzak_or_kr_nopass.key" certificateFile="/etc/pki/tls/private/gymzzak/_wildcard_gymzzak_or_kr.crt" certificateChainFile="/etc/pki/tls/private/gymzzak/ChainCA/rsa-dv.chain-bundle.pem"

type="RSA" />

</SSLHostConfig>

</Connector>

# 톰캣 서버 정보 지우기

에러 페이지에 톰캣 버전 정보가 노출이 되면 취약점에 걸리기 때문에 버전 정보를 노출 되지 않게 지워야 합니다.

먼저 server.xml 을 편집기로 열어줍니다.

vi …/server.xml

server.xml 파일의 하단에 <Host> 태그가 있는데, 해당 태그 안에 <Valve> 라는 태그를 통해 Tomcat 에 들어오는 각 요청에 대한 전처리를 수행할 수 있습니다.

Error 페이지에 대한 전처리 설정을 위해 아래 Valve 를 </host> 태그 바로 위에 추가합니다.

<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false"/>

그 후 톰캣을 재시작 하면 됩니다.

재시작 위치는 톰캣이 설치된 bin directory 에서 shutdown.sh 와 startup.sh 명령어를 실행해주면 됩니다.

5. 톰캣 실행 및 테스트

/usr/local/tomcat8/bin/startup.sh

ps -ef | grep tomcat

주소창에 IP:port 입력 후 톰캣 화면이 나오는지 확인

6. Tomcat Manager 설정

Tomcat Manager 는 개발서버에서는 사용하도록 설정 해도 되지만, 운영 서버의 경우에는 사용하지 않습니다.

서버에 DB가 설치되어 있다면 웹 애플리케이션에서 DB의 연결을 서버 환경에 맞게 재설정을 해줘야 합니다.

tomcat-users.xml 파일을 수정해서 Tomcat Manager 등록

vi /usr/local/victolee/tomcat8.0.52/conf/tomcat-users.xml

가장 아래에 내용을 추가합니다.

<role rolename="manager"/>

<role rolename="manager-gui" />

<role rolename="manager-script" />

<role rolename="manager-jmx" />

<role rolename="manager-status" />

<role rolename="admin"/>

<user username="admin" password="manager" roles="admin,manager,manager-gui, manager-script, manager-jmx, manager-status"/>

다음은 manager.xml 파일을 생성하여, Context 를 등록합니다.

vi /usr/local/tomcat8/conf/Catalina/localhost/manager.xml

아래의 설정은 외부 서버에 대한 모든 접근을 허용하겠다는 의미입니다.

<Context privileged="true" antiResourceLocking="false" docBase="${catalina.home}/webapps/manager">

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />

</Context>

톰캣 재시작 : systemctl restart tomcat.service

Tomcat Manager 에 접속이 되는지 확인(IP/manager)

톰캣을 2개 띄우고 싶은 경우가 있을 수 있습니다. 예를 들어 관리자 CMS 의 경우에는 아파치와 연동을 안하고 톰캣으로만 띄우고 싶으면, 똑같이 톰캣을 하나 더 설치한 후에, 기존 톰캣 server.xml 에 있는 server, tomcat, ajp 포트와 다르게 설정한 후에 위와 동일하게 진행하면 됩니다.그리고 톰캣에서 SSL 설정을 하고, 80 to 443 설정을 해야 합니다.

Apache 와 Tomcat 연동

Apache 와 Tomcat 설치를 완료하였으면 서로 연동을 시켜줘야 합니다.

아파치와 톰캣을 연동하는 방법은 세 가지가 있습니다.

mod_jk

mod_proxy

mod_proxy_ajp

일반적으로 가장 많이 사용하는 방법은 mod_jk 입니다. mod_jk 는 Tomcat Connector 라고 불립니다.

mod_proxy 가 mod_jk 에 비해 설정이 간편하고 AJP 같은 특정 WAS 의존적인 프로토콜을 사용하지 않으므로 성능이 더 좋다 고 하지만 mod_jk 가 오랫동안 써왔고 친숙해서 mod_jk 를 많이 사용하는 편입니다. mod_jk 는 아파치 서버 뒤에 톰캣을 숨기고 URL 로 접근할 때 포트 번호를 제거하는데 유용합니다.

Apache 와 Tomcat 을 연동하기 위해서는 AJP Protocol 에 대해서 알아야 합니다. AJP(Apache JServ Protocol)은 Web Server 에서 받은 요청을 WAS 로 전달해주는 프로토콜입니다. 해당 프로토콜은 Apache HTTP Server, Apahce Tomcat, 웹스피어, 웹로직, JBOSS, JEUS, 등 다양한 WAS에서 지원하며 TCP 와 패킷 기반의 프로토콜로 웹 서버 성능이 증가된다.

이제 mod_jk 를 이용한 연동 방법에 대해서 배워보겠습니다.

mod_jk 를 설치 하려면 gcc, gcc-c++, httpd-devel 세가지 패키지가 설치되어 있어야 합니다.

yum -y install gcc gcc-c++ httpd-devel

1. mod_jk 설치

Tomcat Connector 를 다운로드 받고 설치합니다.

wget -c http://mirror.navercorp.com/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.46-src.tar.gz

커넥터를 설치하고 압축을 풀겠습니다.

tar -zxvf tomcat-connectors-version-src.tar.gz

그 다음 native 디렉터리에 진입하여 아래의 명령어를 실행합니다.

cd native

./buildconf.sh

./configure --with-apxs=/usr/bin/apx : Makefile(컴파일 옵션이 설정되는 화일)이 만들어집니다. 소스를 컴파일하는 컴퓨터의 사양에 맞는 환경에 알맞는 Makefile 이 생성됩니다.

: Makefile(컴파일 옵션이 설정되는 화일)이 만들어집니다. 소스를 컴파일하는 컴퓨터의 사양에 맞는 환경에 알맞는 Makefile 이 생성됩니다. make : 소스코드를 실제로 컴파일해서 binary 파일을 생성한다.

: 소스코드를 실제로 컴파일해서 binary 파일을 생성한다. make install

컴파일된 프로그램, 환경파일, 데이터파일을 지정된 위치에 복사한다.

ls /etc/httpd/modules/ | grep mod_jk 또는 find / -name mod_jk.so

또는 mod_jk 파일 확인 -> mod_jk.so 가 나와야 한다.

2. mod_jk 설정파일 수정

/etc/httpd/conf.modules.d 로 들어가면 mod_jk.conf 파일이 있습니다.

파일을 열어 다음과 같이 수정합니다.

<IfModule mod_jk.c>

JkWorkersFile conf/workers.properties

JkShmFile run/mod_jk.shm

JkLogFile logs/mod_jk.log

JkLogLevel info

JkLogStampFormat "[%y %m %d %H:%M:%S] "

</IfModule>

3. workers.properties 만들기

/etc/httpd/conf 에서 vi workers.properties 를 입력해 workers.properties 를 만들어 줍니다.

worker.list=tomcat

worker.tomcat.port=톰캣의 AJP 포트 적기

worker.tomcat.host=192.xxx.x.x

worker.tomcat.type=ajp13

worker.tomcat.lbfactor=1

4. httpd.conf 수정

Document Root 를 수정합니다.

DocumentRoot "/usr/local/tomcat8/webapps/ROOT"

<Directory "/usr/local/tomcat8/webapps/ROOT">

AllowOverride none

Require all granted

</Directory>

나중에 소스배포 하고나서는 위 DocumentRoot 가 필요 없습니다.

<VirtualHost *:80>

ServerName ip or domain



# 확장자 jsp, json, xml, do를 가진 경로는 woker tomcat으로 연결하는 구문.

JkMount /* tomcat

</VirtualHost>

확장자 지정 구문

JkMount /*.jsp tomcat

JkMount /*.json tomcat

JkMount /*.xml tomcat

JkMount /*.do tomcat

또는 아래와 같은 방식으로도 할 수도 있습니다.

<VirtualHost *:80>

ServerAdmin xxx@xxx.net

ServerName weave.xxx.net

DocumentRoot /usr/local/apache2/htdocs



RemoteIPHeader X-Forwarded-For

#<Location />

# Require all denied

# Require ip 192.xxx.x.x/24

#</Location>



ErrorLog logs/weave.xxx.net_error_log

CustomLog logs/weave.xxx.net_access_log common



JkMount /* tomcat8

JkUnMount /robots.txt tomcat8

</VirtualHost>

설정파일을 고치고 syntax 가 올바른지 검사하기 위해 httpd -t 명령어를 입력합니다.

5. 아파치 재시작

service httpd restart

6. AJP 포트 변경

AJP 포트도 기본이 8009 인데 58009 이런식으로 사용하는 것을 추천합니다.(취약점 때문에 변경하는걸 추천하는데 굳이 안해도 상관은 없습니다.)

Tomcat 의 server.xml 에서 58009 로 수정하고 workers.propertiese 에서 AJP 포트만 수정하면 아래와 같은 에러가 발생합니다.

[error] ajp_service::jk_ajp_common.c (2795): (tomcat) connecting to tomcat failed (rc=-3, errors=14, client_errors=0).

그러면 아래와 같이 문제를 해결해야 합니다.

SELinux 보안 문제 해결(PORT)

위와 같은 ajp 연결 실패라는 로그가 발생할 경우 해결 방법입니다.

# semanage설치(selinux 관리 패키지)

yum install -y policycoreutils-python

# 현재 설정된 포트보기

semanage port -l|grep http_port_t

(80,443,8080,8009,8443 등의 selinux가 허용한 기본 포트만 나열 됨)

# 포트추가(ajp 설정한 포트를 추가 해주시면 됩니다.)

semanage port -a -p tcp -t http_port_t 포트

7. AJP 취약점

최근 Apache Tomcat의 원격코드실행 취약점(CVE-2020–1938)을 악용할 수 있는 개념증명코드(Proof of concept code, PoC)가 인터넷상에 공개되어 사용자의 보안 강화가 필요합니다.

즉, 내 Apache 랑 Tomcat 만 서로 통신하게 하는 설정입니다. (외부 다른 Apache 에서 내 Tomcat 에 접근하지 못하도록 설정)

# 2020.03.10 기준

tomcat7 의 경우 7.0.100 버전 으로 업데이트 필요.

tomcat8 의 경우 8.5.51 버전 으로 업데이트 필요.

tomcat9 의 경우 9.0.31 버전 으로 업데이트 필요.

업데이트를 하고 톰캣을 실행하면 톰캣 로그에 다음과 같이 찍힙니다.

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:353)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:493)

Caused by: java.lang.IllegalArgumentException: AJP 연결자는 secretRequired="true"로 구성되었으나 보안 속성이 널 또는 ""입니다. 이 조합은 유효하지 않습니다.

at org.apache.coyote.ajp.AbstractAjpProtocol.start(AbstractAjpProtocol.java:274)

at org.apache.catalina.connector.Connector.startInternal(Connector.java:1099)

... 12 more

server.xml 에서 AJP 포트 부분에 아래 처럼 변경합니다.

기존 : <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

변경 : <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="0.0.0.0" secretRequired="false"/>

8. Apache Method 제한

서버 운영 시 중요한 부분 중 하나인 바로 보안 부분입니다. 보안 문제로Apache 에서 사용 가능한 method 를 제한하는 경우가 있습니다. 보통 허용하는 method 는 GET, POST, HEAD 이며 조금씩 다를 수 있습니다.

# apache 의 httpd.conf 파일 수정

LoadModule jk_module modules/mod_jk.so

<VirtualHost *:80>

ServerName IP OR DOMAIN

<Directory "/data/projectName">

Options None

AllowOverride None

Order allow,deny

Allow from all # 모든 접근 허용

Require all granted

<LimitExcept GET HEAD POST> # GET HEAD POST 를 제외한 나머지는 허용을 하지 않는다는 의미.

Order allow,deny

Deny from all

</LimitExcept>

</Directory>

JkMount /* tomcat

</VirtualHost>

Include conf.modules.d/*.conf

허용 되지 않은 메서드 테스트 방법

curl -v -X OPTIONS http://weave.xxx.net/images/

허용 되지 않은 경우 콘솔에 에러가 발생합니다.

참고로 아파치 2.4 이상 버전에서 VirtualHost 를 설정할 때 Allow Deny 지시자가 Require 로 변경되었습니다.

deny from all -> Require all denied

allow from all -> Require all granted

9. 톰캣 메모리 설정

Window : /bin 아래에 catalina.bat

Linux : /bin 아래에 catalina.sh

JDK 8 부터는 Perm 영역이 삭제되고 Metaspace 영역이 추가되었는데 이에 따라 톰캣 메모리 설정 옵션명도 변경되었습니다.

# 옵션

Xms : 최초 JVM 이 로드될 때 부여할 메모리

: 최초 JVM 이 로드될 때 부여할 메모리 Xmx : 최대 JVM 이 가질 수 있는 메모리

# JDK 8

-XX:MetaspaceSize

-XX:MaxMetaspaceSize

# JDK 7

-XX:PermSize

-XX:MaxPermSize

JAVA_HOME="/usr/lib/jvm/jre-1.7.0-openjdk"

CATALINA_OPTS="$CATALINA_OPTS -server -Xms1G -Xmx10G -XX:PermSize=1G -XX:MaxPermSize=2G -Dorg.owasp.esapi.resources=/data/projectName/WEB-INF/classes/egovframework/egovProps -Dhttps.protocols=TLSv1.1,TLSv1.2 -Djava.awt.headless=true -Duser.timezone=GMT+9"

톰캣 7 의 경우 위의 경우와 비슷하게 설정합니다.

서버 부팅 시 톰캣 재시작

어떠한 에러로 인해 서버가 재부팅될 수 있기 때문에, 톰캣이 서버 부팅과 동시에 자동으로 재시작 되게끔 설정해야 합니다.

1. tomcat.service 파일 생성

든 작업은 root 권한으로 진행합니다. /usr/lib/systemd/system 디렉토리에 아래와 같은 내용으로 tomcat.service 파일을 생성합니다.

[Unit]

Description=tomcat8

After=network.target syslog.target



[Service]

Type=forking

Environment="JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk"

Environment="CATALINA_HOME=/usr/local/tomcat8"

User=web

Group=web

ExecStart=/usr/local/tomcat8/bin/startup.sh

ExecStop=/usr/local/tomcat8/bin/shutdown.sh



[Install]

WantedBy=multi-user.target

2. 데몬 재로드

$ systemctl daemon-reload

3. 시작 서비스 등록

$ systemctl enable /usr/lib/systemd/system/tomcat.service

# 테스트

systemctl start tomcat

systemctl status tomcat.service

4. 재부팅

$ reboot

아파치 톰캣 동시 접속자 세팅

사람이 별로 안 몰리는 사이트의 경우에는 1000 명 정도로 하면됩니다. 디폴트는 250 명 정도로 되어있습니다.

/etc/httpd/conf.modules.d 에 mpm.conf 라는 파일이 있는데 거기서 수정해야합니다.

ServerLimit 옵션과 MaxRequestWorkers 옵션을 같이 수정하면됩니다.

<IfModule mpm_prefork_module>

ServerLimit 1024

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxRequestWorkers 1024

MaxConnectionsPerChild 0

</IfModule>

정리

CentOS7 환경에서 Apache 와 Tomcat 을 사용하여 운영 환경 세팅하는 방법에 대해서 정리하였습니다. 그 외에도 SSL 설정이라던지, 데이터베이스 및 소스 자동백업, 톰캣 JessionId 비활성화 등 필요에 따라 추가적으로 설정해 줘야 하는 부분들이 있을 수 있습니다.