#환경
- 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에서 생성된 세션을 계속 유지할 수 있게 돼요.
- 클라이언트 (브라우저)가 Apache 서버에 요청을 보냄 (예: /session.jsp).
- Apache는 이 요청을 Tomcat으로 프록시합니다 (ProxyPass).
- Tomcat은 세션을 생성하고, 이 세션에 대해 JSESSIONID 쿠키를 브라우저에 발급.
- 브라우저는 이후의 요청에서 JSESSIONID를 Apache 서버로 보내고,
- 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> |
🔍 확인 방법
- 브라우저 개발자 도구를 열고 (F12) "Application" 탭을 확인하여 JSESSIONID 쿠키가 브라우저에 잘 저장되고 있는지 확인
- Tomcat에서 로그 확인 (localhost:8022/session.jsp로 접근)하여 세션이 제대로 관리되고 있는지 보기
- 다시 요청을 보내면서 세션이 유지되는지 (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); // 세션이 유효하면 요청을 진행 } } } |