Cách thiết lập Varnish SSL Termination với máy chủ web Nginx trên Rocky Linux 8

theanh

Administrator
Nhân viên
Phần mềm bộ nhớ đệm Varnish không hỗ trợ SSL/TLS theo mặc định. Bạn cần phần mềm bổ sung để bật hỗ trợ SSL/TLS trên Varnish.

Chấm dứt SSL là một phương pháp để bật SSL/TLS trên Varnish. Bạn có thể sử dụng Hitch, Nginx hoặc Apache để bật chấm dứt SSL cho trình tăng tốc HTTP Varnish.

Phần mềm chấm dứt SSL sẽ chạy trên cổng HTTPS '443' và xử lý tất cả các yêu cầu HTTPS từ máy khách. Sau đó, tất cả các yêu cầu sẽ được chuyển tiếp đến phần mềm bộ nhớ đệm Varnish, sau đó chuyển tiếp đến máy chủ gốc.

Điều kiện tiên quyết​

Trong bài viết này, bạn sẽ tìm hiểu cách thiết lập Varnish SSL Termination với máy chủ web Nginx.

Trước khi bắt đầu, hãy đảm bảo bạn đã đáp ứng các yêu cầu sau:
  • Một máy chủ Linux đã cài đặt Varnish.
  • Quyền root
  • Một tên miền
Trong ví dụ này, chúng tôi sử dụng máy chủ Rocky Linux đã cài đặt Varnish. Và chúng ta sẽ sử dụng tên miền 'example.io'.

Bây giờ chúng ta hãy bắt đầu.

Cài đặt Nginx Webserver​

Nếu bạn đang sử dụng Nginx làm Varnish backend, hãy bỏ qua bước đầu tiên này.

Trong bước đầu tiên này, bạn sẽ cài đặt Nginx trên hệ thống Linux.

1. Đối với bản phân phối dựa trên Debian/Ubuntu, hãy thực hiện lệnh apt bên dưới để cài đặt máy chủ web Nginx.
Mã:
sudo apt install nginx -y
2. Đối với hệ điều hành CentOS/RockyLinux/AlmaLinux, hãy thực hiện lệnh DNF bên dưới để cài đặt máy chủ web Nginx.
Mã:
sudo dnf install nginx -y
3. Sau khi cài đặt Nginx hoàn tất, hãy khởi động và bật máy chủ web Nginx bằng lệnh sau.
Mã:
sudo systemctl enable --now nginx
Nếu bạn gặp lỗi, hãy bỏ qua. Bạn sẽ cấu hình Nginx ở bước tiếp theo.

Tạo SSL bằng Certbot​

Ở bước này, bạn sẽ cài đặt công cụ cerbot và tạo chứng chỉ SSL từ Letsencrypt cho miền 'example.io'.

1. Trước tiên, hãy thêm các cổng HTTP và HTTPS vào tường lửa hệ thống.

Đối với hệ thống Debian/Ubuntu, hãy thực thi lệnh ufw bên dưới để mở các cổng HTTP và HTTPS.
Mã:
sudo ufw allow http
sudo ufw allow https
sudo ufw reload
Đối với hệ thống CentOS/RockyLinux/AlmaLinux, hãy thực thi lệnh firewall-cmd bên dưới.
Mã:
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
2. Tiếp theo, cài đặt công cụ certbot bằng lệnh sau.

Cài đặt công cụ certbot trên hệ thống Debian/Ubuntu bằng lệnh apt bên dưới.
Mã:
sudo apt install certbot -y
Cài đặt công cụ certbot trên hệ thống CentOS/RockyLinux/AlmaLinux bằng lệnh DNF bên dưới.
Mã:
sudo dnf install certbot -y
3. Trước khi tạo SSL Letsencrypt, hãy dừng dịch vụ Varnish đang chạy trên cổng HTTP mặc định.
Mã:
sudo systemctl stop varnish
sudo systemctl stop nginx
4. Bây giờ hãy thực thi lệnh certbot bên dưới để tạo SSL Letsencrypt. Và hãy đảm bảo thay đổi tên miền và địa chỉ email.
Mã:
sudo certbot certonly --agree-tos --email [emailprotected] --standalone --preferred-challenges http -d example.io
Sau khi quá trình certbot hoàn tất, chứng chỉ của bạn sẽ có tại thư mục '/etc/letsencrypt/live/DOMAIN.COM/'.

