Thứ ba, 23/09/2014 | 00:00 GMT+7

Cách cấu hình Nginx với SSL làm Reverse Proxy cho Jenkins

Theo mặc định, Jenkins đi kèm với web server tích hợp của riêng nó, server này sẽ lắng nghe trên cổng 8080. Điều này rất tiện lợi nếu bạn chạy version Jenkins riêng tư hoặc nếu bạn chỉ cần tải nhanh một thứ gì đó và không quan tâm đến bảo mật. Tuy nhiên, khi bạn đã có dữ liệu production thực sự đến server của bạn , bạn nên sử dụng một web server an toàn hơn như Nginx.

Bài đăng này sẽ trình bày chi tiết cách kết hợp trang web với SSL bằng cách sử dụng web server Nginx làm Reverse Proxy cho version Jenkins của bạn. Hướng dẫn này giả định một số quen thuộc với các lệnh Linux, cài đặt Jenkins đang hoạt động và cài đặt Ubuntu 14.04.

Bạn có thể cài đặt Jenkins sau trong hướng dẫn này, nếu bạn chưa cài đặt nó.

Bước một - Cấu hình Nginx

Nginx đã trở thành một web server được ưa chuộng vì tốc độ và tính linh hoạt của nó trong những năm gần đây, vì vậy đó là web server mà ta sẽ sử dụng.

Các lệnh trong phần này giả định bạn có một user được cài đặt với quyền truy cập sudo .

Cài đặt Nginx

Cập nhật danh sách gói của bạn và cài đặt Nginx:

sudo apt-get update sudo apt-get install nginx 

Nó không quan trọng, nhưng bạn có thể cần kiểm tra version của Nginx trong trường hợp bạn cần thực hiện sự cố nào . Các version mới hơn của Nginx cũng cung cấp thêm một số tính năng.

nginx -v 

Có được một giấy chứng nhận

Tiếp theo, bạn cần mua hoặc tạo certificate SSL. Các lệnh này dành cho certificate tự ký, nhưng bạn nên nhận chứng chỉ được ký chính thức nếu muốn tránh các cảnh báo của trình duyệt.

Di chuyển vào folder thích hợp và tạo certificate :

cd /etc/nginx sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/cert.key -out /etc/nginx/cert.crt 

Bạn sẽ được yêu cầu nhập một số thông tin về certificate . Bạn có thể điền vào bất kỳ cách nào bạn muốn; chỉ cần lưu ý thông tin sẽ hiển thị trong các thuộc tính certificate . Ta đã đặt số bit thành 2048 vì đó là mức tối thiểu cần thiết để CA có chữ ký. Nếu bạn muốn ký certificate , bạn cần tạo CSR.

Chỉnh sửa cấu hình

Tiếp theo, bạn cần chỉnh sửa file cấu hình Nginx mặc định.

sudo nano /etc/nginx/sites-enabled/default 

Đây là cấu hình cuối cùng có thể trông như thế nào; các phần được chia nhỏ và giải thích ngắn gọn bên dưới. Bạn có thể cập nhật hoặc thay thế file cấu hình hiện có, mặc dù trước tiên bạn có thể cần tạo một bản sao nhanh.

