Ubuntu 20.04에서 Nginx 리버스 에이전트를 사용하여 Jenkins에 SSL을 구성하는 방법

Ubuntu 20.04에서 Nginx 리버스 에이전트를 사용하여 Jenkins에 SSL을 구성하는 방법

2022-06-01 last update

9 minutes reading Ubuntu 20.04 Let's Encrypt Ubuntu CI/CD Deployment

소개


기본적으로 Jenkins 는 내장된 Winstone 웹 서버와 감청 포트8080를 가지고 있어 입문하기 편리하다.그러나 SSL을 사용하여 Jenkins의 안전을 보호하는 것도 웹 인터페이스를 통해 전송되는 암호와 민감한 데이터를 보호하는 좋은 생각이다.
이 강좌에서는 클라이언트 요청을 Jenkins로 지정하기 위해 Nginx를 리버스 에이전트로 구성합니다.

선결 조건


먼저 다음이 필요합니다.
  • Ubuntu 20.04 서버는 비root sudo 사용자와 방화벽을 설치했는데 Ubuntu 20.04 initial server setup guide 뒤에 있습니다.
  • How to Install Jenkins on Ubuntu 20.04
  • 의 절차에 따라 Jenkins를 설치합니다.
    How to Install Nginx on Ubuntu 20.04의 단계에 따라 설치됨
  • Nginx
  • 은(는) 도메인에서 제공하는 SSL 인증서입니다.Let’s Encrypt에 따라 이 인증서를 획득합니다.보유하거나 제어해야 하는 How to Secure Nginx with Let’s Encrypt on Ubuntu 20.04이 강좌는 항상 도메인 이름registered domain name을 사용합니다.
  • 1단계 - Nginx 구성


    필수 자습서example.com에서 Nginx를 /etc/nginx/sites-available/example.com 파일에서 SSL을 사용하도록 구성합니다.리버스 프록시 설정을 추가하려면 이 파일을 엽니다.
    1. sudo nano /etc/nginx/sites-available/example.com
    SSL 구성 설정이 있는 블록server에 Jenkins 특정 액세스 및 오류 로그를 추가합니다.
    /etc/nginx/sites available/example.일반 도메인 이름 형식
    . . . 
    server {
            . . .
            # SSL Configuration
            #
            listen [::]:443 ssl ipv6only=on; # managed by Certbot
            listen 443 ssl; # managed by Certbot
            access_log            /var/log/nginx/jenkins.access.log;
            error_log             /var/log/nginx/jenkins.error.log;
            . . .
            }
    
    다음은 프록시 설정을 설정합니다.모든 요청을 Jenkins에 보내기 때문에 기본 try_files 줄에 주석을 달지 않으면 Jenkins에 요청하기 전에 404 오류를 되돌려줍니다.
    /etc/nginx/sites available/example.일반 도메인 이름 형식
    . . .
               location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    # try_files $uri $uri/ =404;        }
    . . . 
    
    이제 프록시 설정을 추가합니다.
  • proxy_params: /etc/nginx/proxy_params 파일은 Nginx에서 제공하여 중요한 정보(호스트 이름, 클라이언트가 요청한 프로토콜 및 클라이언트 IP 주소 포함)를 로그 파일에 보존하고 사용할 수 있도록 합니다.
  • proxy_pass: 프록시 서버의 프로토콜과 주소를 설정합니다. 이 예에서 프록시 서버는 포트localhost8080를 통해 접근하는 Jenkins 서버입니다.
  • proxy_read_timeout: 이것은 Nginx의 60초 기본값을 젠킨스가 제안한 90초 값으로 증가시킬 수 있습니다.
  • proxy_redirect: How to Secure Nginx with Let’s Encrypt on Ubuntu 20.04에 올바른 호스트 이름이 포함되어 있는지 확인합니다.
  • 다음 example.com 행에서 SSL 보안 도메인 이름을 proxy_redirect 로 교체해야 합니다.
    /etc/nginx/sites available/example.일반 도메인 이름 형식
    Location /  
    . . .
               location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    # try_files $uri $uri/ =404;
                    include /etc/nginx/proxy_params;
                    proxy_pass          http://localhost:8080;
                    proxy_read_timeout  90s;
                    # Fix potential "It appears that your reverse proxy setup is broken" error.
                    proxy_redirect      http://localhost:8080 https://example.com;
    
    변경 사항을 완료하면 파일을 저장하고 편집기를 종료합니다.Jenkins를 구성하기 전에 Nginx를 재부팅하는 것이 지연되지만 이제 구성을 테스트할 수 있습니다.
    1. sudo nginx -t
    모든 것이 정상적이면 명령이 반환됩니다.
    Output
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
    없으면 테스트가 통과될 때까지 보고된 모든 오류를 복구하십시오.
    주:
    예를 들어, 끝부분 슬래시를 추가하여 구성을 잘못한 경우 Jenkins 구성 페이지에서 다음과 같은 내용을 얻을 수 있습니다.

    이 오류가 발생하면 Nginx 구성의 proxy_passproxy_pass 설정을 자세히 확인하십시오.

    2단계 - Jenkins 구성


    Jenkins가 Nginx를 사용하도록 하려면 Jenkins 서버가 모든 인터페이스proxy_redirect가 아닌 인터페이스localhost만 정탐하도록 Jenkins 구성을 업데이트해야 합니다.Jenkins가 모든 인터페이스를 탐색하면 원래 암호화되지 않은 포트 0.0.0.0 에서 액세스할 수 있습니다.
    다음 조정을 위해 8080 구성 파일을 수정합니다.
    1. sudo nano /etc/default/jenkins
    /etc/default/jenkins 행을 찾아서 JENKINS_ARGS 기존 매개변수에 추가합니다.
    /etc/기본값/젠킨스
    . . .
    JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"
    
    파일을 저장하고 종료합니다.
    새 구성 설정을 사용하려면 Jenkins를 다시 시작하십시오.
    1. sudo systemctl restart jenkins
    --httpListenAddress=127.0.0.1 출력이 표시되지 않으므로 상태를 확인하십시오.
    1. sudo systemctl status jenkins
    systemctl 행에서 active (exited) 상태를 볼 수 있습니다.
    Output
    ● jenkins.service - LSB: Start Jenkins at boot time Loaded: loaded (/etc/init.d/jenkins; generated) Active: active (exited) since Mon 2018-07-09 20:26:25 UTC; 11s ago Docs: man:systemd-sysv-generator(8) Process: 29766 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS) Process: 29812 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)
    Nginx 재부팅:
    1. sudo systemctl restart nginx
    상태 확인:
    1. sudo systemctl status nginx
    Output
    ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-07-09 20:27:23 UTC; 31s ago Docs: man:nginx(8) Process: 29951 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS) Process: 29963 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 29952 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 29967 (nginx)
    두 서버가 모두 재부팅되면 HTTP 또는 HTTPS를 사용하여 도메인에 액세스할 수 있어야 합니다.HTTP 요청은 자동으로 HTTPS로 리디렉션되며 Jenkins 사이트는 안전한 서비스를 받을 수 있습니다.

    3단계 - 구성 테스트


    암호화가 설정되어 있습니다. 관리 비밀번호를 재설정하여 설정을 테스트할 수 있습니다.먼저 HTTP를 통해 사이트에 액세스하여 Jenkins에 액세스하고 HTTPS로 리디렉션할 수 있는지 확인합니다.
    웹 브라우저에서 Active 을 입력하고 영역을 http://example.com 로 바꿉니다.example.com를 누르면 URL은 ENTER로 시작하고 위치 표시줄은 연결 안전을 표시해야 합니다.
    사용자 필드에 responses are correctly rewritten 에서 만든 관리 사용자 이름과 암호 필드에서 선택한 암호를 입력할 수 있습니다.
    로그인하면 암호를 변경하여 보안을 유지할 수 있습니다.
    화면 오른쪽 상단에 있는 사용자 이름을 클릭합니다.기본 프로필 페이지에서 페이지 왼쪽의 목록에서 구성을 선택합니다.

    그러면 새 페이지에 새 암호를 입력하고 확인할 수 있습니다.

    저장을 클릭하여 새 암호를 확인합니다.이제 Jenkins 웹 인터페이스를 안전하게 사용할 수 있습니다.

    결론


    이 강좌에서는 웹 인터페이스를 통해 전송되는 인증서와 다른 정보를 보호하기 위해 Nginx를 Jenkins 내장 웹 서버의 역방향 에이전트로 설정합니다.이제 Jenkins는 안전해졌습니다. 자동 테스트 코드 변경을 배울 수 있습니다.Jenkins의 초보자라면 How To Install Jenkins on Ubuntu 20.04 강좌나 how to set up a continuous integration pipeline 을 고려해야 합니다.