CHIA SẺ:

Chứng chỉ SSL PositiveSSL của Comodo là một loại Domain Validation được rất nhiều người sử dụng do chi phí rẻ, dễ dàng cài đặt, không phải yêu cầu giấy tờ xác nhận thông tin gì cả.

Trong bài viết này, mình sẽ hướng dẫn các bạn cách cài đặt chứng chỉ PositiveSSL trên máy chủ sử dụng Nginx. Với Let’s Encrypt thì các bạn xem bài hướng dẫn này.

Nếu bạn chưa đăng ký chứng chỉ SSL, hãy tham khảo khuyến mại SSL trên blog Canh Me.

1. Generate chứng chỉ

Sau khi đăng ký SSL, bạn cần phải tiến hành generate thì mới nhận được file chứng chỉ.

Ở bước này, bạn cần phải cung cấp Private Key (và CSR Key), hãy cẩn thận lưu lại Private Key này để sử dụng ở bước bên dưới. Tùy chỗ bạn đăng ký chứng chỉ mà có hỗ trợ chức năng tự động generate key khác nhau.

Format private key có dạng:

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDXCvdAoLtG5QRb
GvYZ/9pOqYYUpA/rZnAAUAFyqdnMcMsYmD6W/m4J9W7/onDrQX7ExzfAKhbWy+FA
v18S8P7arvjxnjXoS8rs4/IVwiqLy5PqispyEmlsFp19/TpJeYltVrrPofiS7/IV
p095TH66erRgxe54BhzPI2XrurKeqSlgyMbBfgw73KaX3LP7qVcVOSEJWkz9WEhl
RJrYwZ3s8U2iFF7ZK/wX7pVN36XM187pFg6vcIjKWdnOUmgPsOYof6d72koddiPm
oOuDIHAd3M3i1OrhLmx1usHmbL5hj2ls9MI6LOjm15ZAGk+q7lIOsdRfAto8pgE7
u7oB4ts/AgMBAAECggEAaLYGP4oEpzjNLi+qtm5HNxaFG3fn6JAw6XYLvnHGhC5I
NumrUIsDugWwzvmiUmvJ9rerBf94r48HWCfXe7mt335j6gNH7J07aq50KvQpE3lF
xWdfvLwKaX95oOe1giGUMZGR1ZjhGWuNTc3yfPYqn1Mwkg7PV9JiJNrvviFi6K5B
vcjVNBlf44zQG4UMeZ9T/aoVFtmDifRMDQQ62MdzgJs4AE0U2+MEbN3NBySbeXID
-----END PRIVATE KEY-----

Email gửi chứng chỉ SSL từ Comodo có tiêu đề tương tự như sau: “Your PositiveSSL Certificate for canhme.com“, trong mail có đính kèm 1 file nén canhme_com.zip gồm 2 file:

  1. canhme_com.crt
  2. canhme_com.ca-bundle

Bạn sử dụng một editor bất kỳ, ví dụ Notepad++, mở file canhme_com.crt, copy toàn bộ nội dung và paste lên trên đầu file canhme_com.ca-bundle, lưu lại thành file ssl-bundle.crt

Lúc này, file chứng chỉ ssl-bundle.crt sẽ chứa nội dung của 2 file .crt và .ca-bundle

2. Cài đặt chứng chỉ SSL

Bước này mình thao tác trên server cài đặt HocVPS Script, với server cài đặt thủ công hoặc các server Nginx khác cách làm cũng tương tự bạn cứ đọc thật kĩ là hiểu. Vướng mắc chỗ nào để lại comment mình sẽ support luôn.

Tạo thư mục chứa file chứng chỉ:

mkdir -p /etc/nginx/ssl/canhme_com/

Lưu nội dung file chứng chỉ ở thư mục này, copy/paste dùng nano

nano /etc/nginx/ssl/canhme_com/ssl-bundle.crt

Lưu nội dung Private Key chung thư mục:

nano /etc/nginx/ssl/canhme_com/canhme_com.key

Tạo file DH parameters 2048 bit, quá trình generate sẽ hơi lâu:

