Chứng chỉ SSL hiện nay được sử dụng quá phổ biến, hầu hết những website mới hay server mới đều lựa chọn kích hoạt SSL ngay từ ban đầu.

Quá trình cài đặt SSL trên server sẽ cần một số kiến thức kỹ thuật nhất định, trong bài viết này, mình sẽ hướng dẫn các bạn chi tiết cách cài đặt với 2 loại chứng chỉ phổ biến nhất cho tên miền là PositiveSSL từ Comodo và Standard SSL DV từ GoDaddy.

Cả 2 loại chứng chỉ này đều thuộc loại Domain Validation, được dùng rất phổ biến do chi phí rẻ, dễ dàng cài đặt, kích hoạt online không phải xác nhận giấy tờ thông tin gì.

Trong bài mình sẽ cài đặt SSL trên máy chủ Nginx cài đặt HocVPS Script, với các server LEMP khác thao tác cũng tương tự. 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.

Nếu cài xong mà thanh địa chỉ chưa hiện HTTPS màu xanh, hãy tham khảo bài Hướng dẫn cài đặt SSL “xanh hoàn hảo”

Nếu không nắm vững kiến thức kỹ thuật, hãy liên hệ sử dụng Dịch vụ Cài đặt SSL từ Học VPS.

1. Kích hoạt chứng chỉ

Sau khi đăng ký SSL, bạn cần phải tiến hành kích hoạt 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 file, hãy cẩn thận lưu lại Private Key này để sử dụng ở bước bên dưới. Bạn sẽ được yêu cầu cung cấp nội dung file CSR khi kích hoạt SSL.

Để có 2 key này bạn sử dụng công cụ Tạo CSR Online của Học VPS hoặc dùng lệnh openssl trên server Linux:

openssl req -new -newkey rsa:2048 -nodes -keyout example_com.key -out example_com.csr

Sau đó bạn sẽ nhận được 2 file:

  • example_com.key — Private Key cài trên server của mình.
  • example_com.csr — file CSR để gửi cho nhà cung cấp dịch vụ SSL.

2. Tạo file Bundle

Kết thúc bước này chúng ta sẽ có file ssl-bundle.crt, thứ tự các file thao tác ở bước này rất quan trọng, bạn cần lưu ý thực hiện theo cho chuẩn.

a. Chứng chỉ của Comodo

Nếu kích hoạt chứng chỉ SSL thành công, email gửi 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, lúc này có thể có 2 trường hợp.

– File nén .ZIP gồm 2 file:

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

Bạn dùng text editor, tạo file mới ssl-bundle.crt chứa nội dung của 2 file, thứ tự lần lượt: canhme_com.crt > canhme_com.ca-bundle

– File nén .ZIP gồm 3 file:

  1. canhme_com.crt
  2. COMODO_RSA_Certification_Authority.crt
  3. AddTrust_External_CA_Root.crt

Bạn dùng text editor, tạo file mới ssl-bundle.crt chứa nội dung của 3 file, thứ tự lần lượt: canhme_com.crt > COMODO_RSA_Certification_Authority.crt > AddTrust_External_CA_Root.crt

Hoặc chạy lệnh sau:

cat canhme_com.crt COMODO_RSA_Certification_Authority.crt AddTrust_External_CA_Root.crt > ssl-bundle.crt

– File nén .ZIP gồm 4 file:

  1. canhme_com.crt
  2. COMODORSADomainValidationSecureServerCA.crt
  3. COMODORSAAddTrustCA.crt
  4. AddTrustExternalCARoot.crt

Bạn dùng text editor, tạo file mới ssl-bundle.crt chứa nội dung của 4 file, thứ tự lần lượt: canhme_com.crt > COMODORSADomainValidationSecureServerCA.crt > COMODORSAAddTrustCA.crt > AddTrustExternalCARoot.crt

Hoặc chạy lệnh sau:

cat canhme_com.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > ssl-bundle.crt

– File nén .ZIP gồm 6 file (Sectigo Comodo):

  1. canhme_com.crt
  2. canhme.com.key
  3. USERTrustRSAAddTrustCA.crt
  4. SectigoRSADomainValidationSecureServerCA.crt
  5. My_CA_Bundle.ca-bundle
  6. AddTrustExternalCARoot.crt

Bạn dùng text editor, tạo file mới ssl-bundle.crt chứa nội dung của 4 file, thứ tự lần lượt: canhme_com.crt > SectigoRSADomainValidationSecureServerCA.crt > USERTrustRSAAddTrustCA.crt > AddTrustExternalCARoot.crt

Hoặc chạy lệnh sau:

cat canhme_com.crt SectigoRSADomainValidationSecureServerCA.crt USERTrustRSAAddTrustCA.crt AddTrustExternalCARoot.crt >> ssl-bundle.crt

Và file canhme.com.key chính là Private Key của chứng chỉ

b. Chứng chỉ của GoDaddy

Với chứng chỉ SSL của GoDaddy, file nén sẽ gồm 2 file, ví dụ:

  1. 9981e0dcd97c0b37.crt
  2. gdig2_bundle.crt

Bạn dùng text editor, tạo file mới ssl-bundle.crt chứa nội dung của 2 file, thứ tự lần lượt: 9981e0dcd97c0b37.crt > gdig2_bundle.crt

3. 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/ && cd /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 ssl-bundle.crt

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

nano private.key

Kiểm tra độ trùng khớp của chứng chỉ và Private Key, trùng mã MD5 là okie

# openssl x509 -noout -modulus -in ssl-bundle.crt | openssl md5
(stdin)= 334d84440715d4dc1c96ddbcf71a0f8e
# openssl rsa -noout -modulus -in private.key | openssl md5
(stdin)= 334d84440715d4dc1c96ddbcf71a0f8e

Tạo file DH parameters 2048 bit, quá trình generate sẽ hơi lâu (tạo một lần duy nhất cho 1 VPS)

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

