시스템/쿠버네티스

[쿠버네티스] nginx TLS(SSL) 접속 & vhost & proxy 설정 젠킨스 ssl 적용

cbwstar 2024. 1. 23. 13:53
728x90
반응형

1. nginx 도커 설치

1) docker-compose.yaml 파일생성

   vi docker-compose.yaml

version: '3.1'

services:
  nginx:
    container_name: nginx_web
    image: nginx:latest
    restart: always
    ports:
 # 사용안하는 포트와 포트 포워딩   
      - "7080:80"
      - "5443:443"
    volumes:
# ssl 사설인증서 공유폴더 설정
      - ./ssl:/etc/ssl
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
#     - ./content:/usr/share/nginx/html:rw
# 동일네트워크 대역설정
    networks:
      - apps_net
    environment:
      - TZ=Asia/Seoul
# 외부네트워크 사용설정
networks:
  apps_net:
    external: true

2) nginx  환경파일 설정

- nginx 환경파일 경로 /etc/nginx/nginx.conf 에서 conf.d 폴더에 환경파일 인크루드

- conf.d/default.conf 파일 오버라이트 또는 삭제 후 환경설정 재정의

vi nginx.conf

# 기본구조(nginx.conf) 파일
/*
events {
}
http {
 # Virtual Host 정의
  server {
    listen 80;
    server_name a.host.com;
    location / {
       return 200 "Hello, Nginx! This is Host A!";
    }
  }
}
*/

server {
        listen 80;   
        server_name nginx.co.kr;
        location / {
#           return 200 "80 port";
#           return 301 https://$host$request_uri;
            return 301 https://$http_host$request_uri;
        }
    }

server {
    listen 443 ssl;
    server_name nginx.co.kr;
  # 사설인증서 TLS 설정
    ssl_certificate /etc/ssl/nginx.co.kr.crt;
    ssl_certificate_key /etc/ssl/nginx.co.kr.key;

    location / {
#       return 200 "Hello, Nginx! 443 ssl This is Host nginx.co.kr! $http_host $remote_addr $proxy_add_x_forwarded_for $request_uri $host scheme: $scheme" ;    
# 프록시 설정
        proxy_pass http://10.0.100.2:9080;
        proxy_set_header    Host                $http_host;
        proxy_set_header    X-Real-IP           $remote_addr;
        proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
     # 내부서버가 http일경우 스키마가 http로 린턴되서 404에러 발생 https스키마를 같이 넘겨줘야 정상조회   
        proxy_set_header    X-Forwarded-Proto   $scheme;
    }
 }

3) 프록시 주요 옵션

ocation/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version  1.1;
    proxy_cache_bypass  $http_upgrade;

    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        "upgrade";
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
  }
  
proxy_http_version 1.1 - 프록시를 위한 HTTP 프로토콜 버전을 정의합니다. 기본적으로 1.0으로 설정됩니다. 웹 소켓 및 활성 연결을 유지하려면 버전 1.1을 사용해야 합니다.
proxy_cache_bypass $http_upgrade - 캐시에서 응답을 가져오지 않을 조건을 설정합니다.

Upgrade $http_upgrade 및 Connection "upgrade" - 응용프로그램이 웹 소켓을 사용하는 경우 헤더 필드가 필요합니다.
Host $host - 다음 우선 순위의 $host 변수에는 요청 라인의 호스트 이름 또는 호스트 요청 헤더 필드의 호스트 이름 또는 요청과 일치하는 서버 이름이 포함됩니다.
X-Real-IP $remote_addr - 실제 방문자 원격 IP 주소를 프록시 서버로 전달합니다.
X-Forwarded-$proxy_add_x_forwarded_for - 클라이언트가 프록시 처리한 모든 서버의 IP 주소를 포함하는 목록입니다.
X-Forwarded-Proto $scheme - HTTPS 서버 블록 내에서 사용할 경우 프록시 서버의 각 HTTP 응답이 HTTPS로 다시 작성됩니다.
X-Forwarded-Host $host - 클라이언트가 요청한 원래 호스트를 정의합니다.
X-Forwarded-Port $server_port - 클라이언트가 요청한 원래 포트를 정의합니다

4) nginx 재기동 (도커설치시는 도커 재기동)

    nginx -s reload

5) 도커실행

    docker compose up -d

6) 실행확인

    docker ps -a

root@master:~# docker ps -a
CONTAINER ID   IMAGE                                 COMMAND                   CREATED         STATUS                  PORTS                                                                                                                                                                    NAMES
76c68e5cfc3d   nginx:latest                          "/docker-entrypoint.…"   8 seconds ago   Up 5 seconds            0.0.0.0:7080->80/tcp, :::7080->80/tcp, 0.0.0.0:5443->443/tcp, :::5443->443/tcp                                                                                           nginx_web

 

7) proxy_pass를 내부 jenkins 주소로 하여서 jenkins https가 적용되어서 실행됨

https://nginx.co.kr:5443/  

728x90
반응형