Cấu hình Jenkins với Nginx Reverse Proxy

Cấu hình Jenkins với Nginx Reverse ProxyCuongquach.com | Thông thường khi bạn cài đặt Jenkins làm hệ thống CI/CD ban đầu thì Jenkins sẽ chỉ hỗ trợ bạn truy cập qua port dịch vụ lắng nghe trên IP chứ không hỗ trợ bạn truy cập qua tên miền hoặc tên miền sub url giúp bạn thuận tiện trong việc quản lý. Vì vậy để giải quyết bài toán này thường chúng ta sẽ cài đặt thêm 1 dịch vụ như Nginx đứng phía trước làm reverse proxy giúp bạn truy cập dịch vụ Jenkins qua tên miền được.

cau-hinh-jenkins-voi-nginx-reverse-proxy

Có thể bạn quan tâm chủ đề khác
Tổng quan giao diện quản lý Jenkins
Bảo trì tắt mở dịch vụ Jenkins
Backup/restore dữ liệu Jenkins
Quản lý cài đặt Jenkins cơ bản

1. Cấu hình Jenkins

Jenkins mặc định khi cài xong thì đã listen trên port 8080 và listen trên toàn bộ cổng interface private/public/loopback . Vì lý do an toàn bảo mật cho hệ thống Jenkins chúng ta nên cấu hình Jenkins listen trên 127.0.0.1 port 8080 và chỉ dùng Nginx reverse proxy xuống truy cập Jenkins.

Bạn khai báo biến ‘HTTP_HOST‘ và thêm option ‘–httpListenAddress=$HTTP_HOST‘ vào biến ‘JENKINS_ARGS‘ trong file định nghĩa biến môi trường hoạt động của Jenkins.

File biến môi trường Jenkins khác nhau ở mỗi OS Linux:

  • Ubuntu 16.04 + : /etc/sysconfig/jenkins
  • CentOS 7+ : /etc/sysconfig/jenkins
# vi /etc/sysconfig/jenkins
HTTP_HOST=127.0.0.1
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=$HTTP_HOST"

Khởi động lại dịch vụ Jenkins.

# systemctl restart jenkins

Kiểm tra xem Jenkins đã lắng nghe trên 127.0.0.1 chưa nhé.

# netstat -antlp | grep java
tcp6 0 0 127.0.0.1:8080 :::* LISTEN 13040/java

2. Cài đặt Nginx

Việc cài đặt Nginx khá đơn giản các bạn có thể tham khảo bài viết này:
Hướng dẫn cài đặt Nginx trên CentOS
Hướng dẫn cài đặt Nginx trên Ubuntu

+ CentOS

# yum install epel-release -y
# yum install nginx -y

+ Ubuntu

# apt install nginx -y

3. Cấu hình Nginx Reverse Proxy cho Jenkins

Chúng ta sẽ có hai hình thức cấu hình Nginx làm reverse proxy:

  • Reverse proxy theo tên miền hoặc tên miền phụ. Ví dụ : http://jenkins.cuongquachlab.com hoặc http://cuongquachlab.com
  • Reverse proxy theo sub URL của tên miền. Ví dụ : cuongquachlab.com/jenkins/

3.1 Nginx reverse proxy theo tên miền

Chúng ta sẽ khai báo một VirtualHost dành riêng cho dịch vụ Jenkins. Ví dụ vhost của mình có domain là : jenkins.cuongquachlab.com

Giả sử cấu hình Nginx mặc định sẽ bao gồm các file config trong thư mục ‘/etc/nginx/sites-enabled/‘ .

# cat /etc/nginx/nginx.conf
..
..
http {
       ...
    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Tạo file config vhost dành cho Jenkins. Cấu hình block ‘location /‘ có thể áp dụng cho cả tên miền HTTPHTTPS , nên cấu hình mẫu Nginx HTTP 80 ở bài này bạn có thể đem sang cho config của Nginx SSL 443.

# vi /etc/nginx/sites-enabled/jenkins.cuongquachlab.com.conf
server {
    listen 80;
    server_name jenkins.cuongquachlab.com;

    location / {

        proxy_set_header        Host $host:$server_port;
        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_pass          http://127.0.0.1:8080;
        proxy_read_timeout 120;
        proxy_connect_timeout 120;
        proxy_send_timeout 120;

        proxy_redirect      http://127.0.0.1:8080 https://jenkins.cuongquachlab.com;

        # Required for new HTTP-based CLI
        proxy_http_version 1.1;
        proxy_request_buffering off;
        sendfile off;

        # workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
        add_header 'X-SSH-Endpoint' 'jenkins.cuongquachlab.com:50022' always;
    }
}

Ý nghĩa của các giá trị proxy_* bạn đọc thêm tài liệu của Nginx nhé, phần cấu hình Nginx Reverse Proxy mình sẽ không đi chi tiết ở bài này : LINK

Khởi động lại dịch vụ Nginx.

# systemctl restart nginx

Giờ bạn chỉ cần truy cập thử tên miền của bạn là sẽ thấy dịch vụ Jenkins đã có thể hoạt động qua tên miền rồi. Phần tên miền này bạn có thể trỏ DNS record A đến địa chỉ IP của máy chủ dịch vụ Jenkins của bạn (có thể public hoặc private tuỳ vào hệ thống của bạn) , còn muốn kiểm tra nhanh thì có thể chỉnh file ‘hosts’ trên laptop cho nhanh.

3.2 Nginx reverse proxy theo sub url tên miền

Bạn phải cấu hình cho dịch vụ Jenkins sẽ thay đổi cách thức xử lý request tương ứng với sub url của bạn. Ví dụ bạn muốn truy cập đường link url như sau :

cuongquachlab.com/jenkins/

Thay đổi prefix url mà Jenkins sẽ sử dụng để xử lý request.

# vi /etc/sysconfig/jenkins
PREFIX=/$NAME
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=$HTTP_HOST --prefix=$PREFIX"

Khởi động lại dịch vụ Jenkins.

# systemctl restart jenkins

Tiếp đến cấu hình Nginx reverse proxy cho Jenkins sub-url.

# vi /etc/nginx/sites-enabled/cuongquachlab.com.conf
server {
    listen 80;
    server_name cuongquachlab.com;


    location ^~ /jenkins/ {
        proxy_pass http://127.0.0.1:8080/jenkins/;
        sendfile off;

        proxy_set_header   Host             $host:$server_port;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_max_temp_file_size 0;

        #this is the maximum upload size
        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_temp_file_write_size 64k;

        # Required for new HTTP-based CLI
        proxy_http_version 1.1;
        proxy_request_buffering off;
        proxy_buffering off; # Required for HTTP-based CLI to work over SSL
    }
}

Khởi động lại dịch vụ Nginx.

# systemctl restart nginx

Giờ thì thử truy cập đường dẫn sub url cho dịch vụ Jenkins của bạn nào.

Tổng kết

Vậy là khi bạn muốn cấu hình Nginx làm reverse proxy cho dịch vụ Jenkins CI/CD thì cực kì đơn giản để cấu hình với 2 cách thực hiện như trên. Chúc bạn thành công.

Nguồn: https://cuongquach.com/

Previous articleGiáo trình Quản Trị Hệ Thống Linux 1, 2 Tiếng Việt (PDF)
Next articleEbook Securing & Optimizing Linux: The Hacking Solution (PDF)
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !