생각을 개발하자, 박진형

[node.js] 프로젝트 - 고정 IP, 네임서버 변경, 도메인 연결, 프록시 서버 본문

Javascript/node.js

[node.js] 프로젝트 - 고정 IP, 네임서버 변경, 도메인 연결, 프록시 서버

imjinbro imjinbro 2017.08.01 12:46
[어플리케이션 고정 IP 발급, 네임서버 도메인 매칭]
1) instance management page > Elastic IPs 발급 
2) 발급받은 고정 IP 선택 > Actions > Associate address > 인스턴스와 연결
3) 네임서버 설정 : 구매한 도메인이 고정 IP(어플리케이션 컴퓨터, 서비스)를 가리키게 만들기
=> AWS에서 도메인을 구매해서 바로 Route53 사용해도되고, 외부 업체에서 도메인 구매하고 외부 업체 네임서버를 사용하면됨
=> 닷홈에서 도메인을 사고, 도메인 네임 서버를 AWS 네임서버로 변경하기

4) Route53 > DNS management > create Hosted zones > 도메인 네임 입력 후 create 
=> Type NS 4개 : 네임서버 주소, 콘솔에서 ping 네임서버주소 를 입력하면 네임서버의 IP 주소를 리턴받을 수 있음
=> 닷홈 네임서버 관리자로 가서 네임서버 주소 + IP 입력

6) 이제부터 AWS Route53에서 관리


[도메인 연결 + nginx + express]
1) Nginx 설치 : 프록시 서버, 클라이언트가 직접적으로 WAS(express)에 접근하지않고 프록시 서버에 요청 -> WAS에 request
=> Apache가 쓰레드 기반으로 처리를 한다면, Nginx는 비동기 이벤트 방식으로 요청을 처리
=> 프록시 서버란? 클라이언트가 자신(nginx)을 통해서 다른 네트워크 서비스(express)에 간접적으로 접속할 수 있게 해주는 컴퓨터 or 응용프로그램
                            서버(WAS를 뜻함)와 클라이언트 사이에 중계기로서 통신을 수행하는 기능을 가리켜 프록시, 중계 기능 하는 것을 프록시 서버라 함
                            캐시를 이용하여 프록시 서버에 요청된 내용을 저장 : 캐시 안에 있는 정보 요구하는 요청에 대해 원격 서버에 요청하지않고 그대로 전송해줌

=> 다운로드 관련 URL : http://nginx.org/en/linux_packages.html (각자의 OS에 맞게 설치) 
    => RHEL / Centos의 경우 repo를 추가해줘야함 : /etc/yum.repos.d/nginx.repo

=> 설치 후 서비스 시작하기 : systemctl start nginx / systemctl enable nginx
=> nginx 설정 파일 : /etc/nginx/conf.d/default.conf (디렉토리 /etc/nginx)
=> 사용자 디렉토리 : /usr/share/nginx/html
=> 로그 디렉토리 : /var/log/nginx
=> 설치 확인 

2) aws 인스턴스 80 포트 열어주기 : Security Groups > 인스턴스 그룹 선택 > Inbound > 80 포트 추가

3) Route53 > Hosted Zone(이전 스텝에서 등록한 네임서버 목록 있는 호스트존) > Create Record Set > A
=> A 레코드 : IP와 도메인 연결해줌

4) Route53 > Hosted Zone(이전 스텝에서 등록한 네임서버 목록 있는 호스트존) > Create Record Set > CName
=> 앞서 생성한 A 레코드로 IP와 도메인주소(politics-watch.com)은 연결됨
=> www.politics-watch 로 연결되게하기위해 서브도메인 설정을 해줌
=> CName : 도메인주소와 서브도메인주소 간 연결, www.politics-watch.com으로 연결하면 politics-watch로 연결됨

5) express 프록시 설정(nginx) : /etc/nginx/conf.d/default.conf
- 아래 코드 추가
1
2
3
4
5
6
7
8
9
10
11
server {
    location / {
        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; 
        proxy_set_header X-NginX-Proxy true; 
 
        proxy_pass http://127.0.0.1:3000/;
        proxy_redirect off;
    }
}
cs
=> 에러가 발생하면 로그부터 확인(/var/log/nginx) : (13: permission denied)이 뜨면 아래와 같이 해결
    => SELinux 문제라함 : 구글링
    => SELinux 로그 확인 : cat /var/log/audit/audit.log | grep nginx | grep denied
(1) setsebool -P httpd_can_network_connect 1
(2) service nginx restart 

6) 테스트를 위해 열어두었던 3000번 포트 닫기 : 외부로부터 3000번 접근 막기
=> 유저가 www.politics-watch.com 으로 접속 > nginx(80포트) - request - express server(3000번 포트)
    => pm2로 계속해서 돌아가도록 설정할 것 : 다음 포스팅 참조(지금은 접속됨~~~)

=> 내부적으로만 연결 


7) 연결해보기