아파치에서 mod_proxy_balancer와 mod_jk를 같이 사용할 때 응답코드가 500입니다.


안녕하세요. 웹개발자 나부랭이입니다.

웹 어플리케이션을 운영기에 올렸을 때 발생하는 문제를 사전에 테스트해보려는 목적으로 운영기와 최대한 비슷한 환경을 만들어 보려고 합니다. 운영기에선 L4 스위치가 있을테니 L4가 하는 일을 아파치 한대가 하게끔 하려는 거죠.

제가 의도하는 서버의 구조와 대략적인 작동을 이러합니다: 이미지

  • 구성: 아파치 3대, 톰캣 2대
  • 아파치와 톰캣은 모두 하나의 리눅스 서버에 존재함
  • apache0은 모든 80포트 요청을 받아서 apache1과 apache2로 분산 처리(proxy with loadbalancing)
  • apache1은 tomcat1과 jk로 연결, apache2는 tomcat2와 jk로 연결됨.

이를 위해 설정한 값은 다음과 같습니다:

apache0 httpd.conf:

# 생략

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule session_module modules/mod_session.so
LoadModule session_cookie_module modules/mod_session_cookie.so
LoadModule session_dbd_module modules/mod_session_dbd.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so

# 생략

ProxyRequests off
ProxyPreserveHost on

<Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
</Proxy>

ProxyVia On

<VirtualHost *:80>
    ServerName mydomain.com

    <Proxy "balancer://focluster">
        BalancerMember http://mydomain.com:1081/
        BalancerMember http://mydomain.com:1082/
    </Proxy>
    ProxyPass "/" "balancer://focluster"
</VirtualHost>

apache1 httpd.conf:

# 생략

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info

<VirtualHost *:1081>
    ServerName mydomain.com
    JkMount "/*" fo
</VirtualHost>

apache1 workers.properties:

worker.template.type=ajp13
worker.list=fo
worker.fo.reference=worker.template
worker.fo.port=8011
worker.fo.host=localhost

apache2 httpd.conf:

# 생략

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info

<VirtualHost *:1082>
    ServerName mydomain.com
    JkMount "/*" fo2
</VirtualHost>

apache2 workers.properties:

worker.template.type=ajp13
worker.list=fo2
worker.fo2.reference=worker.template
worker.fo2.port=8012
worker.fo2.host=localhost

추가적으로 WAS의 웹 루트에 index.jsp와 test.html이 있고 톰캣 web.xml의 welcome-file은 index.jsp로 되어 있습니다.

이렇게 설정하고 난 후 브라우저에서 mydomain.com으로 연결하면 index.jsp는 잘 보입니다. 하지만 mydomain.com/test.html을 요청하거나 서블릿을 거쳐야 하는 URL을 요청할 경우 500 상태값이 응답됩니다. 로그를 확인해보면 apache0까지의 access는 찍힙니다. 하지만 apache1의 access는 없고 WAS log도 아무것도 찍히지 않습니다. proxy balancer 설정 없이 테스트했을때 정상적으로 페이지가 표시되는걸 보면 jk 설정이나 WAS에 이상이 있는건 아니거든요.

다음처럼 BalancerMember 없이 ProxyPass만 해보면:

<VirtualHost *:80>
    ServerName mydomain.com
    ProxyPass          "/" "http://mydomain.com:1081/"
    ProxyPassReverse   "/" "http://mydomain.com:1081/"
</VirtualHost>

이건 또 잘됩니다. 단지 요 설정에 로드밸런스만 추가했을 뿐인데 말이죠. 뭐가 잘못되었는지 모르겠네요. 부디 아시는분 답변 부탁드립니다.


조회수 246


1 답변


좋아요
2
싫어요
채택취소하기

특별한 설정 오류는 없어보이는데....

ProxyPass "/" "balancer://focluster"

를 다음과 같이 끝에 /를 붙여서 한번 테스트해보세요.

ProxyPass "/" "balancer://focluster/"
  • 2016년 05월 18일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 해결 되었습니다. 감사합니다    처제의일기   2016.5.18 15:17     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close