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ổng8080
, 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 :
- Một server Ubuntu 18.04 được cấu hình với firewall và user sudo không phải root, theo hướng dẫn cài đặt server ban đầu Ubuntu 18.04 .
- Jenkins đã cài đặt, làm theo các bước trong Cách cài đặt Jenkins trên Ubuntu 18.04
- Đã cài đặt Nginx, hãy làm theo các bước trong Cách cài đặt Nginx trên Ubuntu 18.04
- Chứng chỉ SSL cho domain 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 để lấy certificate này. Lưu ý bạn cần một tên domain đã đăng ký mà bạn sở hữu hoặc kiểm soát. Hướng dẫn này sẽ sử dụng domain example.com xuyên suốt.
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:
. . . 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:
. . . 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 qualocalhost
trên cổng8080
. -
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:
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ề:
Outputnginx: 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.
Nếu bạn thấy lỗi này, hãy kiểm tra proxy_redirect
cài đặt proxy_redirect
và proxy_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ó:
. . . 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
Vì 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:
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:
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 .
Các tin liên quan
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Ubuntu 18.042018-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