Apache-Tomcat 설정 파일 정리
Apache - httpd.conf
ServerRoot
Define SRVROOT "D:/apache/Apache24"
ServerRoot "${SRVROOT}"
Apache 설치 경로를 SRVROOT로 정의하고 ServerRoot 설정에 대입한다.
Apache 서버가 설치된 디렉터리 경로를 지정하기 위한 지시자이다.
Listen
Listen 80
Apache가 수신할 포트 번호를 지정한다. 여러 포트 번호를 수신할 시 Listen 지시자를 여러번 선언하면 가능하다.
VirtualHost
가상 호스트(VirtualHost)는 하나의 서버에서 여러개의 웹서비스를 구동할때 사용한다.
보통 httpd-vhosts.conf에 가상 호스트를 설정하고, httpd.conf 파일 마지막에 Include conf/extra/httpd-vhosts.conf를 추가한다.
- 이름 기반 가상 호스트
한 장비에 여러개의 도메인 이름을 부여하고 도메인 이름별로 가상 호스트를 사용하는 방법
NameVirtualHost *:80
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
<VirtualHost _default_:80>
ServerAdmin foo@example.com
DocumentRoot /usr/local/victolee/apache2.0.64/htdocs
ServerName localhost
ErrorLog logs/localhost-error_log
CustomLog logs/localhost-access_log common
<Directory "/usr/local/victolee/apache2.0.64/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Allow from all
</Directory>
</VirtualHost>
- IP 기반 가상 호스트
한 장비에 여러개의 IP를 할당받고 IP별로 가상호스트를 사용하는 방법
Listen 192.168.111.100:80
Listen 192.168.111.200:80
<VirtualHost 192.168.111.100:80>
DocumentRoot /var/www/site1
ServerName site1.example.com
</VirtualHost>
<VirtualHost 192.168.111.200:80>
DocumentRoot /var/www/site2
ServerName site2.example.com
</VirtualHost>
- 포트 기반 가상 호스트
포트를 기반으로 가상 호스트를 설정한다. Listen 포트에 여러개 설정한 후 VirtualHost를 해당 포트로 설정하면 된다.
Listen 80
Listen 90
<VirtualHost 192.168.111.100:80>
DocumentRoot /var/www/port_80
</VirtualHost>
<VirtualHost 192.168.111.100:90>
DocumentRoot /var/www/port_90
</VirtualHost>
(참고. https://pshcode.tistory.com/88)
LoadModule
LoadModule jk_module modules/mod_jk.so
동적공유객체(DSO) 방식으로 컴파일 된 Apache 모듈들을 load한다. 위의 예시는 apache 웹 서버와 tomcat을 연동시킬 때 사용하는 모듈 중의 하나이다.
IfModule
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>
해당 모듈이 존재한다면 실행하는 if 구문이다.
User, Group은 apache web daemon이 요청을 받았을 때 지정한 user와 group으로 응답을 하게 된다.
apache의 실행이 root 권한으로 실행되었을 때 유효하다.
ServerAdmin
ServerAdmin admin@example.com
주로 서버 내부 오류(500)가 발생했을 때 띄우는 안내문에 출력될 서버 관리자 연락처를 명시하는 지시자이다.
Directory
<Directory />
AllowOverride none
Require all denied
</Directory>
각 디렉터리에 고유한 설정을 적용하기 위한 블록이다. 이 때 인수로 지정되는 {디렉터리 명}은 웹 서버의 가상 디렉터리가 아니라 서버 자체 실제 디렉터리의 절대 경로이다.
- AllowOverride - .htaccess파일의 지시문들을 실행하는 것에 대한 옵션을 지정합니다. 재설정 또는 덮어쓸 수 있는지 여부를 결정하고 httpd.conf 설정이 무시되고 외부 파일의 내용이 적용된다.
- Require - 클라이언트가 웹 서버의 최상위 경로부터 모든 하위 경로까지 액세스 범위를 지정하는 지시자
Options
Options opt0 opt1 opt2 ... optn
Options 뒤에는 필요한 옵션을 공백 구분하여 작성해주면 된다. Options는 다음과 같은 인자가 올 수 있다.
- FllowSymLinks: 이 디렉터리 내에서 심볼릭 링크를 가능하게 한다.
- Indexes: 디렉터리 경로가 요청되고 DirectoryIndex에 맞는 파일이 없으면 해당 디렉터리의 목록을 출력한다.
- Includes: SSI(Server Side Include)를 허용한다.
- IncludesNOEXEC: SSI는 가능하나 SSI 내에서의 CGI는 불가
- ExecCGI: CGI 가능, 자세한 내용은 후술
- All: MultiViews 옵션을 제외한 모든 옵션을 적용한다.
- None: 어떠한 옵션도 적용하지 않는다.
DocumentRoot
DocumentRoot "${SRVROOT}/htdocs"
각 웹 사이트마다 루트 디렉터리를 지정하는 지시자이다.
Files
<Files ".ht*">
Require all denied
</Files>
지정 파일에 대한 Option을 지정할 수 있게 하는 포함 지시자이다. 정규식을 사용해서 표현가능하다.
ErrorLog
ErrorLog "logs/error.log"
서버 오류 로그 파일의 이름과 위치를 지정하는 지시자이다.
LogLevel
LogLevel warn
로그 레벨 지정자
- 종류
- emerg
- alert
- crit
- error
- warn
- notice
- info
- trace1~8
mod_jk
<IfModule mod_jk.c>
JkWorkersFile D:/apache/Apache24/conf/workers.properties
JkLogFile D:/apache/Apache24/logs/mod_jk.log
JkLogLevel info
JkAutoAlias D:\apache\apache-tomcat-8.5.45\webapps
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMount worker1
</IfModule>
AJP 프로토콜( Apache Jserv Protocol)을 사용하여 아파치와 톰캣을 연동하는 플러그인이다.
AJP 프로토콜은 웹 서버 뒤에 있는 어플리케이션 서버로부터 웹 서버로 들어오는 요청을 위임할 수 있는 바이너리 프로토콜이며, 주로 로드밸런싱에 사용된다.
추가 정보는 tomcat JK connector reference 에서 확인 가능
- Worker - 웹서버로부터의 서블릿 요청을 처리하기 위해 동작하는 tomcat 인스턴스. worker 설정에는 port, host, type 등이 있다.
- AutoAlias - 웹 어플리케이션 컨텍스트 디렉터리를 맵핑 해주는 지시자.
- Mount - 지정된 url 혹은 전체를 tomcat 인스턴스에 할당하는 지시자.
Tomcat - server.xml
Server
<Server port="8005" shutdown="SHUTDOWN">
server.xml의 root element, server의 shutdown port를 지정한다. server는 1개 이상의 service를 가질 수 있다.
GlobalNamingResources / Resources
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
JNDI의 전역자원을 나타낸다. 자원들은 Server안에 정의되며 웹 어플리케이션에서 resource로 사용할 수 있도록 resource의 이름-값 들을 설정할 수 있다.
Resource 태그는 해당 resource에 대한 설정과 객체 팩토리를 설정한다.
Service
<Service name="Catalina">
Service의 이름을 명시하는 지시자, Service는 Connector들의 집합이다.
Executor / ThreadPool
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
Executor는 tomcat의 컴포넌트 간의 thread pool을 제공하는 지시자이다.
- name : Executor 이름
- namePrefix : Thread 각각의 접두사, namePrefix + threadNumber로 구성된다.
- maxThreads : Thread의 수용가능한 최대 개수 지정, default는 200
- minSpareThreads : 언제나 가동되는 Thread의 최소 갯수이며, default는 25
- maxIdleTime : Idle thread가 가동되는 시간(ms)이며, default는 60000(1분)
Connector
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
특정 port로 들어오는 내용을 수신한다.
속성 |
설명 |
port |
포트번호 |
protocol |
프로토콜명 (HTTP/1.1, AJP/1.3 등..) |
acceptCount |
Request 큐의 길이를 설정한다. HTTP 요청시, IDLE 쓰레드가 없을 경우 해당값만큼 요청을 대기한다. 대기 큐에 들어간다는 것은 처리가능한 쓰레드가 없다는 의미이며, 기능장애 가능성이 높다. 따라서, 계속 대기 큐에 쌓이도록 하는 것보다 0~10 내외로 값을 낮게 주어 처리하도록 한다. |
redirectPort |
SSL 요청이 들어올 경우 리다이렉트될 포트번호 |
URIEncoding |
GET 요청을 처리할 때 사용할 인코딩 방식을 설정한다. 톰캣은 기본적으로 ISO-8859-1인데, 한글 사용을 위해 UTF-8로 변경을 해주도록 한다 |
useBodyEncodingForURI |
true/false로 설정한다. 이 값은 request.setCharacterEncoding()으로 설정한 값으로 인코딩을 처리한다. 스프링 프레임워크를 사용할 경우 web.xml에서 CharacterEncodingFilter로 선언해주는 값으로 인코딩을 하게 된다 |
maxParameterCount |
GET 또는 POST로 전달할 수 있는 파라미터 갯수, 기본값은 10000개 0으로 설정하게 되면 갯수에 제한을 두지 않는다. |
maxPostSize |
POST로 전달할 수 있는 bytes 사이즈, 기본값은 2Mbytes(2097152) 0이하의 숫자로 설정하게 되면 bytes 사이즈에 제한을 두지 않는다 |
connectionTimeout |
타임아웃 밀리세컨드, 기본값은 60000(1분)이며 -1일 경우 타임아웃의 제한이 없다. |
connectionUploadTimeout |
데이터 업로드에 대한 타입아웃 밀리세컨드 이 설정은 disableUploadTimeout이 false일 경우에 효과가 있다. |
maxThreads |
Connector에서 처리할 수 있는 동시 요청 쓰레드 갯수 기본값은 200개 아파치와 연동할 경우 MaxClients 값과 관계가 있다. 아파치 MaxClients가 톰캣의 maxThreads보다 많을 경우 hang이 걸릴수가 있다. * maxThreads X 로드밸런싱 갯수 = MaxClients * 1.1 (또는 1.2) 아파치 prefork 방식 기준이다. |
minSpareThreads |
최소로 유지할 thread 갯수, 기본값은 10 |
Engine
<Engine name="Catalina" defaultHost="localhost">
커넥터로 수신한 클라이언트의 요청을 처리하고 응답한다. 기본 설정 이름은 Catalina
Realm
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
Realm 태그는 보안을 위해 role명과 사용자명, 비밀번호의 맵핑을 외부의 데이터베이스로 부터 가져오는 지시자이다.
Host
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
Engine에 관련된 가상호스트를 정의한다. unpackWARs 속성에 따라 war파일을 읽을지 exploded된 프로젝트를 읽을지 결정하게 된다. autoDeploy 속성은 tomcat이 가동중에 웹어플리케이션을 배치한 경우에 자동으로 읽어 들일 것인지의 여부를 설정할 수 있다.
Context
<Context path="/booking" docBase="D:\workspace\2019_2nd_intern\target\booking-1.0.0-BUILD-SNAPSHOT.war" reloadable="false"/>
웹 어플리케이션을 의미한다. docBase에서 webapps 폴더 혹은 war 파일을 지정하여 사용한다.
Context 태그가 Host 안에 없을 경우 기본적으로 webapps 하위의 Root 디렉터리를 기본 path로 설정한다.
아직 부족한 부분이 많아요 ㅎㅎ
틀린 부분이나 수정할만한 의견 환영합니다~ : )