AWS

[AWS] 서버 구축 EC2(WEB, WAS) - Nginx, Tomcat 연동

blackzapato 2024. 10. 8. 09:23
반응형
서버 구축 순서

 

  1. [AWS] 서버 구축 EC2(WEB) - Nginx 설치
  2. [AWS] 서버 구축 EC2(WAS) - Java, Tomcat 설치
  3. 현재글

 

 

연동 전 살펴봐야 할 것

 

# Tomcat 상태 확인
ps -ef | grep tomcat

# Nginx 상태 확인
sudo systemctl status nginx

 

 

WEB, WAS가 위치한 EC2에서 위의 명령어로 상태를 체크한다.

모두 정상 실행되는 경우 연동을 진행한다.

 

Tomcat 기본 페이지만을 띄워주게 할 경우 Tomcat에서의 설정은 따로 필요 없다.

이 글에서는 Tomcat을 따로 설정하진 않고, Nginx만 설정하도록 한다.

 

Nginx 설정을 하기 전 설정 파일 목록을 살펴보자.
# 설치한 Nginx의 설정 파일 목록
ll /etc/nginx

 

그럼 여러 가지 파일들이 보이는데

우리가 주목해야 할 파일들은 아래 4가지다.

  • conf.d
  • default.d
  • nginx.conf
  • nginx.conf.default

 

이 중, nginx.conf 파일은 Nginx의 핵심 파일인데  nginx.conf 파일 안에

include /etc/nginx/default.d/*.conf;

 

위처럼 지정되어 있어 분명 쓰임새가 있어 보이긴 하는데, 막상 default.d 디렉터리를 열어보면 아무것도 없다.

사실, default.d과 conf.default는 개발자의 목적에 따라 커스텀이 가능한 파일이다. (default가 붙은 다른 파일 전부 해당)

 

왜 이렇게 만들어 놓았을까?
ex) 서버 설정이 길어져서 nginx.conf가 너무 시인성이 떨어진다면 default 파일이나 디렉터리에 설정을 분할해서 유연성 있게 관리할 수도 있다.

 

 

결론은 default가 붙은 파일들은 아무 필요가 없다.

괜히, Nginx를 처음 다뤄보는 입문자가 더 헷갈리게 해 놓은 것 같다. (심지어 네이밍도 default...)

 

 

추천할 만한 Nginx 설정 관리 2가지

 

1. 다수의 WAS 연동을 위한 symlink를 활용하는 설정 (nginx.conf 안에 include해서 사용)

  • nginx.conf
    Nginx 주 설정 파일
  • conf.d
    nginx.conf가 너무 길어져 분할해서 관리하고 싶을 경우 사용
  • sites-available
    가용할 수 있는 was 설정을 모아두는 디렉터리
  • sites-enabled
    available에서 모아둔 설정들을 symlink로 enabled 폴더에 걸어두어 Nginx에서 서비스하는 디렉터리

2. 소수의 WAS 연동

  • nginx.conf
    Nginx 주 설정 파일
  • conf.d
    Nginx에서 서비스할 was 연동 설정들을 모아두는 디렉터리

 

 

나는 사내 Test용 서버이기 때문에 2번째 설정으로 택해 연동을 진행하려 한다.

 

# conf.d 디렉토리 안에 새로운 conf 파일을 만들어 준다.
sudo vi /etc/nginx/conf.d/tomcat.conf

 

 

Nginx 연동 설정
server {
        listen 80;
        server_name localhost;

        location / {
                proxy_pass http://<EC2 Private ip>:<Tomcat 포트>;
                # ex) proxy_pass http://10.0.1.187:8080/;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

 

위 내용을 붙여 넣기 후

ESC > ':qw' > 엔터로 빠져나오자

 

# Nginx 재기동 명령어
sudo systemctl restart nginx

 

 

이후 nginx에 접속하듯이 접속했는데 tomcat 기본 페이지가 나오면 모든 작업이 완료된다.

 

기타 옵션
  location/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version  1.1;
    proxy_cache_bypass  $http_upgrade;

    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        "upgrade";
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
  }

 

  • proxy_http_version 1.1
    프록시를 위한 HTTP 프로토콜 버전을 정의합니다. 기본적으로 1.0으로 설정됩니다. 웹 소켓 및 활성 연결을 유지하려면 버전 1.1을 사용해야 합니다.
  • proxy_cache_bypass $http_upgrade
    캐시에서 응답을 가져오지 않을 조건을 설정합니다.
  • Upgrade $http_upgrade 및 Connection "upgrade"
    응용프로그램이 웹 소켓을 사용하는 경우 헤더 필드가 필요합니다.
  • Host $host
    다음 우선순위의 $host 변수에는 요청 라인의 호스트 이름 또는 호스트 요청 헤더 필드의 호스트 이름 또는 요청과 일치하는 서버 이름이 포함됩니다.
  • X-Real-IP $remote_addr
    실제 방문자 원격 IP 주소를 프록시 서버로 전달합니다.
  • X-Forwarded-For $proxy_add_x_forwarded_for
    클라이언트가 프록시 처리한 모든 서버의 IP 주소를 포함하는 목록입니다.
  • X-Forwarded-Proto $scheme
    HTTPS 서버 블록 내에서 사용할 경우 프록시 서버의 각 HTTP 응답이 HTTPS로 다시 작성됩니다.
  • X-Forwarded-Host $host
    클라이언트가 요청한 원래 호스트를 정의합니다.
  • X-Forwarded-Port $server_port
    클라이언트가 요청한 원래 포트를 정의합니다

 

반응형