[AWS, Linux, Nginx] How - Nginx 적용 및 도메인 설정.

하쮸·2025년 12월 2일

Error, Why, What, How

목록 보기
57/63

1. Nginx.

  • localhost 환경에서는 8080포트를 사용했지만 실제 웹 포트는 80번임.
    • 이를 개선해보고자 Nginx를 도입.
sudo apt install nginx
  • linux 환경에서 위 명령어를 통해 Nginx를 설치.

  • 위 화면이 나오면 Tab키를 눌러 Ok클릭하면 됨.
cd /etc/nginx/sites-available
  • 위 명령어로 디렉토리 이동.
    • Nginx의 설정 파일이 위치한 곳임.
    • ls명령어를 입력해 보면 default라는 기본 설정 파일만 존재함.
sudo nano α
  • nano: 리눅스 터미널에서 사용하는 가장 쉬운 텍스트 편집기.
  • α로 된 파일이 존재하면 해당 파일을 열고 존재하지 않는다면 빈 파일을 생성함.
server {
        listen 80;
        server_name localhost;

        location / {
                proxy_pass http://localhost:8080;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
        }
}
  • listen 80;: Nginx를 80번 포트(HTTP 기본 포트)에서 대기하도록 설정.
  • server_name: 접속할 도메인 이름을 설정.
    • 도메인이 없을 경우 localhost 입력.
  • location /: 모든 경로(/)로 들어오는 요청을 어떻게 처리할지 정의.
    • 위치 및 프록시 설정.
      • proxy_pass http://localhost:8080;: 80번 포트로 들어온 모든 요청을 현재 서버의 8080번 포트로 그대로 전달함.
    • 헤더 정보 전달.
      • proxy_set_header X-Real-IP $remote_addr;: 실제 요청을 보낸 클라이언트의 IP 주소를 X-Real-IP라는 이름의 헤더에 담아 전달.
        • $remote_addr = 접속한 사용자 IP.
      • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: 거쳐온 프록시 서버들의 IP 경로를 담음.
        • 즉, 프록시 체인 전체 IP 기록.
      • proxy_set_header Host $http_host;: 클라이언트가 원래 요청했던 Host 이름(도메인)을 유지하여 전달.
  • ctrl + o를 누른 다음 enter를 눌러 파일을 저장하고 ctrl + x 눌러 nano 편집기를 빠져나옴.
    • 그럼 α라는 설정 파일이 만들어짐.
  • 이렇게 생성한 α라는 설정 파일을 현재 배포 중인 jar파일의 설정 파일로 쓰일 수 있도록 해야됨.

cd /etc/nginx/sites-enabled
  • 위 명령어를 통해 sites-enabled 디렉토리로 이동.
  • Nginx의 디렉토리 중 sites-available과 sites-enabled가 있는데 둘의 차이는 아래와 같음.
    • sites-available
      • 사용 가능한 설정 파일 저장소.
      • 설정 파일 원본이 있음.
      • Nginx에 반영 X
    • sites-enabled
      • 실제 활성화된 설정 파일 연결부.
      • 원본을 가리키는 심볼릭 링크. (윈도우로 치면 바로가기)
        • 심볼릭 링크란? 파일 시스템에서 특정 파일이나 디렉터리를 가리키는 특별한 파일. (즉 원본 파일이 있는 주소 정보를 갖고 있다고 보면 됨.)
          • 링크 파일을 열어서 내용을 수정하면 실제 수정되는 것은 원본 파일임.
            단, 링크 파일을 삭제해도 원본 파일은 멀쩡함.
          • 원본 파일을 삭제하면 링크 파일은 연결 대상이 없어져서 작동하지 않음.
      • 여기에 링크 파일이 있어야 실제 서비스에 반영됨.
sudo rm default
  • 이제 위 명령어를 통해 기존에 존재하던 default 설정 파일을 삭제.
sudo ln -s /etc/nginx/sites-available/α
  • ln: link (링크)
  • -s: Soft link (= 위에서 언급한 심볼릭 링크)
  • 즉, /etc/nginx/sites-available/α 경로에 있는 α라는 설정 파일을 /etc/nginx/sites-enabled/α으로 심볼릭 링크함.
