시스템/쿠버네티스
[쿠버네티스] 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가 적용되어서 실행됨
728x90
반응형