본문 바로가기
NGINX

NGINX 풀강의 --- 2 Hours NginX Crash Course + Bonus Content (꼭 학습할것)

by SAMSUNG CLOUD-OKY 2021. 5. 16.
반응형

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

반응형

댓글