Skip to content

Latest commit

 

History

History
120 lines (83 loc) · 3.54 KB

02-jk-static-separation.md

File metadata and controls

120 lines (83 loc) · 3.54 KB

02. Step 1 — Alias + JkUnMount

가장 큰 효과가 여기서 나온다. 정적 리소스를 Apache가 직접 서빙하도록 분리.

핵심 코드

# httpd-vhosts.conf 또는 메인 conf

# 1) Alias: URL 경로를 디스크 디렉토리에 연결
Alias /resources /srv/webapp/your-app/static
<Directory "/srv/webapp/your-app/static">
    Options -Indexes
    AllowOverride None
    Require all granted
</Directory>

Alias /files /srv/webapp/your-app/upload
<Directory "/srv/webapp/your-app/upload">
    Options -Indexes
    AllowOverride None
    Require all granted
</Directory>

# 2) JkUnMount: 위 경로는 Tomcat이 처리하지 않음
JkUnMount /resources/* worker1
JkUnMount /files/* worker1

# 3) JkMount: 나머지는 Tomcat
JkMount /* worker1

전체 예시: configs/httpd-vhosts.conf.example

각 지시어가 하는 일

Alias /resources /srv/webapp/your-app/static

URL /resources/... 요청이 들어오면 Apache가 /srv/webapp/your-app/static/... 파일을 직접 서빙. Tomcat을 거치지 않는다.

<Directory> ... </Directory>

해당 디스크 디렉토리에 대한 권한·옵션 설정.

  • Options -Indexes: 디렉토리 자동 인덱싱 비활성. (보안)
  • AllowOverride None: .htaccess 무시. (성능 + 보안)
  • Require all granted: 모든 접근 허용.

JkUnMount /resources/* worker1

mod_jk 라우팅 테이블에서 해당 경로를 제외. JkMount가 잡은 후에 JkUnMount가 풀어준다.

순서가 중요한가

JkMount /*보다 JkUnMount /resources/*가 위에 있어도 OK — mod_jk는 더 구체적인 매칭(/resources/*)을 우선한다. 다만 가독성을 위해 JkUnMount를 먼저 두는 것이 관례.

정적 디렉토리는 어디로 둘 것인가

옵션 A — 운영 디렉토리 안 (전형적):

/srv/webapp/your-app/
├── static/      ← Alias 대상
├── upload/      ← Alias 대상
└── WEB-INF/     ← Tomcat 전용 (Apache가 접근하면 안 됨)

옵션 B — Tomcat webapps 내부:

/usr/local/tomcat/webapps/your-app/
├── static/      ← Tomcat과 Apache 둘 다 접근 가능 (Alias)
└── WEB-INF/

둘 다 동작하지만 옵션 A가 권장. Tomcat이 정적 파일을 신경 안 쓰게 분리하는 것이 본 가이드의 정신.

적용 후 검증

# 정적 리소스 요청
curl -I https://your-domain.example/resources/css/main.css

# Apache access_log에 찍힘
tail -1 /usr/local/httpd/logs/access_log

# Tomcat access log에는 찍히지 않아야 정상
tail -10 /usr/local/tomcat/logs/localhost_access_log.YYYY-MM-DD.log | grep main.css
# (출력 없음)

Tomcat 로그에 더 이상 정적 파일이 안 보이면 Step 1 성공.

주의 — Directory 권한·소유자

# Apache 데몬 사용자가 디렉토리를 읽을 수 있는지 확인
ls -la /srv/webapp/your-app/static
# drwxr-xr-x. daemon daemon

# 안 맞으면
sudo chown -R daemon:daemon /srv/webapp/your-app/static
sudo chmod -R 755 /srv/webapp/your-app/static

SELinux가 enforcing이면 fcontext 추가 필요:

sudo semanage fcontext -a -t httpd_sys_content_t "/srv/webapp/your-app/static(/.*)?"
sudo restorecon -Rv /srv/webapp/your-app/static

효과만 검증한 결과 (Step 1만 적용)

이 단계 하나만 적용해도 본인 환경에서 정적 응답이 0.133초 → 0.07~0.08초 정도로 개선되었다. 나머지 단계는 그 다음의 "마지막 한 방울"이다.

다음 단계 → 03-rewrite-priority.md