- EC2 인스턴스 SSH 접속하기
- 리눅스에 nginx, php, mysql 설치하기
- nginx와 php 연동하기
- 도메인 구입하여 적용하기
- 서브 도메인 적용하기
- 리다이렉션 적용하기
- HTTPS 도메인과 서브도메인에 적용하기
- 오류 이야기
0. EC2 인스턴스 SSH 접속하기
1. 리눅스에 nginx, php, mysql 설치하기
sudo apt update
* nginx 설치
sudo apt install nginx
* 설치 잘 되었는지 확인 하기
nginx -v
* mysql 설치
sudo apt install mysql-server
** mysql 보안설정해주기
sudo mysql_secure_installation
나의 경우는 보안단계 low, 그리고 비밀번호를 설정해주고
이 문항 제외 모두 y를 입력해준다
** mysql에 접속하기
sudo mysql -u root -p
* php 설치하기
sudo apt install php-fpm php-mysql
** 인스턴스의 ip주소로 접속 하면 다음과 같은 창이 뜬다 !
2. nginx와 php 연동하기
📢 nginx가 뭐야? > https://blog.naver.com/hj_kim97/222473516133
# nginx의 기본 경로 > var/www/html로 이동
phpinfo.php 만들기
i를 입력해 insert모드로 변경해주고 다음 코드를 작성해준다. ESC + :wq! 명령어를 입력하면 저장된다.
# nginx의 기본 설정 경로 > etc/nginx/sites-available로 이동
sudo vi default
위의 명령어로 default 파일을 열어준다.
php부분 주석 풀어주고 설치한 php 버전에 맞게 변경해준다. (나와 같은 경우는 7.2 버전으로 설치됨)
# /etc/nginx 로 이동
sudo vi nginx.conf
* nginx.conf 파일은 nginx의 설정이 들어가는 핵심 파일이다.
nginx의 server_name 항목에 도메인을 여러개 추가할 것이기 때문에 주석을 해제해준것이다.
* server_names_hash_bucket_size : 호스트의 도메인 이름에 대한 공간을 설정
※유의점: 값이 낮거나 많은 호스트 도메인 등록, 도메인 이름이 길 경우 bucket 공간이 모자라 에러 발생한다.
# nginx의 설정 파일을 변경하면 반드시 테스트 후 restart를 해주어야한다!
- 테스트 명령어
sudo nginx -t
- restart 명령어
sudo service nginx restart
* 주소창에 ip주소/phpinfo.php를 입력하면 php창이 뜬다!
3. 도메인 구입하여 적용하기
((ec2 인스턴스의 ip와 도메인을 연결해보쟈 ~~))
도메인 구매처 : 가비아, 후이즈
나와 같은 경우에는 가비아에서 구매해놓은 도메인이 있어서, DNS 레코드 수정만 해주었다.
도메인을 연결하려면 서버 설정 파일에서 도메인 이름을 추가해주어야한다.
# nginx 설정 파일로 이동
server_name에 연결할 url을 입력해준다.
# 테스트 + restart 해준다.
# 도메인으로 접속
룰루
4. 서브 도메인 적용하기
dev 개발 서버
prob 실제 배포 서버
** 값/위치에 도메인 이름을 써주는데 뒤에 . 을 꼭 붙어야함!!! 그래야 연결됨
각각 다른 페이지를 띄어야하기 때문에 nginx 기본 경로에 dev와 prod폴더를 만들어주자.
dev 폴더 로 이동해 index.html을 만들어준다. 내용은 아래와 같이
똑같이 prod 폴더에서도 index.html을 만들어준다.
연결을 위해 nginx 설정 파일로 이동해 서버 블록을 만들어 주자
nginx 테스트 + restart
# 서브도메인 접속 완료!!!
5. 리다이렉션 적용하기
다시 서버 설정 파일로 들어가쟈
똑같이 리다이렉션용 서버 블록 하나만 추가해주면 됨~
nginx 테스트 + 재시작
ip주소로 접속하면 도메인으로 바로 접속된다.
리다이렉션도 성공 !!!
🔥🔥 challenge 과제
<< HTTPS 도메인과 서브도메인에 적용하기 >>
추천 검색어 : ec2 ubuntu 20.04 Let's Encrypt
Let's Encrypt를 통해 인증서를 구입하고 발급받은 인증서를 설치해서 서버쪽 세팅을 하여 ssl을 적용하는 것이라구 한다. 허허
참고 > https://velog.io/@oyeon/HTTPS-%EC%A0%81%EC%9A%A9-Lets-Encrypt
* HTTPS를 사용할 때 브라우저는 웹 서버의 신원을 확인할 수 있는 디지털 인증서를 필요로 한다. 웹 서버는 이러한 인증서를 CA(Certificate authority)라고 하는 신뢰 가능한 인증 기관으로부터 획득한다.
Let's Encrypt는 이러한 CA들 중에 하나로, 사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관이다. Certbot은 Let's Encrypt에서 인증서를 가져와서 웹 서버에 배치하는 클라이언트이다.
* SSL(Secure Socket Layer) 프로토콜은 웹서버와 브라우저 사이의 보안을 위한 것으로, 서버와 클라이언트의 인증을 하는데 사용된다. SSL을 적용하면 클라이언트와 서버간 공유하는 암호화키를 가지고 암호화된 데이터가 송수신 된다.
SSL과 인증서 구조 이해하기
# Let's Encrypt로 HTTPS 적용
저장소를 최신으로 업그레이드 시키고, certbot을 위한 저장소를 추가하였다.
cerbot의 nginx 패키지 설치
sudo apt install python3-certbot-nginx
SSL 인증서를 받아보자
-d 옵션으로 도메인을 지정해서 Nginx 플러그인을 통해 인증서를 획득한다.
SSL 인증서를 획득하였다.
그리구 콘솔창에 적힌 테스트 주소로 테스트를 해보았는데 아래와 같은 오류가 떴다.
인바운드 규칙에서 HTTPS을 추가해주면 된다.
그리고 다시 명령어를 입력해주고
~$ sudo certbot --nginx -d zeroexn.shop -d www.zeroexn.shop
HTTPS 테스트 해보면 성공했다.
쨘
# 서브 도메인 HTTPS 적용
서브도메인에도 똑같이 적용해보쟈ㅏ
# Redirection에 HTTPS 적용하기
서버 설정 파일에서 리다이렉션용 서버 블록의 리턴값을 https!로 바꿔주자
모두 성공 !!!!♥
🤯 오류 이야기
# 1
[ 문제 원인 ]
HTTPS을 적용하기 위해 SSL 인증서를 획득하고 SSL Labs Server Test로 이동해서 도메인을 입력해준 뒤 테스트를 진행하였는데 다음과 같은 오류가 발생하였다.
[ 해결 방안 ]
이는 방화벽과 관련된 문제로, AWS EC2 인스턴스의 보안 그룹에 SSL이 사용되는 443 포트 번호를 열어주지 않았기 때문이다.
> AWS EC2 인스턴스의 인바운드 규칙에서 HTTPS을 추가해주면 된다.
[ 참고 자료 ]
# 2
[ 문제 원인 ]
리다이렉션에 HTTPS가 적용이 안된다 ㅠ
[ 해결 방안 ]
1: HTTP 연결을 HTTPS로 리다이렉트 하지 않음
2: HTTP 연결을 HTTPS로 리다이렉트 함!
SSL 인증서를 발급받을 때 다음 문항에 2번으로 답변해야한다. (제대로 안읽어보고 답변했더니,,, 이제 제대로 읽고 답변해야겠다,,,)
[ 참고 자료 ]
실습 끝 .. . 언제 다하나 막막했지만 .. 다 하니까 넘 뿌듯하다 ^_____^
'Server > UMC 2기 Server' 카테고리의 다른 글
[UMC] Server 4주차 *실습* AWS RDS 구축하기 / DataGrip로 RDS 에 접속하기 (0) | 2022.04.06 |
---|---|
[UMC] Server 4주차 RDBMS / 데이터모델링 / 인스타그램 설계 예시 (0) | 2022.04.05 |
[UMC] Server 3주차 서브도메인 / 리다이렉션 / HTTPS (0) | 2022.03.28 |
[UMC] Server 2주차 *실습* 포트포워딩 실습 / AWS 실습 (0) | 2022.03.24 |
[UMC] Server 2주차 포트포워딩/AWS (0) | 2022.03.21 |