Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách định cấu hình Jenkins bằng SSL bằng Nginx Reverse Proxy trên Ubuntu 18.04

Ngày đăng: 19 tháng 10 năm 2023

Giới thiệu

Theo mặc định, Jenkins đi kèm với máy chủ web Winstone tích hợp sẵn listen trên cổng 8080, thuận tiện cho việc bắt đầu. Tuy nhiên, bạn cũng nên bảo mật Jenkins bằng SSL để bảo vệ mật khẩu và dữ liệu nhạy cảm được truyền qua giao diện web.

Trong hướng dẫn này, bạn sẽ định cấu hình Nginx làm reverse proxy để chuyển các yêu cầu của khách hàng đến Jenkins.

Điều kiện tiên quyết

Để bắt đầu, bạn sẽ cần những thứ sau:

  • Một máy chủ Ubuntu 18.04 được định cấu hình với tường lửa và non-root sudo user, làm theo hướng dẫn thiết lập máy chủ ban đầu Ubuntu 18.04.
  • Đã cài đặt Jenkins, làm theo các bước trong Cách cài đặt Jenkins trên Ubuntu 18.04
  • Đã cài đặt Nginx, làm theo các bước trong Cách cài đặt Nginx trên Ubuntu 18.04
  • Chứng chỉ SSL cho miền do Let's Encrypt cung cấp. Làm theo Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04 để nhận chứng chỉ này. Lưu ý rằng bạn sẽ cần một tên miền đã đăng ký mà bạn sở hữu hoặc kiểm soát. Hướng dẫn này sẽ sử dụng tên miền example.com xuyên suốt.

Bước 1 - Định cấu hình Nginx

Trong hướng dẫn tiên quyết Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04, bạn đã định cấu hình Nginx để sử dụng SSL trong tệp /etc/nginx/sites-available/example.com. Mở tệp này để thêm cài đặt reverse proxy của bạn:

  1. sudo nano /etc/nginx/sites-available/example.com

Trong khối server có cài đặt cấu hình SSL, hãy thêm nhật ký lỗi và quyền truy cập dành riêng cho Jenkins:

/etc/nginx/sites-available/example.com
. . . 
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;
        . . .
        }

Tiếp theo, hãy định cấu hình cài đặt proxy. Vì chúng tôi đang gửi tất cả các yêu cầu đến Jenkins nên chúng tôi sẽ nhận xét dòng try_files mặc định, nếu không sẽ trả về lỗi 404 trước khi yêu cầu đến được Jenkins:

/etc/nginx/sites-available/example.com
. . .
           location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                # try_files $uri $uri/ =404;        }
. . . 

Bây giờ hãy thêm cài đặt proxy, bao gồm:

  • proxy_params: Tệp /etc/nginx/proxy_params được Nginx cung cấp và đảm bảo rằng thông tin quan trọng, bao gồm tên máy chủ, giao thức của request máy khách và địa chỉ IP của máy khách, được giữ lại và có sẵn trong tệp nhật ký.
  • proxy_pass: Điều này đặt giao thức và địa chỉ của máy chủ proxy, trong trường hợp này sẽ là máy chủ Jenkins được truy cập qua localhost trên cổng 8080.
  • proxy_read_timeout: Điều này cho phép tăng từ mặc định 60 giây của Nginx lên giá trị 90 giây được Jenkins đề xuất.
  • proxy_redirect: Điều này đảm bảo rằng các phản hồi được viết lại chính xác để bao gồm tên máy chủ phù hợp.

Hãy nhớ thay thế tên miền được bảo mật SSL của bạn cho example.com trong dòng proxy_redirect bên dưới:

/etc/nginx/sites-available/example.com
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;

Khi bạn đã thực hiện những thay đổi này, hãy lưu tệp và thoát khỏi trình chỉnh sửa. Chúng tôi sẽ tạm dừng khởi động lại Nginx cho đến khi chúng tôi đã định cấu hình Jenkins, nhưng chúng tôi có thể kiểm tra cấu hình của mình ngay bây giờ:

  1. sudo nginx -t

Nếu tất cả đều ổn, lệnh sẽ trả về:

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu không, hãy sửa mọi lỗi được báo cáo cho đến khi bài kiểm tra vượt qua.

