Category Archives: 리눅스서버관리

[Apache] SetEnvIf를 이용하여 Access Log 기록 여부 변경 하기

Apache에서는 SetEnvIf를 이용하여 로그 여부를 정의할 수 있습니다.

특정 설정을 환경변수로 저장 후에 그것을 이용하여 로그 여부를 정의하는 식으로 하시면 됩니다.
[code]SetEnvIf attribute regex [!]env-variable[=value] [[!]env-variable[=value]] …[/code]

첫번째 인자인 attribute에는 다음의 값이 들어갈 수 있습니다.

1. HTTP HEADER


  • Host

  • User-Agent

  • Referer

  • Accept-Language
2. COMMON


  • Remote_Host – 요청하는 클라이언트의 호스트명

  • Remote_Addr – 요청하는 클라이언트의 IP 주소

  • Server_Addr – 요청을 받는 서버의 IP 주소

  • Request_Method – 사용한 Method 명 (GET, POST 등)

  • Request_Protocol – 요청의 프로토콜 이름과 버젼 (“HTTP/1.1” 등)

  • Request_URI – 요청의 Query String을 제외한 호스트명 이후의 주소
3. 기존의 환경 변수

특정 IP의 접속을 로그로 남기지 않을 경우에는 다음과 같은 설정을 하여 로그를 남기지 않도록 할 수 있습니다.
[code]SetEnvIf Remote_Addr “123.123.123.123” dont_log[/code]
적용할 가상 호스트의 로그 부분에 다음과 같이 추가합니다.
[code]CustomLog logs/access_log common env=!dont_log[/code]
access_log를 기록할때 dont_log 환경변수가 없을경우에만 기록을 하라는 것으로 생각하면 됩니다.

Apache 2 Proxy AJP를 이용한 호스팅 환경에서의 완벽 연동

지금 작성할 글은 어찌보면 [이곳]의 글의 연장선상에서 봐야 할 글일꺼 같습니다.

ProxyAJP에 대해 잘 모르신다면 링크의 글을 보시거나 좀더 검색해 보시고 보시면 좋을 것같습니다.

제가 운영하는 투명아이 호스팅에서 JSP 호스팅을 좀더 편하게 구현할 방법을 찾아보니 여기까지 왔습니다.

정말 간단하다 못해 너무 단순하게 강력한 효과를 얻을 수 있는 방법이라고 생각합니다.

우선 보통의 경우 mod_jk를 이용하여 연동을 하게 되는데요, 이때에 볼 수 있는 설정 파일은 대충 다음과 같습니다.
[code]LoadModule          jk_module       modules/mod_jk.so

JkWorkersFile /usr/local/tomcat/conf/workers.properties
JkLogFile /var/log/httpd/mod_jk.log
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories -ForwardLocalAddress
JkLogStampFormat “[%a %b %d %H:%M:%S %Y] “
JkRequestLogFormat “%w %V %T”
JkLogLevel info

JkMount             /servlet/*      ajp13
JkMount             /manager/*      ajp13
JkMount             /flex/*         ajp13
JkMount             /*.jsp          ajp13
JkMount             /*.do           ajp13[/code]
위의 방법은 Apache 2.2의 ProxyAJP 모듈을 이용한 방법으로 고쳐 보겠습니다. [참고]

다음과 같은 설정 파일을 proxy_ajp.conf 파일로 만들어 Apache의 설정 파일에 Include되도록 합시다.
[code]LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

ProxyRequests Off
ProxyVia Block
ProxyMaxForwards 100
ProxyPreserveHost On

ProxyPass /manager/ ajp://localhost:8009/manager/
ProxyPass /servlet/ ajp://localhost:8009/servlet/
ProxyPass /flex/ ajp://localhost:8009/flex/
ProxyPassMatch ^/.*\.(jsp|do)$ ajp://localhost:8009/

# 보안을 위해 WEB-INF 접근 불가설정
<LocationMatch “/WEB-INF”>
    deny from all
</LocationMatch>

# 보안을 위해 META-INF 접근 불가설정
<LocationMatch “/META-INF”>
    deny from all
</LocationMatch>[/code]
ProxyPass를 사용하여 특정 디렉토리를 톰캣에서 처리하게 할 수 있습니다.

ProxyPassMatch를 이용하여 특정 확장자를 가진 파일을 톰캣에서 처리하도록 할 수 있습니다. 정규식을 잘 쓰면 되겠네요.

이제는 더이상 worker.properties니 하는 파일이 필요없습니다. 위와 같은 방법으로 간단하게 처리 가능합니다.

WEB-INF나 META-INF 디렉토리로의 접근 보안 문제는 위와같이 해결할 수 있습니다.

위와 같은 설정으로 웹호스팅 환경의 멀티 가상호스트상황에서도 일일이 연동 설정을 할 필요없어졌습니다.