2 Hours NginX Crash Course + Bonus Content (꼭 학습할것)
- 라운드로빈 방식
- 라운드로빈 방식과 Sticky 세션 설정 (ip_hash)
- Sticky 세션 적용완료 (새로고침 해도 변경없음)
## Proxy_pass 로 upstream 서비스 분기 설정 (적용 예정)
## Layer7 기능으로 설정
## Layer7 프록시이기 때문에 Context Path 로 분기 가능
- location /app1 추가
- proxy_pass http://app1backend/; 추가
- location /app2 추가
- proxy_pass http://app2backend/; 추가
- / 로 접속하면 라운드로빈 방식으로 순차적 접속 (서버 4대)
- /app1 로 접속하면 라운드로빈 방식으로 순차적 접속 (서버 2222, 3333 만 접속)
- /app2 로 접속하면 라운드로빈 방식으로 순차적 접속 (서버 4444, 5555 만 접속)
- admin 사이트를 외부에서 접속 불가하게 설정 (현재는 가능)
- 관리자 API를 공용인터넷에 노출하고 싶지 않을때.
- nginx.conf 파일 수정 (/admin 접속시 403 을 반환함)
: location /admin {
return 403;
}
- 여전히 내부망인 localhost:2222/admin 는 접속 가능
- localhost/admin 으로 접속 불가 (80포트는 /admin 페이지 차단함)
## 여기서부터는 Layer4 기능을 실습 (적용 필요) --> 보류할 것
- Layer4는 /app1 과 /app2 를 수행할 수 없어서 삭제함.
- Layer4 는 프록시팩스를 활용하여 백엔드에서 TCP 연결을 설정하고 IP를 매핑합니다.
- Layer4 기능은 http --> stream 으로 변경
- Layer4 에서는 location / 를 사용할 수 없다.
- 백엔드에서 HTTP를 언급할 수 없다.
- nginx -s reload 시 에러발생
- 라운드로빈이 적용 안됨
- 무작위로 선정이 됨
- Telnet 으로 접속 테스트
- telnet 127.0.0.1 80
: GET / 입력
- 5555 서비스에 접속
- 다시 접속할때마다 변경됨 (5555 --> 2222 --> 3333)
## 내 구성을 HTTP 계층 7구성으로 되돌린다. (이걸로 적용 필요)
- cp nginx.conf tcp.conf 백업
- cp http.conf nginx.conf 재원복
- Layer7 으로 라운드로빈 잘 작동됨
- 두 개의 규칙 포트 80 및 포트 443 을 추가
- 내 Public IP주소를 가리켜 도메인 생성
- 공개 주소로 대중에게 호스팅
- 도메인 및 HTTPS 활성화하고 인증서 및 TLS 1.3 을 활성화
## 구성 작업
1) 내 웹사이트의 공인IP 확인 (접속시 실패)
- 라우터 설정 필요
- 80, 443 포트 연동 설정
- 외부에서 퍼블릭IP 접속 성공
- 라운드로빈 잘됨
2) 공인 IP에 적용할 도메인 생성
- 공개 IP주소를 가리키는 무료서비스 (https://www.noip.com/)
- Create Hostname 클릭
- nginxtest.ddns.net 도메인 생성
- nginxtest.ddns.net 도메인 접속 성공
3) HTTPS 를 위해 인증서 구성
- letsencrypt 설치
- nginx -s stop
- nginx 에게 공개키를 알려줌
- 개인키도 서버가 본질적으로 트래픽을 해독하는 데 사용할 것임.
- 서버에서 독립형 인증서 생성
- sudo certbot certonly --standalone
- 암호 입력
- nginxtest.ddns.net 도메인 입력
- 공개 키와 인증서가 있는 전체 체인이 있고, (fullchain.pem)
- 개인키가 있음 (privkey.pem)
- 해당 서버의 vi nginx.conf 수정
- 기본값은 443이고 TLS를 활성화하기 원하므로 SSL을 추가함
listen 443 ssl;
ssl_certificate 에 해당 공개 키 전체를 복사 후, 저장
- 개인키 경로 복사
- ssl_certificate_key 경로 복사
- 이제 이 항목을 저장하면 공개키가 있고, 개인키가 있음
- nginx -s reload 시 권한 오류 발생
- sudo nginx 로 실행
- https://nginxtest.ddns.net 접속 성공
- TLS1.3 확인 방법 (https://www.cdn77.com/tls-test)
4) Nginx에 TLS 1.3 설정하기
- vi nginx.conf
ssl_protocols TLSv1.3; 추가
- 인증서 설치후 nginx reload 시 sudo 권한 필요
: sudo nginx -s reload
5) HTTP2 프로토콜 설정
- vi nginx.conf 수정
- listen 443 ssl http2; 추가
- http2 프로토콜 적용 성공
## 요약
- Nginx 는 매우 강력한 Layer7 기능을 지원
- Nginx 도 유료버전이 있음
- 기본인 TLS 1.2 및 HTTP 1.0 은 암호가 매우 약해서, 추가 설정이 필요함
## Client_header_timeout
## Client_body_timeout
## send_timeout
## Keepalive_timeout
## lingering_timeout
## 참고할 것
## proxy_connect_timeout
https://www.youtube.com/watch?v=hcw-NjOh8r0&t=0s
'NGINX' 카테고리의 다른 글
[학습] NGINX 상세구조 분석 (0) | 2021.05.21 |
---|---|
Nginx LoadBalancer - Ubuntu 20.04 (0) | 2021.05.21 |
[최종] Nginx Load Balancer (Nginx 로드밸런서) - (분기방법/꼭 학습할것!!!) (0) | 2021.05.20 |
NGINX + HTTPS 적용하기 (0) | 2021.04.27 |
Nginx 이해하기 (0) | 2021.04.23 |
댓글