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

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

2022-06-01 last update

9 minutes reading Ubuntu Nginx Ubuntu 16.04 Deployment

소개


기본적으로 Jenkins는 내장된 Winstone 웹 서버를 가지고 있으며, 감청 포트 8080을 가지고 있어 입문하기 편리하다.단, Jenkins 사용을 진지하게 고려하면, 웹 인터페이스를 통해 전송되는 암호와 기타 민감한 데이터를 보호하기 위해 SSL을 사용해야 합니다.
이 강좌에서는 클라이언트 요청을 Jenkins로 지정하기 위해 Nginx를 리버스 에이전트로 구성하는 방법을 보여 줍니다.시작하기 위해서, 당신은 아래의 모든 선결 조건을 완성해야 합니다.

선결 조건


Ubuntu 16.04 서버는 비rootsudo 사용자와 방화벽을 구성하고 Ubuntu 16.04 initial server setup guide에 따라 Jenkins와 Nginx를 설치하고 구성합니다.
  • How to Install Jenkins on Ubuntu 16.04
  • How to Install Nginx on Ubuntu 16.04
  • How to Secure Nginx with Let’s Encrypt on Ubuntu 16.04 . 이 강좌는 귀하가 가지고 있거나 제어할 등록 도메인 이름이 필요합니다.
  • 당신이 이러한 요구를 완성한 후에 시작할 수 있습니다.

    1단계 - Nginx 구성


    필수 강좌 How to Secure Nginx with Let’s Encrypt on Ubuntu 16.04 에서 Nginx를 /etc/nginx/sites-available/default 파일에서 SSL을 사용하도록 설정했기 때문에 이 파일을 열어 역방향 프록시 설정을 추가합니다.
    1. sudo nano /etc/nginx/sites-available/default
    우선 SSL 구성 설정을 사용하여 server 블록에 특정 액세스 및 오류 로그를 추가합니다.
    /etc/nginx/sites available/default
    . . . 
    server {
            # SSL Configuration
            #
            # listen 443 ssl default_server;
            # listen [::]:443 ssl default_server;
            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/default
     . . .
               location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    # try_files $uri $uri/ =404;        }
    . . . 
    
    그리고 실제 프록시 설정을 추가할 것입니다.구성은 먼저 제공된 Nginxproxy_params를 포함하여 호스트 이름, 클라이언트가 요청한 프로토콜, 클라이언트 IP 주소 등 정보를 로그 파일에 보존합니다.다음은 proxy_pass 프록시 서버의 프로토콜과 주소를 설정합니다. 이 예에서 프록시 서버는 포트 8080의 로컬 호스트에서 접근하는 Jenkins 서버입니다.그리고 Nginx의 60초 기본값에서 프로젝트가 제안한 90초 값으로 proxy_read_timeout 를 추가합니다.마지막으로 proxy_redirect 에 올바른 호스트 이름이 포함되어 있는지 확인하기 위해 responses are properly rewritten 을 추가했습니다.
    다음 proxy_redirect 행에서 SSL 보안 도메인 이름을 교체해야 합니다.
    /etc/nginx/sites available/default
    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 set up is broken" error.
                    proxy_redirect      http://localhost:8080 https://your.ssl.domain.name;
    
    변경 사항을 완료하면 파일을 저장하고 종료합니다.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 설정을 업데이트해야 합니다. Jenkins 서버는 모든 인터페이스 proxy_redirect 가 아니라 localhost 인터페이스만 정탐할 수 있습니다.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 및 Nginx를 다시 시작합니다.
    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; bad; vendor preset: enabled) Active: active (exited) since Tue 2017-04-25 22:37:29 UTC; 5s ago Docs: man:systemd-sysv-generator(8) Process: 11360 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS) Process: 11391 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 Tue 2017-04-25 22:36:08 UTC; 2min 51s ago Process: 11339 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code= Process: 11349 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 11345 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUC Main PID: 11353 (nginx)
    이제 이 두 서버를 재부팅했습니다. HTTP 또는 HTTPS를 사용하여 도메인에 액세스할 수 있어야 합니다.HTTP 요청은 자동으로 HTTPS로 리디렉션되며 Jenkins 사이트는 안전한 서비스를 받을 수 있습니다.

    3단계 - 구성 테스트


    현재 암호화를 사용했습니다. 관리 비밀번호를 리셋해서 설정을 테스트할 것입니다.먼저 Active 사이트를 방문하여 Jenkins 에 도달했는지 확인하고 예상대로 http 로 재설정합니다.
    웹 브라우저에서 "http://your.ssl.domain.name"를 입력하고 영역을 https 로 바꿉니다.enter 키를 누르면 URL은 your.ssl.domain.name로 시작하고 위치 표시줄은 연결이 안전하다는 것을 표시해야 합니다.

    사용자 필드에 https 및 Jenkins가 설치할 때 만들고 저장하는 자동 생성 암호를 입력합니다.
    1. sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    관리자 사용자의 암호가 재설정된 경우 암호를 입력합니다.어쨌든, 일단 로그인하면, 우리는 그 안전을 확보하기 위해 비밀번호를 변경할 것이다.

    오른쪽 위 모서리에서 관리 를 클릭하고 드롭다운 메뉴에서 구성 을 선택합니다.새 암호를 입력하고 확인한 다음 저장 을 클릭합니다.이제 Jenkins 웹 인터페이스를 안전하게 사용할 수 있습니다.

    결론


    이 강좌에서 선결 조건을 완성한 후, 우리는 Nginx를 Jenkins 내장 웹 서버의 역방향 에이전트로 설정하여 우리의 증빙서류와 웹 인터페이스를 통해 전송되는 다른 정보를 보호합니다.이제 Jenkins는 안전해졌습니다. 자동 테스트 코드 변경을 배울 수 있습니다.Jenkins의 초보자라면 how to set up a continuous integration pipeline 강좌나 the Jenkins project’s "Getting Started: Create your first Pipeline 을 고려해야 합니다.