Lưu ý: Nếu bạn định cấu hình sai proxy_pass (ví dụ: bằng cách thêm dấu gạch chéo ở cuối), bạn sẽ nhận được nội dung tương tự như sau trong trang Jenkins Configuration của mình.

description image

Nếu bạn thấy lỗi này, hãy kiểm tra kỹ cài đặt proxy_passproxy_redirect trong cấu hình Nginx.

Bước 2 - Định cấu hình Jenkins

Để Jenkins hoạt động với Nginx, bạn sẽ cần cập nhật cấu hình Jenkins để máy chủ Jenkins chỉ listen trên giao diện localhost chứ không phải trên tất cả các giao diện (0.0.0.0). Nếu Jenkins lắng nghe trên tất cả các giao diện thì nó có khả năng truy cập được trên cổng ban đầu, không được mã hóa (8080).

Hãy sửa đổi tệp cấu hình /etc/default/jenkins để thực hiện những điều chỉnh sau:

  1. sudo nano /etc/default/jenkins

Xác định vị trí dòng JENKINS_ARGS và thêm --httpListenAddress=127.0.0.1 vào các đối số hiện có:

/etc/default/jenkins
. . .
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1"

Lưu và thoát tập tin.

Để sử dụng cài đặt cấu hình mới, hãy khởi động lại Jenkins:

  1. sudo systemctl restart jenkins

systemctl không hiển thị đầu ra, hãy kiểm tra trạng thái:

  1. sudo systemctl status jenkins

Bạn sẽ thấy trạng thái active (exited) trong dòng Active:

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)

Khởi động lại Nginx:

  1. sudo systemctl restart nginx

Kiểm tra trạng thái:

  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)

Khi cả hai máy chủ được khởi động lại, bạn sẽ có thể truy cập miền bằng HTTP hoặc HTTPS. Các yêu cầu HTTP sẽ được tự động chuyển hướng đến HTTPS và trang web Jenkins sẽ được cung cấp một cách an toàn.

Bước 3 - Kiểm tra cấu hình

Bây giờ bạn đã kích hoạt mã hóa, bạn có thể kiểm tra cấu hình bằng cách đặt lại mật khẩu quản trị. Hãy bắt đầu bằng cách truy cập trang web qua HTTP để xác minh rằng bạn có thể truy cập Jenkins và được chuyển hướng đến HTTPS.

Trong trình duyệt web của bạn, nhập http://example.com, thay thế tên miền của bạn cho example.com. Sau khi bạn nhấn ENTER, URL sẽ bắt đầu bằng https và thanh vị trí sẽ cho biết kết nối này an toàn.

Bạn có thể nhập tên người dùng quản trị mà bạn đã tạo trong Cách cài đặt Jenkins trên Ubuntu 18.04 vào trường User và mật khẩu bạn đã chọn trong trường Password.

Sau khi đăng nhập, bạn có thể thay đổi mật khẩu để đảm bảo an toàn.

Nhấp vào tên người dùng của bạn ở góc trên bên phải màn hình. Trên trang hồ sơ chính, chọn Configure từ danh sách ở bên trái trang:

description image

Thao tác này sẽ đưa bạn đến một trang mới, nơi bạn có thể nhập và xác nhận mật khẩu mới:

description image

Xác nhận mật khẩu mới bằng cách nhấp vào Save. Bây giờ bạn có thể sử dụng giao diện web Jenkins một cách an toàn.

Kết luận

Trong hướng dẫn này, bạn đã định cấu hình Nginx làm reverse proxy cho máy chủ web tích hợp của Jenkins để bảo mật thông tin đăng nhập của bạn và các thông tin khác được truyền qua giao diện web. Giờ đây, Jenkins đã được bảo mật, bạn có thể tìm hiểu cách thiết lập quy trình tích hợp liên tục để tự động kiểm tra các thay đổi mã. Các tài nguyên khác cần xem xét nếu bạn là người mới làm quen với Jenkins là hướng dẫn “Tạo Pipeline đầu tiên của bạn” của dự án Jenkins hoặc thư viện các plugin do cộng đồng đóng góp.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời