Cấu hình SSL cho Nginx làm Reverse Proxy

Nginx là một máy chủ web (web server), proxy ngược (reverse proxy) và e-mail proxy (IMAP/POP3) nhẹ, hiệu năng cao, sử dụng giấy phép mở BSD. Nginx có thể chạy trên UNIX, Linux, các dòng BSD, Mac OS X, Solaris và Microsoft Windows. Trên thực tế, số lượng webserver dùng Nginx để chạy    website là rất ít, thay vào đó người ta sẽ sử dụng Apache bởi vì Apache tỏ ra tốt hơn Nginx trong việc phục vụ các trang web động (dynamic page). Nhưng vì tính đa dụng nên Apache có rất nhiều thành phần “thừa” khiến cho Web Server của chúng ta trở nên chậm chạp. Giải pháp đưa ra là chúng   ta sẽ sử dụng Nginx để làm proxy ngược. Nginx sẽ chạy ở phía trước (front-end) phục vụ port 80, còn Apache sẽ chạy ở phía sau (back-end) lắng nghe trên port 8080. Các Client truy vấn tới Web Server sẽ theo dạng Client -> Nginx  -> Apache. Trong bài này sẽ trình bày cách cấu hình SSL trên Nginx làm Reverse Proxy cho dịch vụ httpd trên hệ điều hành CentOS
 
1. Chứng chỉ số
Đầu tiên để cài đặt SSL cho tên miền quý khách cần mua chứng chỉ số cho tên miền của mình. Quý khách có thể tham khảo link: http://vinahost.vn/bang-gia-license.html để biết giá cả của một số chứng chỉ số phổ biến. Ngoài ra quý khách có thể dùng self-signed certificate để cài đặt, thông tin về self-signed certificate quý khách có thể tham khảo tại:  http://en.wikipedia.org/wiki/Self-signed_certificate
 
2. Cấu hình Nginx
 
Quý khách cấu hình file /etc/nginx/conf.d/default.conf có nội dung như sau:
 
server {
    listen 80;
    return 301 https://$host$request_uri;
}
 
server {
 
    listen 443;
    server_name vinahost.vn;
 
    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/vinahost.vn.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;
 
      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;
 
    }
  }
 
Trong đó:
 
server {
    listen 80;
    return 301 https://$host$request_uri;
}
 
Cấu hình server tự động redirect người dùng qua sử dụng giao thức https. Với cấu hình trên thì người dùng sẽ luôn sử dụng giao thức https khi kết nối tới website của quý khách
 
Tiếp tục phần:
 
listen 443;
    server_name vinahost.vn;
 
    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;
 
Cấu hình Nginx lắng nghe trên port 433 (đây là port mặc định của giao thức https) và khai báo hai file .key và .crt cũng như quy định giao thức kết nối và phương thức mã hóa. Khi đăng ký chứng chỉ số thì quý khách sẽ được cung cấp hai file này. Ngoài ra quý khách lưu ý khi đăng ký chứng chỉ số cho tên miền của quý khách thì chứng chỉ số phân biệt giữa có www và không có www
 
Phần cuối cùng:
 
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;
 
      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;
 
    }
 
Cấu hình Nginx chuyển các request cho Apache xử lý, theo như cấu hình trên thì Apache sẽ lắng nghe trên port 8080.
 
Sau khi lưu lại file cấu hình quý khách restart lại Nginx, quý khách chạy lệnh sau:
 
# service nginx restart
 
Như vậy việc cấu hình SSL cho Nginx làm Reverse Proxy đã hoàn thành.
 
*Tham khảo:

Powered by WHMCompleteSolution