mkdir /etc/nginx/ssl/
openssl dhparam 2048 -out /etc/nginx/ssl/dhparam.pem

Tiếp theo, chúng ta sẽ chỉnh lại file cấu hình Nginx. Ví dụ tên miền của mình là canhme.com thì file cấu hình sẽ có đường dẫn là /etc/nginx/conf.d/canhme.com.conf

Mở file cấu hình lên với nano

nano /etc/nginx/conf.d/canhme.com.conf

Cấu hình SSL xử lý các request

Trong block server { ... } thứ 2 điều chỉnh như sau:

+ Chuyển listen 80 default_server; thành listen 443 ssl http2;

+ Sau dòng server_name canhme.com; thêm đoạn cấu hình SSL đã được mình tối ưu:

	# SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/canhme_com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
	ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

        ## OCSP Stapling
        resolver 127.0.0.1;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;

        # Improve HTTPS performance with session resumption
        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1d;
      
        # DH parameters
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;

        # Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
        add_header Strict-Transport-Security "max-age=31536000" always;

Redirect toàn bộ link www http sang https

Trong block server { ... } ở phía trên cùng:

+ Chuyển server_name www.canhme.com; thành server_name canhme.com www.canhme.com;

+ Chuyển rewrite ^(.*) http://canhme.com$1 permanent; thành rewrite ^(.*) https://canhme.com$1 permanent;

Kết quả được như sau:

server {
	listen   80;
	server_name canhme.com www.canhme.com;
	rewrite ^(.*) https://canhme.com$1 permanent;
}

Lúc này khi truy cập http://canhme.com và http://www.canhme.com sẽ tự động redirect sang https://canhme.com

Redirect toàn bộ link www https sang https

Thêm mới block server { ... } ở trên cùng

server {
	listen   443 ssl http2;
	server_name www.canhme.com;

	# SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/canhme_com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
	ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

	rewrite ^(.*) https://canhme.com$1 permanent;
}

Lúc này khi truy cập https://www.canhme.com sẽ tự động redirect sang https://canhme.com

Cấu hình SSL với port quản lý HocVPS Script Admin

Nếu bạn cài đặt SSL cho tên miền chính sử dụng HocVPS Script, cần thêm cấu hình SSL khi sử dụng port. Ví dụ khi cài đặt mình để port mặc định 2313.

Tìm block server { ... } có dòng listen 2313;

Thêm chữ ssl và đoạn cấu hình SSL tương tự như bên dưới:

