웹 서버 공부를 시작할 때 아파치를 빼놓을 수 없고, 흔히 아파치는 PHP, JSP등 웹 애플리케이션을 동작하기 위한 기초적인 웹 서버이다.
Nodejs와도 연동할 수 있는 만큼 웹 개발자로 나아가는 사람이라면 설치는 기본적으로 할 줄 알아야 한다.
아파치를 설치하는 방법은 쉽다.
$ apt-get install apache2
apt를 이용해 install 명령을 날려주면 설치 된다.
문제는 설치 이후에 어떻게 해야 내 컴퓨터로 사람들이 접속할 수 있는지, 그리고 내 도메인을 연결할 수 있는지다.
아파치에서는 해당 아이피에 대해 어떤 webapps 디렉토리로 연결될 지 설정해 주어야 한다. 즉 도메인에 대해 웹 디렉토리를 할당하여, 외부 혹은 내부 사용자가 도메인에 접속을 요청 했을 때, 해당 디렉토리의 webapp 내용을 보여줄 수 있어야 한다.
웹 앱 디렉토리 설정을 들어가기 전에, 내가 사용하고있는 아파치 설정은 다음과 같다.
# /etc/apache2/apache2.conf Timeout 60 KeepAlive On MaxKeepAliveRequests 100
# Timeout : 몇초가 지나면 Timeout을 보낼것인가 ( 초 단위 )
# KeepAlive : Connection에 대해 동일한 연결을 재사용 할 것인지 설정한다. KeepAlive가 꺼져있으면 동일한 요청에 대해 여러 접속이 발생하고, 켜져있으면 한 요청으로 처리하게된다. 하지만 메모리 사용량이 증가하므로(Connection을 갖고 있어야 하기 때문에) 사용 환경에 따라 On Off 하면 될 것 같다.
# MaxKeepAliveRequests : 위 KeepAlive를 몇개까지 허용할 것인지
#KeepAliveTimeout : 얼마만큼의 시간동안 위 KeepAlive를 갖고 있을 것인지 ( 초 단위 )
웹 디렉토리를 설정할 때 내가 사용하는 방법은 다음과 같다.
1. /etc/apache2/apach2.conf 파일 수정
2. /etc/apache2/sites-available 내에 파일 추가
추천하는 방법은 2번이다.
1번에서는 아파치의 기본 설정을 하고, 웹 서버 추가는 2번을 통해 sites를 추가하고, 아파치에 등록함으로써 webapp을 동작시키는 것이다.
/etc/apache2/apache2.conf 파일 수정
위 파일을 열고, "Directory /var/www"를 검색하면 다음과 같은 코드가 있다.
<Directory /var/www/> Options FollowSymLinks AllowOverride All Require all granted </Directory>
아파치를 처음 깔았을 때 보이는 페이지를 해당 코드를 통해 웹서버 등록을 해 주고 있는 것이다.
즉 /var/www로 디렉토리를 변경하면 아파치 설치후 localhost에 접속했을 때 나오는 화면을 볼 수 있다.
우리가 웹 서버를 등록하기 위해서는 위 설정을 따라주면 된다.
Directory 태그를 통해 내가 등록하고자 하는 웹앱을 설정해주면 된다.
<Directory 웹앱경로> DirectoryIndex index.html # 기본 페이지 Options FollowSymLinks # 디렉토리 목록에 대한 설정 AllowOverride All # 접근방식 Require all granted # 접근 권한 </Directory>
웹앱경로: 내가 설정하고자 하는 웹앱의 절대경로이다.
DirectoryIndex: 기본 페이지를 설정한다.
- index.html, index.php, index.jsp 등
Options: 접근제어를 설정할 수 있다. 사용자에게 디렉토리 목록을 보여줄지 말지, SSI를 설정할지 말지 등을 설정한다.
- None, ALL, Indexes, Includes, IncludeNOEXEC, FollowSymLinks, ExecCGI, MultiVIews.
AllowOverride: 접근에 대한 인증을 어떻게 허용할 것인지 설정한다. 즉 연결에 대한 인증을 계속 사용할지, 새로운 연결은 새로운 인증을 할지 등을 설정한다.
- All, AuthConfig, FileInfo, Indexes, Limit, Options 등
Require: 접근 권한을 설정할 수 있다. 모든 접근 허용/거부, 특정 아이피 허용/거부 등을 설정한다.
- all granted, all denied, ip ipv4, not ip ipv4, host hostname, not host hostname
/etc/apache2/sites-available 사이트 추가
1번과는 다르게 2번은 가상호스트를 사용하는 방법이다.
따라서 설정 양식이 다른데, 다음과 같다.
<VirtualHost *:80> ServerName 도메인 주소 DocumentRoot 웹앱 경로 ErrorLog 에러로그 경로 </VirtualHost>
우슨 태그가 VirtualHost이고, 포트도 설정해줘야 한다.
<VirtualHost *:80> : 컴퓨터가 갖고있는 아이피(*)의 80포트 접속을 웹앱으로 설정한다.
ServerName : 아이피(*)중 어떤 도메인 주소 연결을 해당 웹앱으로 받을지 설정한다. 외부 아이피를 줘도 되고, (*)에 적은 아이피를 똑같이 적어줘도 된다.
DocumentRoot : 웹앱 경로
ErrorLog : 에러로그 경로
나는 톰캣 서버를 사용하기 때문에 추가적인 다음 옵션을 사용한다
JkMount /* loadballancer
JkMountCopy On
SSL설정도 사용하고 있어서 http 접속을 https로 Redirect 시켜준다.
Redirect permanent / https://~
이로써 아파치의 기본 설정은 모두 끝났다.
내가 설정한 아이피 주소(도메인)으로 내가 등록해놓은 웹앱이 돌아가는것을 확인할 수 있다. SSL의 경우 추가적인 설정이 필요하기 때문에 나중에 게시할 예정이다.
JSP사용자의 경우 마찬가지로 JkMount, loadbalancer 설정 등이 필요하기 때문에 이 글을 통해 html과 같이 기본적인 페이지만 확인할 수 있다. (따로 플러그인을 사용한다면 그에 맞는 설정만 추가적으로 하면 된다는 말)
한가지 확인해야 할 것은 도메인을 사용중이라면, 도메인 제공자 사이트에서(가비아 등) 해당 도메인에 대해 내 웹서버의 아이피를 설정해줘야 한다.
리눅스 커맨드를 통해 어떻게 하면 되는지 정리하겠다.
$ apt-get install apache2 $ vi /etc/apache2/apache2.conf #여기부터 apache2.conf 파일 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 LogLevel error <Location /WEB-INF> SetHandler WEB-INF Order deny,allow Deny from all </Location> #커맨드 $ vi /etc/apache2/conf-enabled/charset.conf #charset.conf AddDefaultCharset UTF-8 # 아파치의 기본 언어셋을 UTF-8로 설정 #커맨드 $ vi /etc/apache2/sites-available $ vi mywebapp.conf #mywebapp.conf <VirtualHost *:80> ServerName localhost DocumentRoot /myweb/webapps/ROOT ErrorLog /myweb/log/error.log </VirtualHost> #커맨드 $ a2ensite mywebapp $ systemctl restart apache2