본문 바로가기

서버엔지니어

WEB - WAS 연결 ( Apache - Tomcat ) 및 테스트 (세션)

#환경

- Amazon Linux

- jdk 1.8

- tomcat 9.0.104

 

1. apache 설치

yum update

yum install httpd -y

 

2. tomcat 설치

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.104/bin/apache-tomcat-9.0.104.tar.gz
tar -xvzf apache-tomcat-9.0.104.tar.gz 
mv apache-tomcat-9.0.104 tomcat

3. jdk 설치

cd /tmp

wget https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.rpm
ls -lh amazon-corretto-8-x64-linux-jdk.rpm
sudo yum install -y ./amazon-corretto-8-x64-linux-jdk.rpm
java -version
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-amazon-corretto' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
echo $JAVA_HOME

 

4. WEB - WAS 연결 ( 설정파일 - tomcat.conf 작성)

 cd /etc/httpd/conf.d

 touch tomcat.conf

 vi tomcat.conf 

 

[root@ip-172-31-47-29 conf.d]# cat tomcat.conf 
<VirtualHost *:80>
    ServerName yourdomain.com

    DocumentRoot /var/www/html
    <Directory "/var/www/html">
        AllowOverride All
        Require all granted
    </Directory>

    ProxyPreserveHost On

    # 정적 파일은 Apache가 처리
    <LocationMatch "\.(html|css|js|png|jpg|jpeg|gif|ico)$">
        ProxyPass !
    </LocationMatch>

    # 나머지는 모두 Tomcat으로
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

    ErrorLog logs/tomcat_proxy_error.log
    CustomLog logs/tomcat_proxy_access.log combined
</VirtualHost>

 

 

[결과]

ip:80 호출 시, ip:8080 으로 리다이렉트 

 



테스트 #세션연결 

 

🔄 세션 흐름 정리

세션은 클라이언트(브라우저) → Web 서버 → WAS로 흐르기 때문에, WAS에서 생성된 세션 정보는 브라우저의 쿠키를 통해 Web 서버로 전달됩니다. Apache는 클라이언트의 세션 쿠키를 Tomcat에 전달하여, WAS에서 생성된 세션을 계속 유지할 수 있게 돼요.

  1. 클라이언트 (브라우저)가 Apache 서버에 요청을 보냄 (예: /session.jsp).
  2. Apache는 이 요청을 Tomcat으로 프록시합니다 (ProxyPass).
  3. Tomcat은 세션을 생성하고, 이 세션에 대해 JSESSIONID 쿠키를 브라우저에 발급.
  4. 브라우저는 이후의 요청에서 JSESSIONID를 Apache 서버로 보내고,
  5. Apache는 이 JSESSIONID를 Tomcat에 전달하여 해당 세션을 계속 유지.

 

✅ 세션 테스트 예제 (JSP 기반)

Tomcat 쪽 /webapps/ROOT/session.jsp 파일을 하나 만들어서 테스트

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%
    Integer count = (Integer) session.getAttribute("count");
    if (count == null) count = 1;
    else count++;
    session.setAttribute("count", count);
%>
<!DOCTYPE html>
<html>
<head><title>Session Test</title></head>
<body>
<h2>Session Count: <%= count %></h2>
</body>
</html>

 

🔍 확인 방법

  1. 브라우저 개발자 도구를 열고 (F12) "Application" 탭을 확인하여 JSESSIONID 쿠키가 브라우저에 잘 저장되고 있는지 확인
  2. Tomcat에서 로그 확인 (localhost:8022/session.jsp로 접근)하여 세션이 제대로 관리되고 있는지 보기
  3. 다시 요청을 보내면서 세션이 유지되는지 (Session Count 값이 1, 2, 3...처럼 계속 증가하는지)

 

 

클라이언트가 **Web 서버(Apache)**를 우회해서 **WAS(Tomcat)**에 직접 접근하는 것을 막고 싶다면, 그건 보안 설정과 관련이 있어.

WAS에 대한 직접적인 접근을 차단하려면 몇 가지 방법을 사용할 수 있어요. 세션 체크와 관련된 보안 설정이 포함되기도 하죠.

 

ex) 필터

@WebFilter("/secure/*") // 특정 경로만 필터링
public class SessionFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpSession session = httpRequest.getSession(false); // 세션이 없으면 null 반환

        if (session == null || session.getAttribute("user") == null) {
            ((HttpServletResponse) response).sendRedirect("/login.jsp"); // 로그인 페이지로 리다이렉트
        } else {
            chain.doFilter(request, response); // 세션이 유효하면 요청을 진행
        }
    }
}