Thứ ba, 10/07/2018 | 00:00 GMT+7

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

Theo mặc định, Jenkins đi kèm với web server Winstone tích hợp của riêng nó đang nghe trên cổng 8080 , thuận tiện cho việc bắt đầu. Tuy nhiên, cũng nên bảo mật Jenkins bằng SSL để bảo vệ password 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ẽ cấu hình Nginx làm Reverse Proxy để hướng các yêu cầu của khách hàng đến Jenkins.

Yêu cầu

Để bắt đầu, bạn cần các thành phần sau :

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

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

  • 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 log lỗi và quyền truy cập cụ thể của 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 cấu hình cài đặt proxy. Vì ta đang gửi tất cả các yêu cầu đến Jenkins, ta sẽ comment 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 cung cấp bởi Nginx và đảm bảo thông tin quan trọng, bao gồm tên server , giao thức của yêu cầu client và địa chỉ IP client , được giữ lại và có sẵn trong file log .
  • proxy_pass : Điều này đặt giao thức và địa chỉ của server được ủy quyền, trong trường hợp này sẽ là server 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ừ giá trị mặc định 60 giây của Nginx lên giá trị 90 giây do Jenkins đề xuất.
  • proxy_redirect : Điều này đảm bảo cáccâu trả lời được viết lại chính xác để bao gồm tên server thích hợp.

Đảm bảo thay thế domain đượ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 file và thoát khỏi editor . Ta sẽ tạm dừng khởi động lại Nginx cho đến khi ta đã cấu hình Jenkins, nhưng ta có thể kiểm tra cấu hình của bạn ngay bây giờ:

  • 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 quá trình kiểm tra vượt qua.

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

Lỗi Jenkins:  Cài đặt  Reverse Proxy  bị hỏng

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

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

Để Jenkins làm việc với Nginx, bạn cần cập nhật cấu hình Jenkins để server Jenkins chỉ lắng nghe trên giao diện localhost thay vì 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, nó có khả năng có thể truy cập trên cổng ban đầu, không được mã hóa ( 8080 ).

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

  • sudo nano /etc/default/jenkins

Định vị 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 khỏi file .

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

  • sudo systemctl restart jenkins

systemctl không hiển thị kết quả , hãy kiểm tra trạng thái:

  • 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:

  • sudo systemctl restart nginx

Kiểm tra trạng thái:

  • 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 server được khởi động lại, bạn có thể truy cập domain bằng HTTP hoặc HTTPS. Các yêu cầu HTTP sẽ tự động được chuyển hướng đến HTTPS và trang Jenkins sẽ được phân phát một cách an toàn.

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

Đến đây bạn đã bật mã hóa, bạn có thể kiểm tra cấu hình bằng cách đặt lại password quản trị. Hãy bắt đầu bằng cách truy cập trang web qua HTTP để xác minh bạn có thể liên hệ với Jenkins và được chuyển hướng đến HTTPS.

Trong trình duyệt web , hãy nhập http:// example.com , thay thế domain 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í phải cho biết rằng kết nối được bảo mật.

Bạn có thể nhập tên admin-user mà bạn đã tạo trong Cách cài đặt Jenkins trên Ubuntu 18.04 vào trường User và password bạn đã chọn trong trường Mật khẩu .

Sau khi đăng nhập, bạn có thể thay đổi password đảm bảo rằng nó an toàn.

Nhấp vào tên user của bạn ở góc trên bên phải màn hình. Trên trang profile chính, chọn Định cấu hình từ danh sách ở bên trái của trang:

Điều hướng đến trang password  Jenkins

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 password mới:

Jenkins tạo trang password

Xác nhận password mới bằng cách nhấp vào Lưu . Đến đây 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 đã cấu hình Nginx làm Reverse Proxy cho web server tích hợp của Jenkins để bảo mật thông tin đăng nhập và thông tin khác được truyền qua giao diện web. Bây giờ Jenkins đã được bảo mật, bạn có thể học cách cài đặt một đường dẫn 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 mới sử dụng Jenkins là hướng dẫn "Tạo đường ống dẫn đầu tiên" của dự án Jenkins hoặc thư viện các plugin do cộng đồng đóng góp .


Tags:

Các tin liên quan

Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Ubuntu 18.04
2018-07-09
Cách tạo chứng chỉ SSL tự ký cho Nginx trong Ubuntu 18.04
2018-07-05
Cách bảo mật Nginx bằng Let's Encrypt trên FreeBSD
2018-07-02
Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 18.04
2018-04-27
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên Ubuntu 16.04
2018-04-12
Cách lưu trữ trang web bằng Cloudflare và Nginx trên Ubuntu 16.04
2018-03-15
Nginx Essentials: Khắc phục sự cố cài đặt và cấu hình
2017-12-12
Cách thiết lập Let's Encrypt với Nginx Server Blocks trên Ubuntu 16.04
2017-10-27
Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 16.04
2017-10-27
Cách tăng điểm tốc độ trang bằng cách thay đổi cấu hình Nginx của bạn trên Ubuntu 16.04
2017-08-15