경량 웹 서버
HTTP결과를 주는 특정 서버
서비스의 서버를 하나 띄우려고 한다.
서버 안에 서버를 띄우는게 말이 될까?
컨테이너 개념을 이용하면 가능!
하나의 컴퓨터 안에 논리적인 구획인 컨테이너를 만들고
어플리케이션을 작동시키기 위해 필요한 라이브러리를 하나로 모아서
마치 별도의 서버인 것처럼 사용할 수 있게 만드는 것을 컨테이너라고 한다.
따로 떨어진 작업공간을 생성하고 있다.라는 의미
파이썬과 우분투로 환결설정을 마쳐준 후
터미널 이용
컨테이너가 성공적으로 작성되었다.
실행을 시켜보자
일본어로 설정되어있는 건 내 컴퓨터 설정 때문이므로 신경쓰지 않기 !
터미널을 이용해서 특정 프로그램을 설치할 예정인데
현재 OS내에서는 프로그램을 설치하는 명령어를 터미널 상에서 제공하고 있다.
그게 바로 apt-get 명령어
-> 프로그램을 설치하기 전에 패키지 파일들을 최신화하는 작업
apt-get update
설치 전에 먼저 update를 시켜주고
apt-get install nginx
nginx를 설치한다.
이렇게 하면 인터넷에서 다운받지 않고 프로그램에서 알아서 다운 받도록 할 수 있다.
nginx -v
잘 설치됐는지 확인하는 명령어
service nginx start
nginx 웹 서버 구동하는 명렁어
콘테나로 들어가면 port forwarding 작성이 있는데
먼저 Port란,
본래 의미는 "항구"라는 뜻으로
데이터를 주고받는 프로세스를 식별하기 위해
호스트 내부적으로 프로세스가 할당하는 고유한 값이다.
특정 서비스가 외부와 통신을 하려고 할 때,
각 서비스가 외부에 자신을 노출시켜서 통신해야 한다.
즉, 어디에서 데이터가 받을 것인지를 정해야 하는데
이 때 쓰이는 것이 Port Number(포트 번호)
Nginx도 현재 80 포트를 향해서 열려있다.
그런데, 지금 사용하고 있는 것은 개인 서버가 아니라
구름 IDE 내에서 서버를 제공받고 있는 상황.
구름 IDE를 사용하는 수많은 사람들이 전부 80포트를 사용한다고 하면,
어마어마한 충돌이 발생할 수 있다.
이와 같은 클라우드 서비스에서는 한정된 숫자의 IP와 포트를 가지고 있다.
따라서, 이런 경우에는 NAT라는 통신 기술을 사용해서 포트 번호와 내부 IP를 매핑해 공인 IP가 하나만 있어도 내부IP로 매핑해서 하나의 웹 서버로 접속할 수 있게 만들 수 있다.
간단하게 말하면
내부적으로 포트를 구름 IDE에서 알아서 관리해줄 것이라는 뜻.
자동으로 포트를 쓸 수 있도록 연결 해준다는 의미로
포트 포워딩(Port-Forwarding)이라고 한다.
Nginx가 구동되어 있다는 것은
Nginx가 초경량 웹 HTTP 서버 이므로
HTTP Port인 기본적인 80Port가 외부로 열려 있는데
외부로 열려있는 Port를 goorm IDE 내에서 다른 사람들과 소통하기 위해서는
포트 포워딩 이라는 기술을 사용해야 한다.
내부 Port를 80 그리고 IP를 지정하고 외부로 열어줬다.
지금 goorm IDE가 53254라는 Port로 열어줬다.
해당 주소에 접속하면 외부와 통신 될거다. 라는 것
카피해서 들어가면 nginx를 띄울 수 있다.
-> http로 띄운 것
HTTPS로 한 번 띄워 보자.
사설 인증서 이용해 보자
사설 인증서를 만들기 위한
SSL 폴더 생성
mkdir ssl
인증서를 만들 수 있는 방법은
비대칭키를 이용해서 만들 수 있다.
openssl이라는 프로그램은 비대칭키와 인증서를 만들 수 있는 프로그램이다.
openssl req -new -newkey rsa:2048 -nodes -keyout sparta-ssl.jey -out sparta-ssl.csr
인증요청서란
인증서를 발급하기 전에 이걸 어떻게 만들어달라. 라는 문서라고 생각하면 된다.
개인키인 sparta-ssl.key
인증 요청서인 sparta-ssl.csr 생성.
생성된 개인키와 인증 요청서를 이용해서 인증서를 만들어 보자.
openssl x509 -req -days 365 -in sparta-ssl.csr -signkey sparta-ssl.key -out sparta-ssl.crt
명령어를 입력하고 나면
crt라는 파일이 보이는데 이게 바로 우리의 사설 인증서
Nginx에 인증서를 적용해보자
vi sparta.conf
ssl이 on으로 되어있고
443이라는 Port 사용 -> 통상적으로 HTTPS는 443 Port를 사용하기 때문
입력 받은 서버 내용을 localhost
그 밑줄은 마음대로 변경 가능
ssl_certificate는 해당 주소에 있는 ssl.crt 파일을 사용할 거다.
certificate_key는 그 인증서임을 이제 통신했을 때 Private Key로 해당 인증서로 날아온 공개키로 암호화 된 것을 복호화 해주기 위해서 비밀키 또한 설정을 해야 한다.
-> Nginx에다가.
따라서 ssl.key를 설정 해 준 것을 볼 수 있다.
받아들여주는 ssl 프로토콜 두 개.
service nginx restart
Nginx 재시작
만약 에러가 난다면
nginx -t
라는 명령어로 어떤 부분이 오류가 있는지 알려준다.
이걸 통해서 원인 확인 가능
이제 443Port가 열려서 HTTPS가 설정이 됨.
이 것을 외부에서 찌르기 위해서 다시 한 번 포트포워딩을 해줘야 한다.
HTTP 요청이 HTTPS로 통신이 되었다.
라는 에러 메시지 출력
왜 이런 에러가 떴는가?
주소창에 아무것도 붙이지 않은 상태로 입력했기 때문
-> 인터넷은 알아서 HTTP겠구나.. 하면서 생각을 한다.
크롬 브라우저가 애초에 HTTP통신을 위해서 만들어졌기 때문에
HTTPS를 입력해줘야 한다.
이런 에러가 뜰텐데
사설 인증서이기 때문이다.
즉, CA로부터 공인 인증된 인증서가 아니기 때문에
브라우저가 '위험한 사이트 같은데 괜찮겠어?'라고 입력을 내려주는 것.
인증서를 보면 적용한 값을 확인할 수 있다.