
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를 리버스 에이전트로 구성합니다.
선결 조건
먼저 다음이 필요합니다.
How to Install Nginx on Ubuntu 20.04의 단계에 따라 설치됨
1단계 - Nginx 구성
필수 자습서example.com에서 Nginx를
/etc/nginx/sites-available/example.com
파일에서 SSL을 사용하도록 구성합니다.리버스 프록시 설정을 추가하려면 이 파일을 엽니다.- 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
: 프록시 서버의 프로토콜과 주소를 설정합니다. 이 예에서 프록시 서버는 포트localhost
의 8080
를 통해 접근하는 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를 재부팅하는 것이 지연되지만 이제 구성을 테스트할 수 있습니다.- sudo nginx -t
모든 것이 정상적이면 명령이 반환됩니다.Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
없으면 테스트가 통과될 때까지 보고된 모든 오류를 복구하십시오.주:
예를 들어, 끝부분 슬래시를 추가하여 구성을 잘못한 경우 Jenkins 구성 페이지에서 다음과 같은 내용을 얻을 수 있습니다.

이 오류가 발생하면 Nginx 구성의
proxy_pass
및 proxy_pass
설정을 자세히 확인하십시오.2단계 - Jenkins 구성
Jenkins가 Nginx를 사용하도록 하려면 Jenkins 서버가 모든 인터페이스
proxy_redirect
가 아닌 인터페이스localhost
만 정탐하도록 Jenkins 구성을 업데이트해야 합니다.Jenkins가 모든 인터페이스를 탐색하면 원래 암호화되지 않은 포트 0.0.0.0
에서 액세스할 수 있습니다.다음 조정을 위해
8080
구성 파일을 수정합니다.- 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를 다시 시작하십시오.
- sudo systemctl restart jenkins
--httpListenAddress=127.0.0.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 재부팅:- sudo systemctl restart nginx
상태 확인:- 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 을 고려해야 합니다.