10월, 2019의 게시물 표시

2019.10.30 EC2에 클론서버 만들어보려다가 HSTS 때문에 삽질한 이야기

일단 현재 실섭을 Clone해서 똑같은 환경으로 만들어 보는 것을 목표로 하고 있다. 웹서버, wsgi를 제외한 다른 사항들은 거의 다 마무리가 되었는데, 웹서버(nginx)를 설정하다가 뻘짓을 했다. 일단 도메인, 서버네임 설정을 하나도 안 한 상태로 add_head 'Strict-Transport-Security' 설정을 했다. 기간은 1년으로... 진짜 nginx의 기본 옵션에 말 그대로 저거 하나만 추가한 셈. 그렇게 하니 HSTS 때문에 내 PC, 정확히는 내 PC의 브라우저에서 접속이 계속해서 https로만 강제되고 접속이 거부되었다. 처음에는 nginx의 설치문제 혹은 service를 잘못 등록한 문제인 줄 알고 별의 별 짓을 다 해보았는데 안되어서 절망했다 ㅜㅜ. nginx만 한 수십번 지웠다 재설치 한듯..ㅎㅎ (덕분에 유용한 명령어도 알아가지만...) 어쨌든 대체 nginx가 왜 장난 치는지 이해가 안 되던 중에 인스턴스에서 curl 루프백 하니까 페이지가 뜬다. 여기서 헐! 싶었다. 여태까진 nginx가 문제라 생각했는데 nginx는 잘 돌아가고 있었다. 뭔가 이상하다 싶어서 parallels를 키고 IE를 통해 접속하니까 잘 됨! 와이파이 끄고 폰으로 들어가도 잘 보인다... 허걱! 사실 이 문제가 지속될 때 시작할 때 저 망할 헤더를 추가한 뒤에 갑자기 접속이 안되길래 "아 이거 htst문제 아니야..?" 라고 짐작하고 넘어갔는데 이 후에는 nginx의 문제라고 시야가 점차 좁혀졌다. 그 순간 다시 HTST를 의심하기 시작했고 역시나 내 PC에서 접속하니 HTTP가 아닌 HTTPS로 접속이 강제되는 것을 볼 수 있었다 ㅠㅠ 그래서 크롬에서 htst 설정 된 사이트를 해제하려고 가서 query domain에 IP주소, nginx 설정의 서버네임등등을 계속 넣어봤지만 모두 not found. 중간에 내가 서버이름을 바꾸었다가 다시 되돌려놨다가 등등 어지럽힌 기억도 ...

2019.10.23 Dockerfile로 우분투에 Python, MySQL, Node 설정하기.

# build # ubuntu, flask, mysql FROM ubuntu:16.04 # prevent interactive alert message asking root account password from mysql ENV DEBIAN_FRONTEND noninteractive RUN apt-get update -y RUN apt-get install -y python python-pip python-dev build-essential RUN apt-get install -y mysql-server RUN apt-get install -y curl # Install node RUN curl --silent --location https://deb.nodesource.com/setup_10.x | bash - RUN apt-get install --yes nodejs RUN apt-get install --yes build-essential WORKDIR /app ADD . /app RUN pip install -r requirements.txt # This needs to be done to start mysql server # service mysql start ENTRYPOINT ["chown -R mysql:mysql /var/lib/mysql /var/run/mysqld"] 설치 과정 중에 몇가지 문제가 있었다. 1. 우분투 18.04 버전에서 mysql 설치가 제대로 안 되던 점. FROM ubuntu:latest -> ubuntu:16.04로 변경하는 것으로 처리했다. (난 굳이 18버전을 쓸 일이 없기 때문에) 2. interactive shell에 값을 입력하면 뻗는 문제 두 번째 마주한 문제는 mysql 설치시 root password를 설정하라고 interactive shell이 뜨는데 여기에 값을 입력하면 이후 진행이 안된다. 그냥...

2019.10.22 AWS의 VPC 세팅

AWS의 VPC VPC란 독립 네트워크 그룹 같은 개념이다. VPC안에서 실제 사용할 네트워크망은 서브넷으로 더 잘게 쪼갤 수 있다. 서브넷 안에 EC2, RDS등 실제 리소스가 배치 된다. AWS를 기준으로 10.0.0.0 ~ 10.255.255.255 , 172.16.0.0 ~ 172.31.255.255 , 192.168.0.0 ~ 192.168.255.255 의 3개의 VPC 사설 아이피 대역이 있다. VPC간 통신을 원하면 VPC 피어링이라는 서비스를 사용할 수 있다. VPC 내부에서 인스턴스가 요청을 하면 VPC 라우터(라우트 테이블)가 받아서 목적지로 요청을 인도한다. 이 때 VPC에서 외부로 통하는 관문은 인터넷 게이트웨이이다. CIDR 블록은 아이피주소와 그 뒤에 붙는 넷마스크 숫자로 구성된다. 넷마스크 숫자는 해당 IP대역에서 가질 수 있는 최대 IP의 갯수를 결정한다. (2의 32승-넷마스크 숫자가 해당 IP 대역에서 가질 수 있는 최대 IP 갯수) (2) 설치단계 VPC는 DNS 해석기능과 DNS 호스트네임 이 모두 활성화 되어 있는데 DNS 해석기능은 [naver.com](<http://naver.com>) 을 211.12.31.56 과 같은 IP로 바꾸는 것. DNS 호스트네임은 VPC내부에서 생성되는 인스턴스에 퍼블릭 DNS 호스트네임을 할당해주는 기능. 라우트테이블은 VPC를 생성할 때 자동으로 하나 생성이 되며 VPC에서 subnet을 생성할 때 그 subnet과 매칭이 된다. ACL은 서브넷으로 들어오는 트래픽 제어, 보안그룹은 인스턴스의 트래픽을 제어한다. VPC를 생성하면 이에 따라 같이 생성되는 것들이 총 7가지 정도 된다. (보안그룹, ACL, Route table..등) 먼저 VPC는 마치 wrapper 같은 역할을 한다. 독립 네트워크 단위의 가장 겉에 있는 그룹이고, 실제로 인스턴스들은 VPC 내의 서브넷에 위치한다. 따라서 VPC 생성 후에 네트워크 그룹인 ...