Chỉnh sửa cấu hình Nginx domain với Nano Editor

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 default_server;

+ 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/private.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';

        # 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
        add_header Strict-Transport-Security "max-age=31536000" always;

Redirect toàn bộ 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 https://canhme.com và http://www.canhme.com sẽ tự động redirect sang https://canhme.com

Redirect toàn bộ www https sang https

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

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

	# SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/private.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
Lưu ý: Chỉ thiết lập đối với domain chính cài HocVPS – Domain phụ KHÔNG thiết lập.
Đây chỉ là bước tùy chọn, nếu bạn sử dụng Cloudflare và kích hoạt đám mây ẩn IP thì không được làm bước này. Nếu bạn không muốn dùng IP, chỉ muốn dùng domain để truy cập khu vực HocVPS Script Admin thì hãy thao tác như bên dưới.

Ví dụ khi cài đặt mình để port mặc định 2018.

Tìm block cuối cùng server { ... } có dòng listen 2018;

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

server {
	listen 2018 ssl;
 	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://$server_name:$server_port$request_uri;

        # SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/private.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:2018, không sử dụng IP nữa.

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

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

	# SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/private.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 default_server;
		
	# 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/private.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';

        # 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
        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;
    	}
	# Disable .htaccess and other hidden files
	location ~ /\.(?!well-known).* {
		deny all;
		access_log off;
		log_not_found off;
	}
        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 2018 ssl;
 	access_log        off;
	log_not_found     off;
 	error_log /home/canhme.com/logs/nginx_error.log;
    	root /home/canhme.com/private_html;
	index index.php index.html index.htm;
    	server_name canhme.com;

        error_page 497 https://$server_name:$server_port$request_uri;

	# SSL
        ssl_certificate /etc/nginx/ssl/canhme_com/ssl-bundle.crt;
        ssl_certificate_key /etc/nginx/ssl/canhme_com/private.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 / {
		autoindex on;
		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;
	}
}


_ Cấu hình SSL cho domain không phải domain chính trong HocVPS Script:

  • Không thiết lập HocVPS Admin Port
  • Bỏ tham số default_server bên cạnh listen 443

Cloudflare: Để kết hợp sử dụng CDN Cloudflare (biểu tượng đám mây vàng):

  • Thiết lập Full (strict) trong menu Crypto SSL tại trang quản lý Cloudflare.
  • Không cấu hình SSL phần Admin HocVPS. Khi đó, truy cập HocVPS Admin bằng ip:port

_ Cấu hình HTTP/2 tham khảo Kích hoạt HTTP/2 với Nginx.
_ Cấu hình OCSP Stappling tham khảo Tối ưu HTTPS trên Nginx.


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

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reload lại Nginx : service nginx reload

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. Nếu không muốn dùng plugin, bạn hãy tham khảo thêm Hướng dẫn cài đặt Let’s Encrypt trong cPanel để biết cách thao tác thủ công.

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

Comment của bạn

Lưu ý: tất cả comment đều được kiểm duyệt cẩn thận! Nếu có code bạn hãy up lên pastebin.com rồi để lại link trong comment.