Chứng chỉ 'fullchain.pem' là khóa công khai SSL của bạn và 'privkey.pem' là khóa riêng SSL của bạn.

Thiết lập Cổng Nginx Mặc định​

Bỏ qua bước này nếu bạn đang sử dụng máy chủ web Nginx làm phần phụ trợ cho trình tăng tốc HTTP Varnish của mình.

Nếu bạn đang sử dụng máy chủ web phần phụ trợ khác, bạn phải định cấu hình cổng mặc định cho Nginx.

1. Chỉnh sửa cấu hình nginx mặc định bằng trình soạn thảo nano.
Mã:
sudo nano /etc/nginx/nginx.conf
Trên phần 'server { ... }' mặc định, hãy thay đổi tùy chọn 'listen' thành cổng '8081' như bên dưới.
Mã:
....

 server {
 listen 8081 default_server;
 listen [::]:8081 default_server;

 ...trim...
 }

....
Lưu cấu hình và thoát.

2. Bây giờ hãy khởi động lại dịch vụ Nginx để áp dụng cấu hình mới.
Mã:
sudo systemctl restart nginx
Dịch vụ Nginx mặc định hiện đang chạy trên cổng '8081'.

Thiết lập chấm dứt SSL với máy chủ web Nginx​

Để thiết lập chấm dứt SSL với Nginx, bạn cần tạo một cấu hình khối máy chủ/máy chủ ảo mới sẽ chạy trên cổng HTTPS '443'.

Máy chủ ảo này xử lý tất cả các yêu cầu HTTPS từ máy khách và chuyển tiếp tất cả các yêu cầu đến trình tăng tốc HTTP Varnish.

1. Tạo cấu hình khối máy chủ Nginx mới bằng lệnh sau.

Nếu bạn đang sử dụng hệ thống dựa trên Debian/Ubuntu, hãy tạo cấu hình mới '/etc/nginx/sites-available/example.io'.
Mã:
sudo nano /etc/nginx/sites-available/example.io
Đối với hệ thống CentOS/RockyLinux/AlmaLinux, hãy tạo cấu hình mới '/etc/nginx/conf.d/example.conf'.
Mã:
sudo nano /etc/nginx/conf.d/example.conf
Sao chép và dán cấu hình sau. Và hãy đảm bảo thay đổi tên miền và đường dẫn của chứng chỉ SSL.
Mã:
server {

 listen 443 ssl http2;
 server_name example.io;
 ssl_certificate /etc/letsencrypt/live/exmaple.io/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/example.io/privkey.pem;

 ssl_session_cache builtin:1000 shared:SSL:10m;
 ssl_protocols TLSv1.2;
 ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
 ssl_prefer_server_ciphers on;

 access_log /var/log/nginx/example.io_access.log;
 error_log /var/log/nginx/example.io_error.log;

 location / {
 proxy_pass http://127.0.0.1:80;
 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 https;
 proxy_set_header X-Forwarded-Port 443;
 proxy_set_header Host $host;
 }

 }
Lưu cấu hình và thoát.

2. Tiếp theo, đối với hệ thống Debian/Ubuntu, hãy kích hoạt cấu hình khối máy chủ bằng lệnh sau.
Mã:
sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/
3. Bây giờ hãy thực hiện lệnh sau để xác minh cấu hình Nginx, sau đó khởi động lại dịch vụ Nginx để áp dụng cấu hình mới.
Mã:
sudo nginx -t
sudo systemctl restart nginx
4. Bây giờ hãy xác minh dịch vụ Nginx và cổng HTTPS '443' bằng lệnh sau.

Xác minh trạng thái dịch vụ Nginx bằng lệnh systemctl bên dưới.
Mã:
sudo systemctl status nginx
Đảm bảo dịch vụ Nginx đang hoạt động và chạy.