server {     listen 80;     return 301 https://$host$request_uri; }  server {      listen 443;     server_name jenkins.domain.com;      ssl_certificate           /etc/nginx/cert.crt;     ssl_certificate_key       /etc/nginx/cert.key;      ssl on;     ssl_session_cache  builtin:1000  shared:SSL:10m;     ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;     ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;     ssl_prefer_server_ciphers on;      access_log            /var/log/nginx/jenkins.access.log;      location / {        proxy_set_header        Host $host;       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;        # Fix the “It appears that your reverse proxy set up is broken" error.       proxy_pass          http://localhost:8080;       proxy_read_timeout  90;        proxy_redirect      http://localhost:8080 https://jenkins.domain.com;     }   } 

Trong cấu hình của ta , và các cài đặt cert.crt cert.key phản ánh vị trí nơi mà ta tạo ra certificate SSL của ta . Bạn cần cập nhật tên server và các dòng `proxyredirect` với domain của bạn . Có một số phép thuật Nginx bổ sung cũng đang diễn ra cho phép Nginx đọc các yêu cầu và viết lại ở phía phản hồi đảm bảo Reverse Proxy đang hoạt động.

Phần đầu tiên yêu cầu server Nginx lắng nghe bất kỳ yêu cầu nào đến trên cổng 80 (HTTP mặc định) và chuyển hướng chúng đến HTTPS.

... server {    listen 80;    return 301 https://$host$request_uri; } ... 

Tiếp theo, ta có cài đặt SSL. Đây là một tập hợp các mặc định tốt nhưng chắc chắn có thể được mở rộng. Để biết thêm giải thích, vui lòng đọc hướng dẫn này .

...   listen 443;   server_name jenkins.domain.com;    ssl_certificate           /etc/nginx/cert.crt;   ssl_certificate_key       /etc/nginx/cert.key;    ssl on;   ssl_session_cache  builtin:1000  shared:SSL:10m;   ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;   ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;   ssl_prefer_server_ciphers on;   ... 

Phần cuối cùng là nơi proxy xảy ra. Về cơ bản, nó nhận bất kỳ yêu cầu nào đến và ủy quyền chúng tới cá thể Jenkins được ràng buộc / lắng nghe cổng 8080 trên network interface local . Đây là một tình huống hơi khác, nhưng hướng dẫn này có một số thông tin tốt về cài đặt proxy Nginx.

... location / {      proxy_set_header        Host $host;     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;      # Fix the “It appears that your reverse proxy set up is broken" error.     proxy_pass          http://localhost:8080;     proxy_read_timeout  90;      proxy_redirect      http://localhost:8080 https://jenkins.domain.com; } ... 

Một số điều nhanh chóng để chỉ ra ở đây. Nếu bạn không có domain phân giải tới server Jenkins của bạn , thì câu lệnh proxy_redirect ở trên sẽ không hoạt động chính xác nếu không có sửa đổi, vì vậy hãy ghi nhớ điều đó. Ngoài ra, 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

Vì vậy, nếu bạn thấy lỗi này, hãy kiểm tra kỹ cài đặt proxy_passproxy_redirect của bạn trong cấu hình Nginx!

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

Như đã nêu trước đây, hướng dẫn này giả định Jenkins đã được cài đặt. Hướng dẫn này sẽ chỉ cho bạn cách cài đặt Jenkins nếu cần thiết. Bạn có thể cần chuyển sang user root cho bài viết đó.

Để Jenkins làm việc với Nginx, ta cần cập nhật cấu hình Jenkins để chỉ lắng nghe trên giao diện localhost thay vì tất cả (0.0.0.0), đảm bảo lưu lượng truy cập được xử lý đúng cách. Đây là một bước quan trọng vì nếu Jenkins vẫn đang lắng nghe trên tất cả các giao diện, thì nó vẫn có khả năng có thể truy cập được thông qua cổng ban đầu (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 

Xác định vị JENKINS\_ARGS dòng JENKINS\_ARGS và cập nhật nó để trông giống như sau:

JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpListenAddress=127.0.0.1 --httpPort=$HTTP_PORT -ajp13Port=$AJP_PORT" 

Lưu ý cài đặt –httpListenAddress = 127.0.0.1 cần được thêm vào hoặc sửa đổi.

Sau đó, hãy tiếp tục và khởi động lại Jenkins và Nginx.

sudo service jenkins restart sudo service nginx restart 

Bây giờ, bạn có thể truy cập domain của bạn bằng HTTP hoặc HTTPS và trang Jenkins sẽ được cung cấp một cách an toàn. Bạn sẽ thấy cảnh báo certificate nếu bạn sử dụng certificate tự ký.

Tùy chọn - Cập nhật URL OAuth

Nếu bạn đang sử dụng GitHub hoặc một plugin OAuth khác để xác thực, nó có thể sẽ bị hỏng tại thời điểm này. Ví dụ: khi cố gắng truy cập URL, bạn sẽ nhận được thông báo “Không thể mở trang” với URL tương tự như sau:

http://jenkins.domain.com:8080/securityRealm/finishLogin?code=random-string 

Để khắc phục điều này, bạn cần cập nhật một số cài đặt, bao gồm cài đặt plugin OAuth của bạn. Đầu tiên cập nhật URL Jenkins (trong Jenkins GUI); Nó có thể được tìm thấy ở đây:

Jenkins -> Quản lý Jenkins -> Cấu hình Hệ thống -> Vị trí Jenkins

Cập nhật URL Jenkins để sử dụng HTTPS - https:// jenkins.domain.com/

URL Jenkins

Tiếp theo, cập nhật cài đặt OAuth của bạn với nhà cung cấp bên ngoài. Ví dụ này dành cho GitHub. Trên GitHub, bạn có thể tìm thấy điều này trong Cài đặt -> Ứng dụng -> Ứng dụng dành cho nhà phát triển , trên trang GitHub.

Cần có một mục cho Jenkins. Cập nhật URL trang chủURL gọi lại Ủy quyền để phản ánh cài đặt HTTPS. Nó có thể trông giống như sau:

Cài đặt Jenkins trên GitHub; https: // đã được sử dụng với cả hai URL

Kết luận

Điều duy nhất còn lại cần làm là xác minh mọi thứ hoạt động chính xác. Như đã đề cập ở trên, bây giờ bạn có thể duyệt đến URL mới được cấu hình của bạn - jenkins.domain.com - qua HTTP hoặc HTTPS. Bạn sẽ được chuyển hướng đến trang web an toàn và sẽ thấy một số thông tin về trang web, bao gồm cả cài đặt SSL mới cập nhật của bạn. Như đã lưu ý trước đây, nếu bạn không sử dụng tên server qua DNS, thì việc chuyển hướng của bạn có thể không hoạt động như mong muốn. Trong trường hợp đó, bạn cần phải sửa đổi phần proxy_pass trong file cấu hình Nginx.

Bạn cũng có thể cần sử dụng trình duyệt để kiểm tra certificate của bạn . Bạn có thể nhấp vào khóa để xem các thuộc tính certificate từ trong trình duyệt của bạn .


Tags:

Các tin liên quan

Cách thiết lập nhiều trang web WordPress với Nginx trên Ubuntu 14.04
2014-08-21
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server Ubuntu 14.04
2014-08-06
Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server CentOS 7
2014-08-06
Cách cài đặt Nginx trên CentOS 7
2014-07-22
Cách tạo chứng chỉ ECC trên Nginx cho Debian 7
2014-07-21
Cách thiết lập cân bằng tải Nginx với kết thúc SSL
2014-07-17
Cách cài đặt Laravel với web server Nginx trên Ubuntu 14.04
2014-06-24
Cách cài đặt gpEasy CMS với NGINX và PHP5-FPM trên Debian 7
2014-06-03
Cách sử dụng Nginx làm Giám đốc lưu lượng toàn cầu trên Debian hoặc Ubuntu
2014-05-30
Cách sử dụng HAProxy làm bộ cân bằng tải lớp 7 cho WordPress và Nginx trên Ubuntu 14.04
2014-05-27