sudo systemctl restart nginx
  • systemctl: 리눅스에서 프로세스를 관리하는 중앙 컨트롤러(시스템 관리 도구)라 생각하면됨.

  • 위 명령어를 통해 Nginx를 다시 시작해줌으로써 설정 파일을 적용시킬 수 있음.

  • 이를 통해 :8080(포트 8080)을 기본 웹 포트인 80으로 변경할 수 있음.

    • 웹 포트는 기본적으로 80이므로 생략 또한 가능.

2. 도메인 설정.

  • 가비아에서 도메인을 구매했음.
    • 나름대로 저렴한 @.site로 구매했고 그 과정은 레퍼런스가 워낙 많으니 생략.
  • 구매한 도메인을 클라우드 서비스에서 제공해주는 IP와 연결해야됨.

  • AWS 도메인 및 DNS -> DNS 영역 생성.

  • 도메인 이름 칸에 가비아에서 구매한 도메인을 적고 DNS 영역 생성 클릭.

  • 하단에 네임(이름) 서버의 경우 가비아에서 구매한 도메인의 네임 서버에 사용할 값들.

  • 할당 -> 할당 추가


  • 리소스의 경우 이전에 AWS 인스턴스를 통해 만든 고정 IP를 사용하였음.

  • DNS 레코드를 확인해 보면 도메인과 고정IP가 묶여 있는 것을 확인해 볼 수 있음.

  • 이제 가비아로 가서

  • my 가비아 -> 서비스 관리 -> 구매한 도메인 관리 -> 네임 서버 -> 설정 버튼을 눌러서
    AWS 도메인 네임 서버 4가지를 등록해주면 됨.

  • 도메인을 구매했고 등록&연결을 해줬으니 마지막으로 Nginx 설정 파일도 변경해주면 됨.
server {
        listen 80;
        // ==-- 삭제 server_name localhost; 삭제 --== //
        server_name α.site;

        location / {
                proxy_pass http://localhost:8080;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
        }
}
  • 기존 값을 삭제하고 server_name 구매한 도메인;입력해주면 됨.

2-1. 문제 해결.

  • 크롬 주소창에 α.site를 입력하니 DNS_PROBE_FINISHED_NXDOMAIN가 뜸.
    • 접속하려고 하는 URL을 도메인 시스템 내에서 찾을 수 없을 때 발생함.

  • 가장 먼저 했던게 Nginx 재시작.
    • 이상 없음.
  • sudo nginx -t 명령어를 통해 설정파일 검사.
    • 설정 파일에 문법적인 오류가 없는지 검사하는 것.
    • 이상 없음.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
  • 가비아, AWS에 오타가 있나 살펴봤지만 이상 없음.

  • cmd 창을 열어 nslookup α.site 입력.

    • DNS 설정을 조회하는 명령어.
      • 연결이 잘 되었다면 α.site에 연결된 ip가 떠야됨.
    • 하지만 찾을 수 없다는 오류 메시지가 떴음.

  • 가비아 도메인 관리 페이지에서 네임 서버 우측 하단에 보면 DNS 정보가 있는 것을 확인.
    • 도메인 연결 설정 클릭.

  • 도메인 옆 체크박스 클릭하고 DNS 설정 클릭.

  • 위처럼 레코드 추가.

    • 해당 도메인과 연결되어 있는 AWS 고정 IP 입력하였음.
    • 호스트에 입력한 @란? -> 루트(root) 도메인임. 즉, α.site에 접속시 해당 IP로 연결해줌.
      • www입력시 www.α.site와 연결됨.
  • 타입의 경우 가비아에서 도움말을 제공해줌.

  • 위 처럼 DNS 설정에서 레코드를 추가해주니 정상적으로 접속되었음.

  • cmd 창을 열어서 nslookup α.site를 입력하니 연결된 고정IP도 잘 출력 되는 것을 확인.

3. 참고.

profile
Every cloud has a silver lining.

0개의 댓글