Cách cấu hình Jenkins với SSL bằng cách sử dụng Nginx Reverse Proxy
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, ngay khi bạn thực sự nghiêm túc về việc sử dụng Jenkins, nó nên được bảo mật bằng SSL để bảo vệ password và dữ liệu nhạy cảm khác được truyền qua giao diện web.Trong hướng dẫn này, ta sẽ trình bày cách 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. Để bắt đầu, bạn cần hoàn thành từng yêu cầu bên dưới.
Yêu cầu
 Một  server  Ubuntu 16.04 được  cấu hình  với  user  sudo không phải root và firewall   theo  hướng dẫn  cài đặt   server  ban đầu Ubuntu 16.04 với Jenkins và Nginx được cài đặt và  cấu hình  bằng cách sử dụng các hướng dẫn sau:
- Cách cài đặt Jenkins trên Ubuntu 16.04
- Cách cài đặt Nginx trên Ubuntu 16.04
- Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 16.04 . Lưu ý hướng dẫn này yêu cầu domain đã đăng ký mà bạn sở hữu hoặc kiểm soát.
Khi bạn đã hoàn thành các yêu cầu này, bạn đã sẵn sàng để bắt đầu.
Bước một - 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 16.04 ,  ta  đã  cấu hình  Nginx để sử dụng SSL trong file  /etc/nginx/sites-available/default , vì vậy  ta  sẽ mở file  đó để thêm cài đặt Reverse Proxy  của  ta .
- sudo nano /etc/nginx/sites-available/default 
Trước tiên,  ta  sẽ thêm các bản ghi lỗi và truy cập cụ thể vào khối server với cài đặt cấu hình SSL:
. . .  server {         # SSL Configuration         #         # listen 443 ssl default_server;         # listen [::]:443 ssl default_server;         access_log            /var/log/nginx/jenkins.access.log;         error_log            /var/log/nginx/jenkins.error.log; Sau đó,  ta  sẽ  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, như đã viết, 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;        } . . .  Sau đó,  ta  sẽ thêm cài đặt proxy thực tế. Cấu hình bắt đầu bằng cách bao gồm proxy_params do Nginx cung cấp đảm bảo thông tin như tên  server , giao thức của yêu cầu client  và địa chỉ IP client  được giữ lại sẽ có sẵn trong file  log  của  ta . Tiếp theo, proxy_pass đặt giao thức và địa chỉ của  server  được ủy quyền, trong trường hợp của  ta  là  server  Jenkins được truy cập trên  server  local  trên cổng 8080. Sau đó,  ta  tăng proxy_read_timeout từ mặc định 60 giây của Nginx lên giá trị 90 giây được đề xuất của dự án. Và cuối cùng,  ta  thêm proxy_redirect  đảm bảo  rằng cácphản hồi được viết lại đúng cách để 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 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 set up is broken" error.                 proxy_redirect      http://localhost:8080 https://your.ssl.domain.name; Khi bạn đã thực hiện những thay đổi này, hãy lưu và thoát khỏi file . Ta sẽ không khởi động lại Nginx cho đến khi ta đã cấu hình Jenkins nhưng ta sẽ 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 bất kỳ lỗi nào đượ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 hai - Cấu hình Jenkins
 Để Jenkins làm việc với Nginx,  ta  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ì 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 có thể truy cập được trên cổng ban đầu, không được mã hóa ( 8080 ).
  Ta  sẽ sửa đổi file  cấu hình /etc/default/jenkins để thực hiện những điều chỉnh này.
- 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, ta sẽ khởi động lại Jenkins và Nginx.
- sudo systemctl restart jenkins 
Vì systemctl không hiển thị  kết quả ,  ta  sẽ kiểm tra trạng thái:
- sudo systemctl status jenkins 
 Ta  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; bad; vendor preset: enabled)    Active: active (exited) since Tue 2017-04-25 22:37:29 UTC; 5s ago      Docs: man:systemd-sysv-generator(8)   Process: 11360 ExecStop=/etc/init.d/jenkins stop (code=exited, status=0/SUCCESS)   Process: 11391 ExecStart=/etc/init.d/jenkins start (code=exited, status=0/SUCCESS)  Ta sẽ lặp lại các bước này cho 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 Tue 2017-04-25 22:36:08 UTC; 2min 51s ago   Process: 11339 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=   Process: 11349 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)   Process: 11345 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUC  Main PID: 11353 (nginx) Bây giờ ta đã khởi động lại cả hai server , ta sẽ 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
  Ta  sẽ kiểm tra cấu hình bằng cách đặt lại password  quản trị khi  ta  đã bật mã hóa.  Ta  sẽ bắt đầu bằng cách truy cập trang web qua http để  xác minh   ta  liên hệ với Jenkins và được chuyển hướng đến https như  ta  mong đợi:
 Trong  trình duyệt web , hãy nhập “http: // your.ssl.domain.name ”, thay thế domain  của bạn cho your.ssl.domain.name . Sau khi bạn nhấn enter, URL sẽ bắt đầu bằng https và thanh vị trí sẽ cho biết rằng kết nối được bảo mật. 
  Ta  sẽ nhập admin vào trường " User " và password  được tạo tự động mà Jenkins đã tạo và lưu trữ khi  ta  cài đặt nó.
- sudo cat /var/lib/jenkins/secrets/initialAdminPassword 
Nếu bạn đã đặt lại password của admin-user , hãy nhập password đó. Dù bằng cách nào, khi ta đăng nhập, ta sẽ thay đổi password đảm bảo rằng nó an toàn.
Nhấp vào "admin" ở phía trên bên phải và chọn “ Cấu hình ” từ menu thả xuống. Nhập và xác nhận password mới và 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, sau khi hoàn thành các yêu cầu , ta đã cấu hình Nginx làm Reverse Proxy cho web server tích hợp sẵn của Jenkins để bảo mật thông tin đăng nhập của ta và các 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à “Bắt đầu: Tạo hướng dẫn Đường ống đầu tiên của bạn hoặc thư viện các plugin do cộng đồng đóng góp .
Các tin liên quan
Cách tạo chứng chỉ SSL tự ký cho Nginx trên CentOS 72017-01-09
Cách thiết lập Django với Postgres, Nginx và Gunicorn trên Debian 8
2016-12-22
Cách tạo chứng chỉ SSL tự ký cho Nginx trên Debian 8
2016-12-20
Cách cung cấp các ứng dụng Django với uWSGI và Nginx trên Debian 8
2016-12-19
Cách tạo chuyển hướng tạm thời và vĩnh viễn với Nginx
2016-12-19
Cách bảo mật Nginx bằng Let's Encrypt trên Debian 8
2016-12-19
Cách thêm module gzip vào Nginx trên Ubuntu 16.04
2016-12-02
Cơ sở hạ tầng SaltStack: Tạo Salt State cho web server Nginx
2016-11-07
Cách thêm module log vào Nginx trên CentOS 7
2016-10-31
Cách thêm module log vào Nginx trên Ubuntu 16.04
2016-10-31
 

