Forest Gump?

TIL ) apache 가상 호스트(vhost) 설정 (with. AWS) 본문

카테고리 없음

TIL ) apache 가상 호스트(vhost) 설정 (with. AWS)

code1010 2023. 7. 19. 23:00

기존 페이지 중 리뉴얼 되는 페이지가 있어, 사용하고 있던 도메인을 그대로 사용해야 하는 일이 있었다. 

S3버켓에서 cloudfront로 호스팅한 새로운 프로젝트를 하고, AWS ROUTE53을 통해 DNS 설정을 하려했다. 

 

 

작업 자체는 어려움이 없어, 기존에 쓰던 MY.com도메인을 해제해 준 뒤, 기존에 준비한 cloudFront의 엔드포인트를 엔드포인트를 연결해줬다. 

다만 리뉴얼되기 전의 프로젝트에 대한 사용처가 소수지만 남아있어서, 사용중인 A-OLD프로젝트의 MY.com도메인에

연결된 서버를 리뉴얼된 A-NEW로 바꾸고, A-OLD 서버의 도메인을 MY2.com으로 바꿨다. 

 

 


 

이슈 발생

 

 

 

이론상으로는 전혀 문제될 것이 없이 MY2.com으로 접속하면 A-OLD서버가 나와야 하는데, A-OLD가 아닌  A-NEW 서버로 가버리고 있었다!  

 

 

 


 

 원인 분석

 

 

 

개발자 도구 상태창을 보니, 애초에 바로  A-NEW 서버로 가는것이 아닌 A-OLD서버을 거쳐서 302 리다이렉트로

A-NEW 서버을 다시 이동시키고 있었다. 

회사 보통의 프로젝트들은 ALB를 통해 포트 포워딩을 하거나, 서버 리다이렉션을 통해 다른 서버로 이동했는데, 

이건 ALB설정에도 아무것도 없고, CloudFront, WAF 설정등 AWS 네트워크 환경에 대한 제약사항은 다 찾아봤는데도

아무런 설정 내용을 찾지 못했다. 

 

혹시나 하는 마음에,  A-OLD의 웹 서버가 있나 상태 확인을 해봤다.오래된 레거시 서버라, 서버 관련한 문서를 찾지 못하여

웹 서버가 ngnix인가 apache 인가도 모르는 상황이였다. 

 

보안문제로 사진은 구글펌!

 아파치가 열심히 동작하고 있었다. 그럼 아파치를 통해서 리다이렉션을 하고 있을 확률이 높아 apache에 대한 conf 설정을 봤다. 먼저  apache/conf 안에 있는 httpd.conf 파일을 보니, virtual host에 대한 옵션이 설정되어 있었다.

 

 

virtual host의 설정은 apache/conf/extra의 httpd-vhosts.conf에 있었다. 

 

# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
중략
#
<VirtualHost *:80>
	ServerName my.com
	DocumentRoot "프로젝트/위치/ROOT" // 홈디렉토리 폴더의 절대 경로
	ErrorLog "/프로젝트/위치/logs/apache2-error_log.log" //에러 로그의 경로
	CustomLog "/프로젝트/위치/logs/apache2-access_log.log" common //접속 로그의 경로

	RewriteEngine On
	RewriteRule "^/$" "https://my.com/" [R]

	JkMount /* 프로젝트명
</VirtualHost>

 

설정 값 설명

 

 

 

<VirtualHost :80>


이 구문은 가상 호스트의 시작을 선언하며, 이 호스트가 모든 IP 주소에서 들어오는 80 포트의 요청을 처리하도록 설정한다.

ServerName my.com


'ServerName' 지시문은 가상 호스트를 식별하는 주소를 설정한다. 여기서는 'my.com'이라는 도메인 이름을 사용한다.

DocumentRoot "프로젝트/위치/ROOT"


'DocumentRoot' 지시문은 가상 호스트의 웹 컨텐츠를 저장하는 디렉토리를 지정한다. 이 경로는 웹사이트의 HTML, CSS, 이미지 파일 등이 위치하는 곳이다.

ErrorLog "/프로젝트/위치/logs/apache2-error_log.log"


'ErrorLog' 지시문은 서버 에러 로그의 저장 위치를 지정한다. 이 로그 파일은 서버 문제 해결에 필요한 중요한 정보를 포함한다.

CustomLog "/프로젝트/위치/logs/apache2-access_log.log" common
'CustomLog' 지시문은 서버 액세스 로그의 저장 위치를 지정한다. 이 로그는 사용자의 요청, 요청에 대한 서버의 응답, 요청의 일시 등 서버 액세스에 관한 정보를 기록한다.

RewriteEngine On
'RewriteEngine On' 지시문은 URL 재작성 엔진을 활성화한다. 이는 웹사이트의 URL 구조를 변경하는데 사용된다.

RewriteRule "^/$" "https://my.com/" [R]
'RewriteRule' 지시문은 특정 URL 패턴에 대한 재작성 규칙을 정의한다. 여기서는 모든 요청을 'https://my.com/'으로 리다이렉트한다.

JkMount / 프로젝트명*
'JkMount' 지시문은 특정 패턴의 URL을 특정 프로젝트에 매핑한다.


이 설정은 가상 호스트의 끝을 나타내는 </VirtualHost>로 종료된다. 이 지시문을 통해 아파치는 이 가상 호스트에 대한 설정이 끝났음을 알 수 있다.

 


문제 해결

 

 

문제를 발견했던 부분은 'RewriteEngine On' 및 'RewriteRule'이었다. MY2.com이라는 도메인은 AWS의 ROUTE 53과 연결된 ALB를 통해 A-OLD 서버로 향하고있었는데, A-OLD 서버의 아파치 설정에서 'RewriteRule'을 바꾸지 않았기 때문에, 기존에 매핑된 MY.com으로 리다이렉트 되는것이였다. 

이를 해결하기 위해, 아파치 설정에서 해당 도메인의 'RewriteRule'을 업데이트 했다. 이렇게 하면, 원하는 도메인으로의 올바른 리다이렉션을 보장할 수 있다!