Xác minh cổng HTTPS '443' trên hệ thống của bạn bằng lệnh ss bên dưới.
Mã:
ss -antpl | grep 443
Đảm bảo cổng HTTPS '443' ở trạng thái 'LISTEN'.
Mã:
LISTEN 0 128 0.0.0.0:443 0.0.0.0:* users:(("nginx",pid=4787,fd=8),("nginx",pid=4786,fd=8),("nginx",pid=4785,fd=8))
Bây giờ bạn đã hoàn tất cấu hình cơ bản của việc chấm dứt SSL với máy chủ web Nginx.

Tự động chuyển HTTP sang HTTPS với Varnish​

Trong bước này, bạn sẽ thiết lập Varnish để tự động chuyển hướng giao thức HTTP sang HTTPS. Bạn có thể thực hiện điều này bằng cách tạo một quy tắc Varnish mới trên cấu hình 'default.vcl'.

1. Chỉnh sửa cấu hình varnish '/etc/varnish/default.vcl' bằng trình soạn thảo nano.
Mã:
nano /etc/varnish/default.vcl
Sao chép và dán cấu hình sau vào tùy chọn 'sub vcl_recv { ... }'. Và hãy đảm bảo thay đổi tên miền bằng tên miền của bạn.
Mã:
sub vcl_recv {

 ...trim...

 if (client.ip != "127.0.0.1" && req.http.host ~ "example.io") {
 set req.http.x-redir = "https://example.io" + req.url;
 return(synth(850, ""));
 }

 ...trim...
{
Tiếp theo, thêm cấu hình sau vào cuối dòng. Điều này sẽ xác định phương pháp chuyển hướng đến HTTP '301'.
Mã:
sub vcl_synth {
 if (resp.status == 850) {
 set resp.http.Location = req.http.x-redir;
 set resp.status = 301;
 return (deliver);
 }
}
Lưu cấu hình varnish và thoát.

2. Tiếp theo, khởi động lại dịch vụ Varnish để áp dụng cấu hình mới bằng lệnh sau.
Mã:
sudo systemctl restart varnish
Và bạn đã hoàn tất chuyển hướng HTTP và HTTPS tự động bằng quy tắc Varnish.

Xác minh Varnish SSL Termination​

Để kiểm tra Varnish SSL Termination, bạn có thể sử dụng trình duyệt web hoặc sử dụng lệnh curl.

1. Mở trình duyệt web của bạn và nhập tên miền của bạn vào thanh địa chỉ. Đối với ví dụ này, chúng tôi đang sử dụng trình duyệt web Firefox.


Bạn sẽ được tự động chuyển hướng đến giao thức HTTPS.

Nhấp chuột phải vào trang web và nhấp vào menu 'Kiểm tra'.

Di chuyển đến tab 'Mạng' và nhấp vào nút 'Tải lại'.

Nhấp vào yêu cầu URL gốc và bạn sẽ thấy đầu ra tương tự như bên dưới.



Yêu cầu tới http://example.io được tự động chuyển hướng tới giao thức HTTPS với mã trạng thái '301'.

Máy chủ Varnish xử lý tất cả các yêu cầu của máy khách.

2. Để xác minh việc chấm dứt SSL của Varnish bằng curl, hãy sử dụng lệnh sau.
Mã:
curl -I http://example.io
Bạn sẽ thấy tiêu đề HTTP chi tiết như bên dưới.



Yêu cầu được chuyển hướng tới giao thức HTTPS 'https://example.io' với mã trạng thái HTTP '301'. Máy chủ Varnish xử lý tất cả các yêu cầu từ máy khách.

Kết luận​

Xin chúc mừng! Bạn đã học cách cấu hình Varnish SSL Termination với máy chủ web Nginx.

Ngoài ra, bạn đã học lệnh certbot cơ bản để tạo SSL Letsencrypt miễn phí và quy tắc varnish cơ bản để tự động chuyển hướng từ HTTP sang HTTPS.
 
Back
Bên trên