The server setting guide using Apache and Tomcat in CentOS7
서론
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 이 생성됩니다.make
: 소스코드를 실제로 컴파일해서 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 이 로드될 때 부여할 메모리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 비활성화 등 필요에 따라 추가적으로 설정해 줘야 하는 부분들이 있을 수 있습니다.