Hướng dẫn cài SSL máy chủ cài Nginx proxy + Apache

Hướng dẫn cài SSL máy chủ cài Nginx proxy + Apache

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. Cấu hình Nginx

Bạn đăng ký SSL sau đó nhận được bộ cài ssl sau khi hoàn thành.
Tạo thư mục ssl trong /etc/nginx/ssl
copy các file key và file crt vào thư mục ssl
Bạn 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/ssl/cert.crt;
    ssl_certificate_key      /etc/nginx/ssl/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/quantrihethong.net.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:8081;
      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/ssl/cert.crt;
    ssl_certificate_key      /etc/nginx/ssl/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:8081;
      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 8081.
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

2: Cấu hình Apache (nếu trước đó bạn đã cấu hình Port trên Apache bạn có thể bỏ qua bước này)

SSL nginx proxy và apache sẽ không thể cùng hoạt động trên port 443 vì vậy bạn đổi port Apache sang 8081 hoặc port khác.

vi /etc/httpd/conf/httpd.conf
#tìm dòng sau
NameVirtualHost (someIP):443
# Đổi port sang 
Listen 127.0.0.1:8081
# Change all port definitions of 443 to 8081

Đối port ssl config file

#mở file ssl.conf
vi /etc/httpd/conf.d/ssl.conf
#tìm dòng listen 443  sau đó đổi sang 8081
Listen 127.0.0.1:8081
#chỉnh lại toàn bộ  Vhost port 443 sang 8081
#  becomes 

Reset httpd và nginx

service httpd restart
service nginx restart

Như vậy việc cấu hình SSL cho Nginx làm Reverse Proxy đã hoàn thành.

———————————————————–

Keyword: SSL nginx proxy