397 Comments

    1. Việt Phương Moderator

      Chứng chỉ bên ý thì mình không rõ rồi. Bạn issue xong họ gửi về mấy file?
      Bên nhà cung cấp không có hướng dẫn gì thêm à?

        1. Việt Phương Moderator

          1 file duy nhất thì bạn dùng cùng với file key của bạn chắc là đủ chứng chỉ
          Hoặc nếu không thì tham khảo thêm từ nhà cung cấp, vì có 1 số nơi phần ghép thêm (CA Bundle) phải tự lên site nhà cung cấp down chứ họ không gửi kèm

  1. quocnc 2 comment

    Admin và các mod có thể làm 1 bài hướng dẫn cài đặt ssl cloudflare cho vps dùng hocvps được ko ạ 😀

  2. Gà Rừng 4 comment

    Chào admin. Trước khi cài thì mình có để 2 site wordpress chạy chung 1 database, sau khi cài chứng chỉ ssl ok thì cả 2 site thì bây giờ vào site B nó load sang site A luôn. Admin có thể giúp mình dc ko.

    1. Việt Phương Moderator

      2 site chạy chung 1 database thì phần wp-config.php bạn thiết lập gì không?

      1. Gà Rừng 4 comment

        Có bạn à. Trước khi cài ssl theo hướng dẫn thì 2 site vẫn chạy bình thường. Chỉ là chung Database thôi bạn. Sai khi cài SSL và cấu hình các file trong “/etc/nginx/conf.d” thì khi truy cập “siteB.com” nó chạy thẳng về “siteA.com”. Mình ko đụng gì đến các file “wp-config.php” cả. Cảm ơn bạn nhiều nhé.

        1. Việt Phương Moderator

          Post mình thiết lập bạn thêm vào wp-config để chạy 2 site cùng database
          Chứ bạn không thiết lập thì nó nhận site kiểu gì khi WPURL và SITEURL chỉ điền đc 1 site?

          1. Gà Rừng 4 comment

            Xin lỗi bạn mình nhầm. 2 site 2 database nhưng site B chạy thông qua site A. Sau khi cài SSL thì giờ siteB.com load thành siteA.com luôn…@@

          2. Việt Phương Moderator

            2 site 2 database riêng rẽ nhưng B chạy thông qua A? Mình không hiểu ý bạn lắm, chạy thông qua kiểu gì nhỉ

    1. Việt Phương Moderator

      Bạn lỗi chỗ nào nhỉ. Bên mình không có video hướng dẫn rồi

  3. An Le 4 comment

    Hi bạn,
    Mình có tự tạo cert, sau khi config nginx thì truy cập bằng Chrome bị chặn.
    Mình tham khảo Let’s Encrypt nhưng không có option cho ip address (mình đang chạy centos 7 vps trên Linode). Cho mình hỏi là bắt buộc phải có domain cho ip rồi mới sử dụng được ssl đúng không?
    Mình cảm ơn.

    1. Thanh LD 1 comment

      Let’s Encrypt quản lý chứng chỉ qua domain nên bắt buộc bác phải mua 1 cái rồi. K dùng IP được

  4. An Le 4 comment

    Hi bạn, cho mình hỏi nếu ssl cert là self signed certificate thì có thể valid nó được không?
    Mình cảm ơn.

    1. Việt Phương Moderator

      Chính VPS bạn phát hành sẽ valid nó mà. Nhưng sẽ có 1 số trình duyệt không chấp nhận

      1. An Le 4 comment

        Hi bạn,
        Mình có tự tạo cert nhưng bị chặn trên trình duyệt.
        Mình tham khảo Let’s Encrypt nhưng không có option cho ip address (mình dùng vps Linode Centos 7). Cho mình hỏi trường hợp này là phải có domain cho ip rồi mới sử dụng ssl được đúng không?
        Mình cảm ơn.

        1. Việt Phương Moderator

          Đúng rồi bạn. IP thì truy cập SSL làm gì đâu. Thường truy cập IP cũng là nội bộ chứ người dùng có truy cập qua domain đâu

          1. An Le 4 comment

            Cảm ơn bạn,
            Do mình đang test webservice của mình,
            API mình đặt ở vps, frontend thì mình đặt ở domain khác và connect qua API. Domain thì có ssl, còn API tại vps thì không, nên bị chặn khi connect từ domain sang. Có cách nào để không bị chặn khi connect từ domain không nhỉ?
            Sorry bạn vì mình hỏi hơi nhiều, do kinh nghiệm của mình gần như bằng 0 về linux, ssl, config.
            Mình cảm ơn.

  5. Van Long 1 comment

    Chào anh, em muốn cài thêm SSL cho domain thứ 2, mình phải làm sao vậy anh, trong bài viết em không thấy hướng dẫn cài cho domain thứ 2.. xin cảm ơn

      1. Hoàng Nhân 30 comment

        domain 2 nó toàn báo lỗi thế này .. mong ad tư vấn với

        nginx: [emerg] a duplicate default server for 0.0.0.0:443 in /etc/nginx/conf.d/domain .net.conf:22
        nginx: configuration file /etc/nginx/nginx.conf test failed

        1. Hoàng Nhân 30 comment

          domain 2 nó toàn báo lỗi thế này .. mong ad tư vấn với

          nginx: [emerg] a duplicate default server for 0.0.0.0:443 in /etc/nginx/conf.d/domain.net.conf:22
          nginx: configuration file /etc/nginx/nginx.conf test failed

          1. Luân Trần Admin

            Bạn cần kiểm tra lại cấu hình thôi, có thể gửi code lên pastebin.com mình support.

  6. Binh Nguyen 87 comment

    Cho mình hỏi tí, mình có dùng ssl comado bên namecheap và còn khoản 2 tuần nữa là hết hạn. Mình cũng có mua 1 comado mới cũng bên namecheap lun bây giờ mình active cái comado thì nó lại báo “We’re sorry, a promotional SSL certificate cannot be used to renew an expiring certificate”
    Như vậy thì nó k cho update và làm sao để add được ssl comado mới?

    1. Việt Phương Moderator

      Có vẻ chính sách đối với SSL khuyến mại là không được dùng để re-new chứng chỉ cũ. Bạn chỉ có thể tạo SSL cho 1 domain mới hoặc chờ domain cũ kia hết hạn để issue cho nó

      1. Binh Nguyen 87 comment

        Mình sp bên namecheap và hỏi nó bảo là k thể renew vs coupon sll khuyến mãi và khi hết hạn cũng k đky lại đuocej

        1. Việt Phương Moderator

          Vậy chứng chỉ khuyến mại có nhiều hạn chế thật 🙁 Mình nghĩ khi domain cũ hết hạn thì tạo chứng chỉ cho nó cũng ngang tạo mới mà nhỉ

          1. Binh Nguyen 87 comment

            Trước khi hỏi sp bên namecheap cũng từng ngĩ như bạn 🙁 ai ngờ nó nói đoạn tuyệt chỉ gia hạn mới được. Làm mấy cái ssl mua đợt giảm giá giờ k xài được :((

  7. lam 1 comment

    sao minh download ssl về ra tên file khác, cấu hình vào thì lỗi ssl-bundle.srt
    1. domain.com_com
    2. USERTrust_RSA_Certification_Authority
    3. AddTrust_External_CA_Root

    sao file thứ 2 ko phải là COMODO_RSA_Certification_Authority.crt

    và mình cũng download file trường hợp 1, nhưng thêm vào vẫn bị lỗi, bạn xem hình ở dưới, mình làm nhiều lần cũng ko được….

    https://prnt.sc/m96mn6

    Mong giúp đỡ

    1. Việt Phương Moderator

      1. Bạn dùng chứng chỉ của nhà cung cấp nào?
      2. Bạn đã tạo được file ssl-bundle.crt đâu. Nên không tồn tại file ý để bạn cho vào cấu hình Nginx

      1. Nam 2 comment

        Mình cũng đang bị lỗi tương tự. Có phải dùng lênh bên dưới để tạo file ssl-bundle.crt không mod:

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

        https://prnt.sc/olwwt1

        1. Việt Phương Moderator

          Lệnh bạn hỏi là dùng để lưu nội dung cert và key vào ssl-bundle.crt và private.key

          1. Nam 2 comment

            Mình cài xong bị lỗi này là sai ở bước nào và cách sửa ntn vậy ạ.

            nginx: [emerg] cannot load certificate “/etc/nginx/ssl/canhme_com/ssl-bundle.crt”: BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/etc/nginx/ssl/canhme_com/ssl-bundle.crt’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file)
            nginx: configuration file /etc/nginx/nginx.conf test failed

  8. Đỗ Văn Bảo 1 comment

    chào admin , em đã làm y hệt như trên nhưng lại bị báo lỗi này nghĩa là sao ạ :
    SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch

    1. Việt Phương Moderator

      Key không trùng với chứng chỉ. Có thể, chứng chỉ không được tạo ra từ key đó. Bạn kiểm tra lại nhé
      Bạn kiểm tra md5 của key và chứng chỉ giống nhau không?

  9. Phong 11 comment

    Minh cai thanh cong roi nhung tai sao luc xem tren thanh cong cu chorme
    Inssued by: CloudFare chu khong Phai cua Comondo nhi?
    Gio muon them ssl cho sub domain thi phai lam nhu the nao a?

    1. Việt Phương Moderator

      1. Bạn bật SSL của CF thì sẽ hiện CF đầu tiên. Không muốn hiện thì bạn tắt SSL CF đi
      2. Sub-domain cài bình thường như domain

      1. Phong 11 comment

        Nếu vào Crypto chọn SSL off thì không vào được website, có cách nào fix không nhi

  10. ley 1 comment

    mình dính lỗi này không biết cách khắc phục ạ
    nginx: [emerg] unknown directive “8server” in /etc/nginx/conf.d/leytruyen.com.conf:1
    nginx: configuration file /etc/nginx/nginx.conf test failed

    1. Việt Phương Moderator

      Dòng 1 của Nginx Conf leytruyen.com có kí tự bất thường “8server”. Bạn kiểm tra lại nhé

  11. quangmen93 30 comment

    Mình muốn tắt ghi access.log … Thì chỉ cần sữa

    access_log /home/domain.com/logs/access.log;

    thành

    access_log /dev/null crit;

    Phải ko ad 🙂

    1. Việt Phương Moderator

      Sửa thành như thế này bạn nhé
      access_log off;
      # access_log /home/domain/logs/access.log;

      Để ý ngay trên đó là dòng access_log off

  12. Việt Anh 1 comment

    Mình chuyển VPS nhưng bây giờ không biết lấy lại Private key như thế nào ?

    1. Việt Phương Moderator

      Nhà cung cấp không lưu private key của bạn nên nếu bạn không lưu private thì chỉ còn cách issue lại chứng chỉ thôi
      VPS cũ chắc bạn cũng xóa rồi?

  13. chung 1 comment

    hocvps cho mình hỏi chút
    trước web mình add ở google là https:domain
    giờ mình chuyển thành https://www.domain.com
    google yêu cầu chuyển hướng 301
    ở cpanel thì mình dừng .hta đc
    ở nginx mình không biết lên add thế nào
    cậu có thể hướng dẫn cho mình đc ko vậy
    mình thử dùng rule này
    server {
    server_name example.com;
    return 301 http://www.example.com$request_uri;
    }
    nó lại báo lỗi:
    nginx: [warn] conflicting server name “domain” on 0.0.0.0:80, ignored

    1. Việt Phương Moderator

      Lỗi trên là có 2 chỗ bạn cùng quy định domain:80
      Chắc bạn vừa quy định nó return301 ở block đầu xong block dưới bạn lại yêu cầu nó show document_root

  14. Quy 2 comment

    Bạn ơi cho mình hỏi, mình đã cài thành công theo hướng dẫn nhưng khi check mã chuyển hưởng nó báo mã chuyển hướng là 307 chứ không phải là 301.
    Cái này là do đâu nhỉ. bên dự án Seo của mình họ bảo phải chuyển hướng 301
    Mình chụp lại ảnh ở đây: https://sv1.uphinhnhanh.com/images/2018/09/04/Capture.jpg

    1. Việt Phương Moderator

      Nếu thế bạn cần disable HSTS đi nhé, cụ thể là xóa phần dưới
      # Enable HSTS
      add_header Strict-Transport-Security "max-age=31536000" always;

      1. Quy 2 comment

        Cảm ơn bạn, mình đã chuyển thành 301 ở phần cài đặt cái này. Đối với hướng dẫn cài ssl miễn phí ở đây: https://hocvps.com/cai-dat-lets-encrypt/ thì cũng làm tương tự phải không bạn. Sao bên đó lại không được nhỉ, cloudfale có ảnh hưởng gì không biết

  15. Nghia Huynh 3 comment

    Hi Ad, hiện tại mình đang bị lỗi này bạn có thể hỗ trợ giúp mình được không?
    —-
    nginx: [emerg] BIO_new_file(“/etc/nginx/ssl/willcert_cer_exp2020.crt”) failed (SSL: error:0200100D:system library:fopen:Permission denied:fopen(‘/etc/nginx/ssl/willcert_cer_exp2020.crt’,’r’) error:2006D002:BIO routines:BIO_new_file:system lib)

    1. Việt Phương Moderator

      Nginx đang không có quyền hạn với chứng chỉ
      1. Bạn chạy Nginx trên user nào?
      2. ls -al /etc/nginx/ssl ra kết quả gì
      3. Bạn có disable Selinux không sestatus
      4. Bạn dùng chứng chỉ tự kí đúng không? Selfsigned

      1. Nghia Huynh 3 comment

        Cảm ơn P, sau khi mình disable Selinux thì nginx của mình đã nhận đc 2 file key .crt và .key. Ngoài ra mình sử dụng CA bên thứ 3 chớ hok phải Selfsigned. Bạn cho mình hỏi thêm là nếu như mình tắt Selinux thì Nginx hoạt động có sao không, có cách nào cho Selinux allow Nginx không?

        1. Việt Phương Moderator

          Disable Selinux không sao nhé bạn. Còn vấn đề Selinux với Nginx mình không rõ rồi

  16. Hai Minh 3 comment

    Mình đã cài SSL Codomo mua từ namecheap trên hocvps (centos 6). Giờ mình renew thì nó kêu mình activate lại. Vậy ở quá trình renew thì mình có cần phải làm hết quá trình như bài này không hay chỉ cần thay ở phần nào thôi?

    1. Việt Phương Moderator

      Bạn renew xong thì tải chứng chỉ mới về tạo lại và thay thế vào vị trí chứng chỉ cũ là được

  17. Khai 2 comment

    Mình cấu hình SSL thành công nhưng mỗi lần restart server phải chạy lên 1 lệnh này mới dc.
    firewall-cmd –add-port=443/tcp
    . Bạn có cách nào chỉ giúp mình set defauft cho cổng 443 ko vậy? mình cảm ơn

  18. 4 comment

    Cho mình hỏi mình lỡ cài chứng chỉ Let’s Encrypt

    Sau khi cài đặt wordpress thì khi dùng upload file ( bằng wordpress hay file manager) đều báo lỗi
    This site can’t provide a secure connection
    *….xyz sent an invalid response.
    Try running Windows Network Diagnostics.
    ERR_SSL_PROTOCOL_ERROR

    Lỗi này sửa ntn vậy các bác?

    1. Việt Phương Moderator

      Bạn cài SSL chưa đầy đủ rồi. Cho mình Nginx Conf của site bạn cài

      1. 4 comment

        File nginx.conf

        user nginx;
        worker_processes 1;
        worker_rlimit_nofile 260000;

        error_log /var/log/nginx/error.log warn;
        pid /var/run/nginx.pid;

        events {
        worker_connections 2048;
        accept_mutex off;
        accept_mutex_delay 200ms;
        use epoll;
        #multi_accept on;
        }

        http {
        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
        ‘$status $body_bytes_sent “$http_referer” ‘
        ‘”$http_user_agent” “$http_x_forwarded_for”‘;

        #Disable IFRAME
        add_header X-Frame-Options SAMEORIGIN;

        #Prevent Cross-site scripting (XSS) attacks
        add_header X-XSS-Protection “1; mode=block”;

        #Prevent MIME-sniffing
        add_header X-Content-Type-Options nosniff;

        access_log off;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay off;
        types_hash_max_size 2048;
        server_tokens off;
        server_names_hash_bucket_size 128;
        client_max_body_size 0;
        client_body_buffer_size 256k;
        client_body_in_file_only off;
        client_body_timeout 60s;
        client_header_buffer_size 256k;
        client_header_timeout 20s;
        large_client_header_buffers 8 256k;
        keepalive_timeout 10;
        keepalive_disable msie6;
        reset_timedout_connection on;
        send_timeout 60s;

        gzip on;
        gzip_static on;
        gzip_disable “msie6”;
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css application/json text/javascript application/javascript text/xml application/xml application/xml+rss;

        include /etc/nginx/conf.d/*.conf;
        }

        File config cho domain

        server {
        listen 443 ssl;
        server_name http://www.mytutorial.xyz;

        # SSL
        ssl_certificate /etc/letsencrypt/live/mytutorial.xyz/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mytutorial.xyz/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

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

        server {
        listen 443 ssl default_server;

        # access_log off;
        access_log /home/mytutorial.xyz/logs/access.log;
        # error_log off;
        error_log /home/mytutorial.xyz/logs/error.log;

        root /home/mytutorial.xyz/public_html;
        index index.php index.html index.htm;
        server_name mytutorial.xyz;

        # SSL
        ssl_certificate /etc/letsencrypt/live/mytutorial.xyz/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mytutorial.xyz/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

        # 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
        add_header Strict-Transport-Security “max-age=31536000” always;

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

        # Custom configuration
        include /home/mytutorial.xyz/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/mytutorial.xyz/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/mytutorial.xyz/public_html$fastcgi_script_name;
        include /etc/nginx/fastcgi_params;
        allow 127.0.0.1;
        deny all;
        }
        # Disable .htaccess and other hidden files
        location ~ /\.(?!well-known).* {
        deny all;
        access_log off;
        log_not_found off;
        }
        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 3456 ssl;

        access_log off;
        log_not_found off;
        error_log /home/mytutorial.xyz/logs/nginx_error.log;

        root /home/mytutorial.xyz/private_html;
        index index.php index.html index.htm;
        server_name mytutorial.xyz;

        error_page 497 https://$server_name:$server_port$request_uri;

        ssl_certificate /etc/letsencrypt/live/mytutorial.xyz/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mytutorial.xyz/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

        auth_basic “Restricted”;
        auth_basic_user_file /home/mytutorial.xyz/private_html/hocvps/.htpasswd;

        location / {
        autoindex on;
        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/mytutorial.xyz/private_html$fastcgi_script_name;
        }

        location ~ /\. {
        deny all;
        }
        }

        1. 4 comment

          À em biết nguyên nhân rồi. Chỉ cần chỉnh
          nginx.conf
          dòng
          client_max_body_size 0;

  19. Binh Nguyen 87 comment

    Thứ tự mình tạo ssl của comado như sau:
    – Tạo Private key và CSR file từ Tạo CSR Online của Hocvps
    – Mình gửi csr file lên comado và được 2 file mydomain_com.crt, mydomain_com.ca-bundle
    – sau đó tạo ssl-bundle.crt chứa nội dung của 2 file, thứ tự lần lượt: mydomain_com.crt > mydomain_com.ca-bundle
    – Mình làm tiếp theo các bước như trên thì Mình test lại nginx nó báo lỗi như sau:
    nginx -t
    nginx: [emerg] PEM_read_bio_X509_AUX(“/etc/nginx/ssl/mydomain_com/ssl-bundle.crt”) failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)
    nginx: configuration file /etc/nginx/nginx.conf test failed

    1. Việt Phương Moderator

      Bạn so nội dung của mydomain_com.crt mydomain_com.ca-bundle và ssl-bundle.crt
      Nó có thể mất 1 dấu xuống dòng giữa 2 file. Đúng là như thế này
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----

      Sai là như thế này -----END CERTIFICATE----------BEGIN CERTIFICATE-----
      Đơn giản nhất bạn kiểm tra MD5 của cert và key xem trùng không

  20. Binh Nguyen 87 comment

    Cho mình hỏi mình lỡ cài chứng chỉ Let’s Encrypt
    giờ mình mún cài ssl comado thì vẫn cài các bước trên bình thường phải k vậy?

    1. Việt Phương Moderator

      Đúng rồi bạn, thay đường dẫn file chứng chỉ comodo vào Nginx Conf. Và bạn có thể xóa chứng chỉ Let’s đi nếu không cần

  21. Binh Nguyen 87 comment

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

    mkdir -p /etc/nginx/ssl/canhme_com/ canhme_com Là mặc định hay thay đổi theo domain? Và cũng trong thư mục canhme_com sẽ lưu 2 file của comado gửi (com.crt, ca-bundle) đúng k ạ?

    1. Việt Phương Moderator

      Đúng rồi bạn. Thư mục như thế nào cũng được, sau bạn điền đường dẫn thư mục vào Nginx Conf cho đúng là được. Và cần tạo ssl-bundle.crt từ 2 file .crt và ca-bundle bạn bảo nhé

  22. Nguyen Toan 6 comment

    Mình cài ssl trên nginx xong ko truy cập được phpmyadmin nhỉ? truy cập nó báo từ chối kết nối (refused to connect)

  23. Lưu Doanh 3 comment

    Mình cứ thêm đoạn ssl đã được tối ưu kia là nó bị lỗi luôn vps của vultr. Lần trước mình vẫn làm được. B xem giúp mình với.
    đây là file domain.conf của mình. mình đã tạo đúng thư mục ssl rồi.

    server {
    listen 80;

    server_name http://www.truyentranhaz.stream;
    rewrite ^(.*) http://truyentranhaz.stream$1 permanent;
    }

    server {
    listen 443 ssl default_server;

    # access_log off;
    access_log /home/truyentranhaz.stream/logs/access.log;
    # error_log off;
    error_log /home/truyentranhaz.stream/logs/error.log;

    root /home/truyentranhaz.stream/public_html;
    index index.php index.html index.htm;
    server_name truyentranhaz.stream;

    # SSL
    ssl_certificate /etc/nginx/ssl/truyentranhaz_net/ssl-bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/truyentranhaz_net/private.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’;

    # 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
    add_header Strict-Transport-Security “max-age=31536000” always;
    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    # Custom configuration
    include /home/truyentranhaz.stream/public_html/.htaccess.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 $document_root$fastcgi_script_name;
    }

    location /nginx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    allow 45.77.250.221;
    deny all;
    }

    location /php_status {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include /etc/nginx/fastcgi_params;
    allow 127.0.0.1;
    allow 45.77.250.221;
    deny all;
    }

    # Disable .htaccess and other hidden files
    location ~ /\.(?!well-known).* {
    deny all;
    access_log off;
    log_not_found off;
    }

    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 2030;

    access_log off;
    log_not_found off;
    error_log /home/truyentranhaz.stream/logs/nginx_error.log;

    root /home/truyentranhaz.stream/private_html;
    index index.php index.html index.htm;
    server_name truyentranhaz.stream;

    auth_basic “Restricted”;
    auth_basic_user_file /home/truyentranhaz.stream/private_html/hocvps/.htpasswd;

    location / {
    autoindex on;
    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 $document_root$fastcgi_script_name;
    }

    location ~ /\. {
    deny all;
    }
    }

      1. Lưu Doanh 3 comment

        Cảm ơn bạn. Do file ssl-bumble của mình bị lỗi mình sửa được rồi. Cho mình hỏi thêm là website của mình giờ khoản 1gb dữ liệu database online tầm hơn 100 người. Mà mình dùng gói 20$ của vultr. Mà mới có tầm 50 người online mà cpu nó toàn hơn 100% rồi. Phương có khác nào khắc phục không chỉ giúp mình với.
        https://i.imgur.com/sgNhFSX.png

        1. Việt Phương Moderator

          Bạn dùng cách trình cache gì? Mà database đc sử dụng liên tục vậy

          1. Lưu Doanh 3 comment

            Mình dùng hocvps script với cài thêm mancached nữa thôi. Hay là mình phải tối ưu lại code nhỉ?

  24. Nam 2 comment

    Làm theo các bước như này tức là đã 301 redirect rồi phải không nhỉ?
    Tại vì thấy ahref giờ nó vẫn đang thống kê cả 2 link http và https

      1. Nam 2 comment

        Mình theo dõi thấy lượng index cua mình đang bị tăng từ 800 lên tới hơn 1000 rồi
        Hình như nó đang index của http lẫn https

  25. Hùng 5 comment

    Giả sử đổi vps từ digitalocean sang vultr thì phải tạo lại DH parameters 2048 bit phải không nhỉ?

  26. Tu Nguyen 5 comment

    Cảm ơn bài viết, mình đã cài thành công 5-6 lần với hướng dẫn này.
    Nhưng lần này làm cả ngày không được, nhờ mọi người xem giúp.
    Mình dùng vultr, cài chứng chỉ comodo của gogetssl
    Vấn đề của mình là khi mình up file lên server chỗ đường dẫn .well-known/pki-validation/ để xác thực domain thì luôn gặp lỗi 403 Forbidden nginx

    Vì thế không xác thực được, mình không có cách xác thực khác khi không có email còn cho vào DNS của PA cũng không được.

    Mình đã thử upload cái file xác thực vào thư mục gốc public_html hoặc thư mục không bắt đầu bằng dấu . thì vẫn vào được bình thường.

    Mình đã thử thêm đoạn code
    location ^~ /.well-known/pki-validation/ {
    allow all;
    default_type “text/plain”;
    }
    Như hướng dẫn trên mạng nhưnng lỗi 403 đó vẫn hiện ra!

    Cảm ơn ae.

    1. Việt Phương Moderator

      Cho mình nội dung Nginx Conf của domain đó
      Và bạn up lên đã phân quyền webserver cho file đó chưa?

      1. Tu Nguyen 5 comment

        Cảm ơn bạn,
        Mình thầy quyền của file đó giống các file khác là 644 nên mình không biết phân quyền gì nữa? Mình cũng thử tích thêm các quyền khác nhưng vẫn không được. Phân quyền đó có phải phân quyền webserver không?
        Xem giúp mình nội dung file conf hiện tại thế này

        server {
        listen 80;

        server_name http://www.magiamgiatiki.com.vn;
        rewrite ^(.*) http://magiamgiatiki.com.vn$1 permanent;
        }

        server {
        listen 80;

        # access_log off;
        access_log /home/magiamgiatiki.com.vn/logs/access.log;
        # error_log off;
        error_log /home/magiamgiatiki.com.vn/logs/error.log;

        root /home/magiamgiatiki.com.vn/public_html;
        index index.php index.html index.htm;
        server_name magiamgiatiki.com.vn;

        # Custom configuration
        include /home/magiamgiatiki.com.vn/public_html/*.conf;

        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/magiamgiatiki.com.vn/public_html$fastcgi_script_name;
        }
        location ^~ /.well-known/pki-validation/ {
        allow all;
        default_type “text/plain”;
        }

        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;
        }
        }

        1. Việt Phương Moderator

          Bạn xóa phần của bạn

          location ^~ /.well-known/pki-validation/ {
          allow all;
          default_type “text/plain”;
          }
          location ~ /\. {
          deny all;
          }

          thay bằng phần này rồi restart lại Nginx. Nhớ clear cache trình duyệt để kiểm tra lại link

          # Disable .htaccess and other hidden files
          location ~ /\.(?!well-known).* {
          deny all;
          access_log off;
          log_not_found off;
          }

          1. Tu Nguyen 5 comment

            Mình làm được rồi, cảm ơn bạn.
            Cho mình hỏi thêm là:
            Sau khi chạy xác nhận xong thì có cần sửa lại file conf này cho nó về ban đầu hay cứ để vậy cũng được?

          2. Việt Phương Moderator

            Cứ để vậy. Cấu hình của HocVPS bản mới dùng dòng này đó.

    1. Việt Phương Moderator

      Bạn thực hiện như bài hướng dẫn đó, bản chất nó là chứng chỉ Comodo thôi. Loại 2 file crt và ca-bundle

  27. Huy Nguyễn 2 comment

    Sau khi mình làm theo hướng dẫn thì truy cập link quản lý admin web script học vps thì báo lỗi 403 Forbidden sau khi đăng nhập xong.
    Không hiểu là lỗi thế nào nhỉ?
    AE giúp với. cảm ơn nhiều.

    1. Việt Phương Moderator

      Cho mình nội dung file cấu hình Nginx của domain mà bạn vừa cài

      1. Huy Nguyễn 2 comment

        Mình copy y nguyên File ở trên bạn à, mình chỉ sửa mỗi đường dẫn các file cho đúng thôi.

        1. Việt Phương Moderator

          Chính vì bạn copy y nguyên nên mình mới nghi ngờ điều đó. Bạn không cung cấp thì không giúp được đâu

  28. Dao Quoc Dai 5 comment

    Chào các bạn,
    Hiện tại mình đang bị một vấn đề là trong cùng một VPS, có tên miền đã cài đặt SSL, ví dụ là: ssl.com, còn tên miền khác thì không cài ssl, ví dụ là: nossl.com
    Vấn đề mình gặp phải là khi truy cập vào tên miền nossl.com dưới dạng https://nossl.com thì ra một trang cảnh báo, rồi hiển thị cả nội dung file SSL của site ssl.com lên, sau đó là nút Tiếp tục truy cập (không an toàn) -> khi bấm vào đây nó tự nhảy sang site ssl.com
    Không rõ ở đây đã bạn nào gặp trường hợp này chưa, và xử lý nó như nào nhỉ?

    1. Việt Phương Moderator

      1. Nếu site bạn không cài SSL thì người dùng đâu ai đi gõ https và các search engine cũng không index link https? Bình thường có cài SSL thì người dùng cũng đã k gõ https trước domain mấy rồi
      2. Đây là tính năng default_server của Nginx. Tất cả các request không đích đến sẽ show ra site mặc định. Trong trường hợp này bạn không quy định nossl:443 (tức https nossl) thì khi bạn đòi truy cập nossl:443(tức https nossl) sẽ show ra site mặc định là site ssl kia
      Thường mình không xử lý, vì như lý do 1 đó
      Còn nếu bạn cần thì có thể quy định nossl:443, cho nó redirect về nossl:80 (tức http nossl)

      1. Dao Quoc Dai 5 comment

        Trường hợp của mình xảy ra khi đổi nhà cung cấp VPS, dùng SSL free của Let, nên mỗi lần chuyển phải chờ trỏ lại IP mới cài được. Có lần chờ mãi không thấy nhận IP mới để cài, nên vất đó đi làm việc khác, sau quên luôn. 2 ngày sau thì thấy cái site ssl.com ăn đầy link 404 của site nossl.com, thực tế là site nossl.com trước đó cũng có ssl và đã được google index link https -> đây chính là lúc người dùng truy cập vào theo link https. Nên mình mới cần tìm cái lệnh để khi người ta truy cập vào site nossl.com khi nó chưa được cài ssl thì nó tự chuyển về http thay vì để người dùng bấm vào cái nút xem tiếp gì đó nó sẽ nhảy sang site ssl.com kia và gây lỗi 404, mà test thử mấy lệnh chưa được. Bạn có đoạn mã này thì giúp mình với, cảm ơn nhiều!

          1. Việt Phương Moderator

            Giống phương pháp của mình. Nhưng HTTPS thay vì redirect về HTTP thì họ sẽ show 410 Gone.
            Và đều cần 1 cert để xử lý cái HTTPS đó. Khuyên bạn nên dùng Let’s Encrypt hơn là Self-signed cert, do nhiều trình duyệt k chấp nhận self-signed cert

    1. Việt Phương Moderator

      File Key và CSR được tự tạo ngay từ đầu mà. Hoặc bạn có thể dùng công cụ của HocVPs để tạo

      1. Anh Le 4 comment

        nginx: [emerg] unexpected “E” in /etc/nginx/conf.d/wapmienphi.info.conf:37
        nginx: configuration file /etc/nginx/nginx.conf test failed
        lỗi này là sao ad

          1. Anh Le 4 comment

            Mình copy nguyên mà 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’;

  29. Huy 26 comment

    Mình cài SSL như hướng dẫn, sau khi cài xong bị lỗi “Your connection to this site is not fully secure”. Url vẫn có https:// bình thường nhưng không hiển thị ổ khóa màu xanh. Site có cài plugin Really simple SSL. Fix lỗi này như thế nào vậy ad?

    1. Huy 26 comment

      Mình mới bấm F12 trong folder conf.d/example.com.conf thì thấy hiện thị lỗi có nội dung như sau: [Spell checking failed: Error invoking “hunspell”: Unknown error 1657]

      Lỗi này là lỗi gì và khắc phục thế nào Phương nhỉ?

      1. Việt Phương Moderator

        Không. Liên quan gì đến folder trong SSH đâu? F12 trong website mà. Website bạn là gì?

  30. long 16 comment

    cho mình hỏi VPS mình có cài 2 website sử dụng SSL theo hướng dẫn của hocvps. Nhưng chỉ vào được 1 site, còn 1 site bị lỗi, Chrome báo “This site can’t be reached”. Khi mình tắt 1 site đi thì site lỗi lại vào được. Phải khắc phục sao đây 🙁

    1. Việt Phương Moderator

      Cho mình Nginx Conf của 2 site. Và nginx -t của bạn thông báo như thế nào khi dùng Nginx Conf đó

      1. long 16 comment

        2 file mình đều dùng cấu hình giống bài hướng dẫn, chỉ thay đổi đường dẫn đến các file thôi.
        Nginx -t nó báo
        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/nginx.conf test is successful

          1. Việt Phương Moderator

            Uhm bạn. Trong Nginx phải có 1 site là mặc định điều hướng các request không xác định

  31. Thiện 5 comment

    hôm qua đã cấu hình ssl ok nhưng giờ vô lại thì báo

    “Trang này hiện không hoạt động
    amein.net đã chuyển hướng bạn quá nhiều lần.
    Thử xóa các cookie của bạn.
    ERR_TOO_MANY_REDIRECTS”

    em lấy File cấu hình Nginx cuối cùng để add vào
    sau đó chỉnh tự gia hạn, giờ nó báo vậy

    1. Việt Phương Moderator

      File cấu hình Nginx bạn như thế nào. Và nginx -t với service nginx status ra kết quả như thế nào

      1. Thiện 5 comment

        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/nginx.conf test is successful
        ——————————————————
        em đâu đụng gì file nginx chỉ cài chứng chỉ ssl thôi thì bị vậy

  32. Huy 26 comment

    Mình đăng ký PositiveSSL và kích hoạt được gần 1 năm rồi, bữa nay gia hạn lại từ đầu, bên NameCheap yêu cầu là để tiếp tục sử dụng PositiveSSL, thì phải xóa hết thông tin của SSL cũ đi và cài lại từ đầu. Như vậy có nghĩa là thế nào vậy Luận?

    1. Việt Phương Moderator

      Tức là không gia hạn trên chứng chỉ cũ mà họ sẽ phát hành 1 chứng chỉ mới. Bạn sẽ phải cài đặt lại chứng chỉ mới đó vào VPS (như đã làm với chứng chỉ cũ)

  33. DO DINH TUAN 56 comment

    Chào bạn ! Mình dùng VPS có sử dụng hocvps scrit. và đã cài thành công ssl comodo như hướng dẫn ở trên. Nhưng giờ mình ko muốn sử dụng ssl nữa và muốn gỡ ra thì làm ntn hả bạn! Mình cảm ơn bạn!

    1. Việt Phương Moderator

      Bạn chỉnh sửa cấu hình Nginx Conf về ban đầu + Thêm cấu hình redirect HTTPS về HTTP
      Trong đó, bạn cần 1 chứng chỉ SSL để giải quyết các request về HTTPS. Bạn có thể xài tạm Let’s Encrypt

      server {
      listen 443 ssl;
      server_name canhme.com www.canhme.com;
      rewrite ^(.*) https://canhme.com$1 permanent;
      ssl_certificate file_cert;
      ssl_certificate_key file_key;
      }

      1. DO DINH TUAN 56 comment

        Đơn giản vậy ak bạn! vậy mình vẫn để ssl commodo lại vì mình đã đăng ký 3 năm rồi. Nhưng mình muốn đưa website về http chứ ko phải là https nữa. và mọi url cũ sẽ tự động redict 301 từ https về http thì làm ntn bạn???

          1. DO DINH TUAN 56 comment

            vậy công việc của mình bây giờ là giữ nguyên cấu hình và các file chưa thư mục ssl. Nginx Conf về ban đầu + Thêm cấu hình redirect HTTPS về HTTP đúng ko bạn!