server {
	listen   2313 ssl http2;
 	access_log        off;
	log_not_found     off;
 	error_log         off;
    	root /home/canhme.com/private_html;
	index index.php index.html index.htm;
    	server_name canhme.com;
 	
        error_page 497 https://$host:2313$request_uri;
        # SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/canhme_com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
	ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

	auth_basic "Restricted";
	auth_basic_user_file /home/canhme.com/private_html/hocvps/.htpasswd;
	
	...

Lúc này link login HocVPS Script Admin sẽ là https://canhme.com:2313

File cấu hình Nginx cuối cùng sẽ tương tự như sau:

server {
	listen   443 ssl http2;
	server_name www.canhme.com;

	# SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/canhme_com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
	ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

	rewrite ^(.*) https://canhme.com$1 permanent;
}
server {
	listen   80;
	server_name canhme.com www.canhme.com;
	rewrite ^(.*) https://canhme.com$1 permanent;
}
server {
	listen   443 ssl http2;
		
	access_log off;
	# access_log /home/canhme.com/logs/access.log;
	error_log off;
    	# error_log /home/canhme.com/logs/error.log;
	
    	root /home/canhme.com/public_html;
	index index.php index.html index.htm;
    	server_name canhme.com;
	
	# SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/canhme_com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
	ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

        ## OCSP Stapling
        resolver 127.0.0.1;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_trusted_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;

        # Improve HTTPS performance with session resumption
        ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1d;

        # DH parameters
        ssl_dhparam /etc/nginx/ssl/dhparam.pem;

        # Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
        add_header Strict-Transport-Security "max-age=31536000" always;
 
    	location / {
		try_files $uri $uri/ /index.php?$args;
	}
	
	# Custom configuration
	include /home/canhme.com/public_html/*.conf;
 
    	location ~ \.php$ {
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
        	include /etc/nginx/fastcgi_params;
        	fastcgi_pass 127.0.0.1:9000;
        	fastcgi_index index.php;
		fastcgi_connect_timeout 1000;
		fastcgi_send_timeout 1000;
		fastcgi_read_timeout 1000;
		fastcgi_buffer_size 256k;
		fastcgi_buffers 4 256k;
		fastcgi_busy_buffers_size 256k;
		fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;
        	fastcgi_param SCRIPT_FILENAME /home/canhme.com/public_html$fastcgi_script_name;
    	}
	location /nginx_status {
  		stub_status on;
  		access_log   off;
                allow 127.0.0.1;
                deny all;
	}
	location /php_status {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME  /home/canhme.com/public_html$fastcgi_script_name;
		include /etc/nginx/fastcgi_params;
                allow 127.0.0.1;
                deny all;
    	}
	location ~ /\. {
		deny all;
	}
        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }
       location = /robots.txt {
              allow all;
              log_not_found off;
              access_log off;
       }
	location ~* \.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|eot|svg|ttf|woff)$ {
	        gzip_static off;
		add_header Pragma public;
		add_header Cache-Control "public, must-revalidate, proxy-revalidate";
		access_log off;
		expires 30d;
		break;
        }

        location ~* \.(txt|js|css)$ {
	        add_header Pragma public;
		add_header Cache-Control "public, must-revalidate, proxy-revalidate";
		access_log off;
		expires 30d;
		break;
        }
}

server {
	listen   2313 ssl http2;
 	access_log        off;
	log_not_found     off;
 	error_log         off;
    	root /home/canhme.com/private_html;
	index index.php index.html index.htm;
    	server_name canhme.com;
        error_page 497 https://$host:2313$request_uri;
	# SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/canhme_com.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
	ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
 
	auth_basic "Restricted";
	auth_basic_user_file /home/canhme.com/private_html/hocvps/.htpasswd;
	
	location / {
		try_files $uri $uri/ /index.php;
	}
	
    	location ~ \.php$ {
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
        	include /etc/nginx/fastcgi_params;
        	fastcgi_pass 127.0.0.1:9000;
        	fastcgi_index index.php;
		fastcgi_connect_timeout 1000;
		fastcgi_send_timeout 1000;
		fastcgi_read_timeout 1000;
		fastcgi_buffer_size 256k;
		fastcgi_buffers 4 256k;
		fastcgi_busy_buffers_size 256k;
		fastcgi_temp_file_write_size 256k;
		fastcgi_intercept_errors on;
        	fastcgi_param SCRIPT_FILENAME /home/canhme.com/private_html$fastcgi_script_name;
    	}
	
	location ~ /\. {
		deny all;
	}
}

Kiểm tra lại cấu hình Nginx xem đã chuẩn chưa

nginx -t

Khởi động lại Nginx

service nginx restart

Nếu bạn dùng WordPress, hãy cài đặt plugin Really Simple SSL để tự động redirect http sang https và chuyển toàn bộ link .css, .js sang https. Thanh địa chỉ lúc này sẽ có màu xanh.

Giờ truy cập vào domain để tận hưởng thành quả thôi. Chúc bạn thành công.

97 Comments

  1. Bao Nam 10

    Xin góp các bác file của mình. Mình làm giống hocvps thì bị lỗi trên mobile. Thử remote vps ở nước ngoài vào web mình không được. ở dòng server đầu tiên mình sửa lại như sau. Chạy bình thường.

    server {
    server_name http://www.webgia.com;
    rewrite ^(.*) https://webgia.com$1 permanent;
    }
    server {
    listen 443 ssl http2;
    access_log off;
    error_log off;
    # error_log /home/webgia/logs/error.log;
    root /home/webgia/public_html;
    index index.php index.html index.htm;
    server_name webgia.com;

    # SSL
    ssl_certificate /etc/nginx/ssl/tfs/ssl-bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/tfs/tfs.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ‘ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS’;

    ## OCSP Stapling
    resolver 127.0.0.1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_trusted_certificate /etc/nginx/ssl/tfs/ssl-bundle.crt;

    # Improve HTTPS performance with session resumption
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;

    ssl_session_tickets off;

    # DH parameters
    ssl_dhparam /etc/nginx/cert/dhparam.pem;

    # Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
    add_header Strict-Transport-Security “max-age=31536000” always;

    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include /etc/nginx/fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 32k;
    fastcgi_buffers 8 16k;
    fastcgi_busy_buffers_size 32k;
    fastcgi_temp_file_write_size 32k;
    fastcgi_intercept_errors on;
    fastcgi_param SCRIPT_FILENAME /home/thefaceshop/public_html$fastcgi_script_name;
    }
    location ~ /\. {
    deny all;
    }
    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }
    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }
    location ~* \.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|eot|svg|ttf|woff)$ {
    gzip_static off;
    add_header Pragma public;
    add_header Cache-Control “public, must-revalidate, proxy-revalidate”;
    access_log off;
    expires 30d;
    break;
    }

    location ~* \.(txt|js|css)$ {
    add_header Pragma public;
    add_header Cache-Control “public, must-revalidate, proxy-revalidate”;
    access_log off;
    expires 30d;
    break;
    }
    }

  2. long 3

    Mình dùng chứng chỉ của gogetssl mà file gửi về ko thấy có *.ca-bundle thì phải làm sao vậy bạn

    1. Việt Phương Moderator

      Nếu không có trong file attach thì bạn đọc mail sẽ thấy phần -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- là nội dung trong chứng chỉ đó

        1. namduy 67

          Dear Customer!

          Thank you for choosing us to generate your CSR and SSL Private Key. Please keep this in a safe place!
          We provide most cheapest SSL Certificates and we can beat any competitor price for you

          Private Key:
          —–BEGIN PRIVATE KEY—–
          xxxxxxxxxxxxxxxxxxxxxxxxx
          —–END PRIVATE KEY—–

          CSR:
          —–BEGIN CERTIFICATE REQUEST—–
          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
          —–END CERTIFICATE REQUEST—–

          1. Việt Phương Moderator

            Không phải mail này bạn ạ. Đây là phần generate key và csr. Xong bạn sử dụng key add lên server còn csr để generate ra chứng chỉ trên site nhà cung cấp

    1. Việt Phương Moderator

      Được bạn à. Cài cho Varnish port 80 xử lý http request còn Nginx port 443 xử lý https request

  3. Tran Hung 17

    Sau khi đăng ký ssl xong mình nhận được 2 email
    1 file nén gồm
    domain_com.ca-bundle
    domain_com.crt
    1 file nén gồm
    AddTrustExternalCARoot.crt
    COMODORSAAddTrustCA.crt
    COMODORSADomainValidationSecureServerCA.crt
    domain_com.crt

    Xin hỏi những thông tin này, mình xử lý ntn? mình làm theo cách ở trên bạn hướng dẫn nhưng không thành công. (mình cũng xài varnish)

    1. Luân Trần Admin

      Bạn dùng 2 file domain_com.ca-bundle và domain_com.crt là ok rồi, trong bài hướng dẫn chi tiết đó bạn

  4. Huy 1

    400 Bad Request

    The plain HTTP request was sent to HTTPS port

    lỗi này khi truy cập quản lý HocVPS Script Admin, nếu có https thì bình thường, nhưng nếu http thì nó lỗi như này ạ, server vultr

  5. Tran Hung 17

    cho hỏi module http2 có được tích hợp với nginx của script hocvps ko vậy? cảm ơn

    1. Việt Phương Moderator

      Module này được tự động tích hợp từ phiên bản Nginx 1.9.5. Bạn kiểm tra phiên bản Nginx hiện tại nhé # nginx -v

      1. Tran Hung 17

        mình kiểm tra rồi, nhưng ko thấy nên mới hỏi
        nginx -V
        nginx version: nginx/1.10.2
        built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
        built with OpenSSL 1.0.1e-fips 11 Feb 2013
        TLS SNI support enabled
        configure arguments: –prefix=/etc/nginx –sbin-path=/usr/sbin/nginx –modules-path=/usr/lib64/nginx/modules –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock –http-client-body-temp-path=/var/cache/nginx/client_temp –http-proxy-temp-path=/var/cache/nginx/proxy_temp –http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp –http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp –http-scgi-temp-path=/var/cache/nginx/scgi_temp –user=nginx –group=nginx –with-file-aio –with-threads –with-ipv6 –with-http_addition_module –with-http_auth_request_module –with-http_dav_module –with-http_flv_module –with-http_gunzip_module –with-http_gzip_static_module –with-http_mp4_module –with-http_random_index_module –with-http_realip_module –with-http_secure_link_module –with-http_slice_module –with-http_ssl_module –with-http_stub_status_module –with-http_sub_module –with-http_v2_module –with-mail –with-mail_ssl_module –with-stream –with-stream_ssl_module –with-cc-opt=’-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong –param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic’

          1. Tran Hung 17

            Cảm ơn, làm mình search http2 ko thấy. Cho mình hỏi Sau khi đăng ký ssl xong mình nhận được 2 email
            1 file nén gồm
            domain_com.ca-bundle
            domain_com.crt
            1 file nén gồm
            AddTrustExternalCARoot.crt
            COMODORSAAddTrustCA.crt
            COMODORSADomainValidationSecureServerCA.crt
            domain_com.crt

            Xin hỏi những thông tin này, mình xử lý ntn? mình làm theo cách ở trên bạn hướng dẫn nhưng không thành công. (mình cũng xài varnish)

    1. Việt Phương Moderator

      Bạn cấu hình Nginx conf phần redirect sai nên bị lặp redirect lung tung rồi

  6. Tran Hung 17

    làm theo hướng dẫn mà vẫn ko được, thử chỗ này listen 443 ssl http2;
    thêm default_server vào cuối thì mới đc, ko hiểu sao luôn

  7. Luân Trần Admin

    Mình mới update lại cấu hình SSL tối ưu hơn, fix bug nữa, mời các bạn tham khảo.

  8. nxt_88 7

    Hi Luan Tran,

    Mình làm theo hướng dẫn và đến bước restart : service nginx restart thì gặp lỗi
    Job for nginx.service failed because the control process exited with error code. See “systemctl status nginx.service” and “journalctl -xe” for details.

    Bạn xem giúp mình với. Thanks

    1. Việt Phương Moderator

      Bạn chạy # systemctl status nginx.service# để biết lỗi cụ thể nhé. Thường là do sai cấu hình file Nginx.

      1. nxt_88 7

        Bạn xem giúp mình với 🙂 do mình mới tập tành nên ko rõ lắm. Lỗi nó thông báo :

        Last login: Wed Jan 11 04:22:04 2017 from 118.70.199.1
        root@UshineVN:~# systemctl status nginx.service
        ● nginx.service – A high performance web server and a reverse proxy server
        Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
        Active: failed (Result: exit-code) since Wed 2017-01-11 04:28:17 UTC; 1h 20mi
        Process: 9300 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code
        Process: 9297 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process

        Jan 11 04:28:16 UshineVN nginx[9300]: nginx: [emerg] bind() to [::]:80 failed (9
        Jan 11 04:28:16 UshineVN nginx[9300]: nginx: [emerg] bind() to 0.0.0.0:80 failed
        Jan 11 04:28:16 UshineVN nginx[9300]: nginx: [emerg] bind() to [::]:80 failed (9
        Jan 11 04:28:17 UshineVN nginx[9300]: nginx: [emerg] bind() to 0.0.0.0:80 failed
        Jan 11 04:28:17 UshineVN nginx[9300]: nginx: [emerg] bind() to [::]:80 failed (9
        Jan 11 04:28:17 UshineVN nginx[9300]: nginx: [emerg] still could not bind()
        Jan 11 04:28:17 UshineVN systemd[1]: nginx.service: Control process exited, code
        Jan 11 04:28:17 UshineVN systemd[1]: Failed to start A high performance web serv
        Jan 11 04:28:17 UshineVN systemd[1]: nginx.service: Unit entered failed state.
        Jan 11 04:28:17 UshineVN systemd[1]: nginx.service: Failed with result ‘exit-cod
        lines 1-16/16 (END)

          1. nxt_88 7

            Thank bạn
            Mình cài đc SSL rồi . Mình cái SSL nó vào port 80. Mình muốn deploy app vào port 80 thì phải làm thê nào nhỷ

  9. Q.Huy 14

    Có bác nào sử dụng SSL của namecheap không? Lúc active nó bắt nhập CSR code,theo hướng dẫn thì vô bài này https://www.namecheap.com/support/knowledgebase/article.aspx/9446/0/apache-opensslmodsslnginx
    run code theo hướng dẫn, nó bảo “Once all the requested information is filled in, you should have *.csr and *.key files in the folder where the command has been run.” em chả biết giờ 2 file đó nằm ở folder nào nữa @@ check date time cũng k ra

  10. 28

    Thank Luân rất nhiều, đây mới là bài mình cần, và đã làm được, trước đây có cài SSL của Let’s Engcrypt sau cài SSL positive comodo mua của namecheap và cài theo hướng dẫn của bác Thạch Phạm thì bị lỗi lên lỗi xuống, tý thì phải cài lại server tất cả là do mình

    mkdir /etc/nginx/cert/
    openssl dhparam 2048 -out /etc/nginx/cert/dhparam.pem

    và đoạn thiếu thứ 2 là mình cài SSL lên domain chính cài trên Server Hocvps thì không biết để
    Nếu bạn cài đặt SSL cho tên miền chính sử dụng HocVPS Script, cần thêm cấu hình SSL khi sử dụng port. Ví dụ khi cài đặt mình để port mặc định 2313.

    1. nxt_88 7

      bạn nói thêm cho mình với. mình cái SSL nó vào port 80. Mình muốn deploy app vào port 80 thì phải làm thê nào nhỷ

      1. Việt Phương Moderator

        Port 80 dùng cho http. Mình nghĩ bạn sửa thư mục mà root chỉ về để sang app là được.
        Đoạn root /home/hocvps.com/public_html trong file Nginx conf

        server {
        	listen   80;
        	server_name www.hocvps.com;
        	rewrite ^(.*) http://hocvps.com$1 permanent;
            	}
        server {
        	listen   80;
            	root /home/hocvps.com/public_html;
    2. Việt Phương Moderator

      Nếu bạn không cài SSL cho port quản lý thì có thể truy cập qua http://domain:port

  11. Bao Nam 10

    Mình có mua 2 SSL COMODO cho 2 domain A và B.

    Mình cài cái Aok. Đến cái B cũng làm tương tự nhưng bỏ qua bước này:

    mkdir /etc/nginx/cert/
    openssl dhparam 2048 -out /etc/nginx/cert/dhparam.pem

    Vậy có ổn không??? 2 Website vẫn đang chạy tốt
    Xin cảm ơn

    1. Việt Phương Moderator

      Phần DH parameters 2048 bit giúp bảo mật SSL Nginx tốt hơn bạn à, chứ không phải không cài thì không chạy được

      1. Bao Nam 10

        Cảm ơn Việt Phương.
        Cái A mình chạy DH parameters.
        Cấu hình cái B (cái thứ 2) Mình có cần chạy lại lệnh trên để sinh ra file dhparam không ?
        Hay cứ lấy lại DH của web A dùng tiếp ạ.

        1. Việt Phương Moderator

          Nó chung cho hệ thống nên chỉ cần thêm trong cấu hình Nginx site B là được (nếu 2 site cùng VPS nhé)

    1. Việt Phương Moderator

      Mình nghĩ park domain dùng chung SSL với domain chính. Bản chất park domain không có file cấu hình conf Nginx riêng.
      Khi đó thì SSL đó vẫn issued cho domain chính

    1. Việt Phương Moderator

      Lúc cài đặt bạn có tạo file DH parameters 2048 bit đồng thời chèn trong conf Nginx của domain không?

      1. Tran Hung 17

        có, mình thực hiện đầy đủ, tất cả các bước, hôm trước check thì A giờ vào check lại thì lại là B
        # DH parameters
        ssl_dhparam /etc/nginx/cert/dhparam.pem;
        để cho chắc ăn mình xóa thư mục rồi tạo và chạy lại
        mkdir /etc/nginx/cert/
        openssl dhparam 2048 -out /etc/nginx/cert/dhparam.pem
        mà vẫn bị điểm B

        1. Việt Phương Moderator

          Ok. Phần chèn DH parameters trong Nginx conf có trong hướng dẫn đó bạn

  12. nxt_88 7

    Add cho em hỏi em deploy app lên server digital ocean nhưng chỉ 1-2 hôm là bị lock droplet:

    We’ve detected an outgoing Denial of Service attack (http://do.co/21Y1Gc1) originating from your Droplet. Specifically, we have detected inbound traffic exceeding 0.03 Mb/s and outbound traffic exceeding 439.71 Mb/s. Due to the traffic’s harmful nature, your Droplet was taken offline; this means it is not connected to the internet and all hosted sites and services are unreachable. We know that this action is disruptive, but it’s necessary to protect you, our network, and the target of your Droplet’s attack.

    Because this means your Droplet has been compromised, you’ll need to back up your data and transfer it to a new Droplet. We have a recovery tool to assist you, but any databases on your Droplet will need to be backed up before we boot your Droplet into the recovery tool because you won’t be able to make the backups afterwards.

    Specific backup steps vary depending on the database software in use, which is most commonly MySQL. If you’re not sure how, http://do.co/1h0uWgm will show you how to back up your databases from MySQL.

    Once you have finished backing up your data, the next step is downloading and transferring your data to your new Droplet. Please update this ticket when you’re ready and we’ll configure this Droplet so you can proceed.

    Mọi người có biết tái sao ko ?

    1. Việt Phương Moderator

      DO phát hiện VPS bạn bị DDos, inbound traffic quá 0.03Mb/s còn outbound quá 439.71 Mb/s. Vì vậy, DO đã tắt VPS bạn và ngắt kênh nối internet. Việc cần làm đầu tiên là backup data và chuyển sang cái mới để DO phục hồi droplet.
      Hoặc app bạn có làm gì ảnh hưởng quá đến băng thông không?

        1. Việt Phương Moderator

          Thế bạn reply lại ticket mô tả vấn đề cho DO, bảo sai lầm gì xem lại giúp 🙂
          Hoặc VPS bạn bị DDos, hoặc cố dò pass cổng SSH

    1. Việt Phương Moderator

      Bạn truy cập website bị lỗi “No input file specified” à? Thế chắc bạn cấu hình thư mục root của web có vấn đề. Bạn gửi mình cấu hình file nginx conf
      Bạn paste qua http://pastebin.com cho gọn nhé

    1. Việt Phương Moderator

      Chỉ không dùng được song song chức năng ẩn IP thôi còn các tác vụ khác vẫn được bạn nhé

  13. Nguyen Vu 6

    Cho mình hỏi với,mình đang dùng ssl mua ở gogetssl,positive ssl,đã cài xong,vào trang chủ thì đã hiện Secure và https,nhưng khi mình vào bài viết thì lại ko hiện Secure nữa,vẫn hiện ra là https nhưng bên cạnh lại dấu i .Ko biết thế có bình thường ko ?

      1. Nguyen Vu 6

        Mình fix dc rồi,do trong các bài viết mình có chèn link ảnh nhưng để là http mới bị,đổi sang https là dc..:D

        1. Việt Phương Moderator

          Bạn phải chuyển toàn bộ link image, js, css từ http:// sang https://. View-source để xem.
          Nếu bạn dùng WordPress, hãy cài đặt plugin Really Simple SSL để tự động redirect http sang https và chuyển toàn bộ link .css, .js sang https.

          1. Nguyen Vu 6

            Mọi thứ đã xong,có điều,có vẻ site mình chậm hơn khi cài ssl,ko biết có thể khắc phục phần nào ko nhỉ ?,ko biết cài cloudflare hay plugin cache có ổn hơn ko :D.

Comment của bạn

Your email address will not be published. Required fields are marked *