Category Archives: Server Centos

block User Agent với Nginx

Issue: block user với ip ngoài location cung cấp dịch vụ nhưng không chặn bot google, yandex…

1st step:Enable access log to get an idea of the visitors who have been visiting their websites

  + Edit nginx.conf: nano /etc/nginx/nginx.conf or vhost domain conf: /etc/nginx/conf.d/domain.com.conf

=> change “access_log off”; => “access_log on”;

=> Restart server 

Ref to analyze log: https://tangduongtrieu.com/phan-tich-log-cua-vps-tu-co-ban-den-nang-cao/#check-log-tung-domain

=> Command to extract log:

             + Lấy log của một ngày cụ thể: grep -w ’05/Dec/2020′ /home/nginx/domains/domain.com/log/access.log 

             + Xuất ra log trong ngày và điều kiện “hoặc”: grep -w ’05/Dec/2015.*google\|04/Dec/2015.*google’ /home/nginx/domains/domain.com/log/access.log  => Chỉ lấy các dòng có chuổi là “05/Dec/2015” và “google” HOẶC có chuổi là “04/Dec/2015” và “google”

+ Xuất ra tất cả các IP có >10 kết nối trong ngày:

             grep -w ’05/Dec/2015′ /home/nginx/domains/domain.com/log/access.log | grep -o ‘[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}’ | sort | uniq -cd | sort -nr | grep -v ‘^ *[1-9] ‘

            + Thoát khỏi “grep”: Ctrl + C

2nd step: Open domain conf file:

server {
    listen       80 default_server;

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

    # case sensitive matching
    if ($http_user_agent ~ (Antivirx|Arian)) {
        return 403;
    }

    # case insensitive matching
    if ($http_user_agent ~* (netcrawl|npbot|malicious)) {
        return 403;
    }

    ....
}

Ý nghĩa:

  • case sensitive matching: phân biệt chữ in hoa, chữ in thường
  • case insensitive matching: không phân biệt in hoa, in thường

+ Phân tích access.log để tìm header cần filter 

+ Một số khái niệm cơ bản:

$http_user_agent: The user agent string is a text that the browsers themselves send to the webserver to identify themselves

Tham khảo: 

https://community.vpssim.vn/viewtopic.php?t=211 – Hướng Dẫn Bật “Access_log” Cho Domain Trên VPS

Hướng dẫn block User Agent với Nginx: https://hocvps.com/block-user-agent-nginx/

How do I block multiple http user agents?: https://www.cyberciti.biz/faq/unix-linux-appleosx-bsd-nginx-block-user-agent/

Analyze User Agent string: http://www.useragentstring.com/

https://serverfault.com/questions/760359/nginx-allow-deny-based-on-ip-user-agent-combination

Tool: https://github.com/mitchellkrogza/nginx-ultimate-bad-bot-blocker

https://www.techieshelp.com/nginx-block-ip-address-subnet-and-user-agent-guide/

Addon domain, SSL, domain hiển thị là domain user nhập vào

Issue: Site gốc: DomainA.com & domain addon: domainB.com => khi người dùng nhập domain B thì sẽ chỉ về site gốc & hiển thị tên domain B.

Cách làm: 

1. Tạo acc Domain B … và tạo luôn SSL Free

2. vào /etc/nginx/conf.d … tìm file domainB.conf và tìm và edit

CODE: 

root /home/domainB/public_html;
include /etc/nginx/conf/ddos2.conf;
index index.php index.html index.htm;
    	server_name domainB;

Sửa root thành folder A

CODE: 

root /home/domainA/public_html;
include /etc/nginx/conf/ddos2.conf;
index index.php index.html index.htm;
    	server_name domainB;

Tìm tiếp cuối trang
Sửa fastcgi_param SCRIPT_FILENAME /home/domainB/public_html$fastcgi_script_name; về DomainA

CODE: 

    	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 250;
		fastcgi_send_timeout 250;
		fastcgi_read_timeout 250;
		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/domainB/public_html$fastcgi_script_name;
    	}

Sửa thành

CODE: 

    	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 250;
		fastcgi_send_timeout 250;
		fastcgi_read_timeout 250;
		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/domainA/public_html$fastcgi_script_name;
    	}

3. Sửa file wp-config.php (domain chính):

define(‘WP_SITEURL’, ‘http://’ . $_SERVER[‘HTTP_HOST’]); define(‘WP_HOME’, ‘http://’ . $_SERVER[‘HTTP_HOST’]);

4. 

Chú ý:

+ Domain add thêm cũng phải có chứng chỉ SSL của riêng nó, domain nào dùng chứng chỉ SSL của domain đấy.

+ Đối với WordPress, cần tùy chỉnh wp-config.php cho phép chạy 2 domain cho 1 thư mục code nữa, mặc định nó chỉ cho phép 1 domain thôi => cấu hình cụ thể?

Mở file config của domain a: domaina.conf thêm domain muốn addon domain vào dòng server_name : server_name domaina domainb;

Tiếp đến mở file wp_config.php domain a thêm 2 dòng này sau: 

 <?php 

Chú ý: sau khi tạo chứng chỉ SSL cho domain park xong thì xoá vhost của domain đó đi, ta chỉ cần sử dụng chứng chỉ đã tạo ra thôi.

Trên vhost của domain chính, bạn thêm vào dòng này:

server {
    listen       443 ssl http2;
    server_name  domainparked.com;
ssl_certificate /etc/nginx/auth-acme/domainparked.com/domainparked.com.crt;
ssl_certificate_key /etc/nginx/auth-acme/domainparked.com/domainparked.com.key;
ssl_trusted_certificate /etc/nginx/auth-acme/domainparked.com/domainparked.com.ca;
}

Tham khảo cách cấu hình wp-config.php: 

You will either have to use wpmu somehow (wordpress multisite has been integrated into wordpress) or you can enable the wordpress (multisite feature)[http://codex.wordpress.org/Create_A_Network].

It is as easy as:

// wp-config.php
define('WP_ALLOW_MULTISITE', true);

Source: https://community.vpssim.vn/viewtopic.php?t=388

Reference:
https://stackoverflow.com/questions/11553122/1-wordpress-installation-2-domains?rq=1
https://www.inmotionhosting.com/support/email/htaccess/redirect-without-changing-url
+ Nginx Proxy pass: https://stackoverflow.com/questions/47866186/nginx-rewrite-location-without-changing-url
https://serverfault.com/questions/927820/nginx-rewrite-url-without-changing-browser-address
https://stackoverflow.com/questions/43447040/nginx-redirect-domain-to-subdomain-url-with-persist-url
https://www.liquidweb.com/kb/redirecting-urls-using-nginx/

Proxy pass: https://serverfault.com/questions/816800/redirect-a-domain-to-another-without-change-in-url-in-nginx
Example: https://www.digitalocean.com/community/questions/nginx-have-two-url-address-locations-on-single-domain

NGINX Browser Caching Not Working with Pagespeed module

This directives not working => Nginx ignores this cache control directive of 30d:

location ~* \.(ico|css|js|gif|jpeg|jpg|png|woff|ttf|otf|svg|woff2|eot)$ {
root
/var/app/current/app/dist/client/; #if i comment this out it, my css and js files are not found...
expires
30d;
access_log off
;
log_not_found off
;
add_header
Pragma "public";
add_header
Cache-Control "public";
}


Reason: Pagespeed interfering with ‘Expires’ directive on static files

Because PageSpeed is loading the files directly from the filesystem, no custom headers will be set.

Example of Nginx directive of pagespeed module:

pagespeed LoadFromFile "http://www.example.com/static/" "/var/www/static/";

This directive tells PageSpeed to load all resources whose URLs start with http://www.example.com/static/  from the filesystem under /var/www/static/. For example, http://www.example.com/static/images/foo.png will be loaded from the file /var/www/static/images/foo.png. However, http://www.example.com/bar.jpg will still be fetched using HTTP. If you have resources that need to be served with custom headers, such as Cache-Control: private, you need to exclude them from LoadFromFile. For resources PageSpeed rewrites in-place it will set a 5-minute cache lifetime by default, which you can adjust by changing LoadFromFileCacheTtlMs.

Solution: Add this setting to the domain.conf:

pagespeed LoadFromFile "http://example.com" "/var/www"
pagespeed LoadFromFileCacheTtlMs 31556926000;

Source: https://github.com/apache/incubator-pagespeed-ngx/issues/1418

Nginx configuration – add header and explanation

add_header Pragma public: the standard says for a Cache-Control: public - Indicates that the response MAY be cached by any cache

add_header Cache-Control “public, must-revalidate, proxy-revalidate”;

+ must-revalidate: tells caches that they must obey any freshness information you give them about a representation. HTTP allows caches to serve stale representations under special conditions; by specifying this header, you’re telling the cache that you want it to strictly follow your rules.

proxy-revalidate: similar to must-revalidate, except that it only applies to proxy caches.

Source: https://gist.github.com/philipstanislaus/654adafad91efb6de230845b5bdeae61

Tham khảo Nginx Pitfall and common mistakes: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/

Tham khảo thêm:

location ~ \.(css|js|htc)$ {
    add_header Pragma "public";
    add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
         log_not_found off;
         access_log off;

}
location ~ \.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$ {
    add_header Pragma "public";
    add_header Cache-Control "max-age=3600, public, must-revalidate, proxy-revalidate";
         log_not_found off;
        access_log off;

}
location ~ \.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|eot|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mp
e|mpp|otf|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|svg|svgz|swf|tar|tif|tiff|ttf|ttc|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$
 {
    add_header Pragma "public";
    add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate";
         log_not_found off;
         access_log off;

}

We use this on a very busy site with very good effect.

Source: https://serverfault.com/questions/515501/add-expires-header-conditionally-based-on-mime-type-in-nginx

Quản lý memcached

Kiểm tra Memcached có chạy không:

using Telnet, log in to your server SSH terminal and write below command:

  1. telnet localhost 11211

or

  1. telnet 127.0.0.1 11211

P.S: The above command will run if the local server is your Memcached server.

If the above command runs successfully, you will get the below result:

  1. Connected to localhost.
  2. Escape character is ‘^]’.

Otherwise, you will get a connection error.

Kiểm tra các thông số hoạt động của Memcached:

To check some basic stats you can use below command: stats

To check the items, use: stats items

To check current memory statistics write: stats slabs

To quit the connection type quit and press enter.

Top Memcached metrics to monitor

System memory

Make sure that you’re not running out of physical memory on your Memcached machines. If memory pages used by Memcached begin being swapped to disk, requests will be slowed significantly, and you may not benefit from using Memcached at all.

Fill percent and evictions

It’s a good idea to keep track of the amount of free space in your cache. When a full cache is encountered when storing data, the cache will evict an older, unused item from the cache, and replace it with the new item. If your cache is constantly full, you may want to increase the size of your cache, reduce the time-to-live for some records, or store less data. Similarly, if your cache is barely used, you could probably afford to bump up your time-to-lives, or reduce the size of your cache.

At first glance, it appears that memcache.fill_percent tells us everything we need to know about the amount of free space in the cache. However, due to the way that Memcached assigns memory pages into slabs, it is possible for cache evictions to take place even when the cache is not 100% full. This is why it’s also important to keep an eye on the memcache.evictions_rate metric, which is also indicative of the amount of free space in the cache; if the frequency of evictions suddenly increases while fill percent is below 100%, a single slab class may be full.

Hits and misses

memcache.get_hits_rate and memcache.get_misses_rate metrics are useful for checking the general health and usage of your cache. They allow you to see how frequently the cache is being accessed, and the number of requests the result in cache hits and misses. In general, you want to have significantly more cache hits than misses in order for your cache to be effective. Keep an eye on the two metrics, and the ratio between the number of hits and misses; if any of the three start to fall, something is likely wrong.

Source: https://www.datadoghq.com/blog/speed-up-web-applications-memcached/

 

 

Best Nginx configuration – được sử dụng bởi VPSSIM – có giải thích chi tiết

Source: https://gist.github.com/plentz/6737338

https://scaron.info/blog/improve-your-nginx-ssl-configuration.html

Nội dung file domain.conf – được VPSSIM sử dụng nhiều – được giải thích chi tiết trên github:

# read more here http://tautt.com/best-nginx-configuration-for-security/
# don’t send the nginx version number in error pages and Server header
server_tokens off;
# config to don’t allow the browser to render the page inside an frame or iframe
# and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking
# if you need to allow [i]frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri
# https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options
add_header X-Frame-Options SAMEORIGIN;
# when serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header,
# to disable content-type sniffing on some browsers.
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
# currently suppoorted in IE > 8 http://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx
# http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx
# ‘soon’ on Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=471020
add_header X-Content-Type-Options nosniff;
# This header enables the Cross-site scripting (XSS) filter built into most recent web browsers.
# It’s usually enabled by default anyway, so the role of this header is to re-enable the filter for
# this particular website if it was disabled by the user.
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
add_header X-XSS-Protection “1; mode=block”;
# with Content Security Policy (CSP) enabled(and a browser that supports it(http://caniuse.com/#feat=contentsecuritypolicy),
# you can tell the browser that it can only download content from the domains you explicitly allow
# http://www.html5rocks.com/en/tutorials/security/content-security-policy/
# https://www.owasp.org/index.php/Content_Security_Policy
# I need to change our application code so we can increase security by disabling ‘unsafe-inline’ ‘unsafe-eval’
# directives for css and js(if you have inline css or js, you will need to keep it too).
# more: http://www.html5rocks.com/en/tutorials/security/content-security-policy/#inline-code-considered-harmful
add_header Content-Security-Policy “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’ https://ssl.google-analytics.com https://assets.zendesk.com https://connect.facebook.net; img-src ‘self’ https://ssl.google-analytics.com https://s-static.ak.facebook.com https://assets.zendesk.com; style-src ‘self’ ‘unsafe-inline’ https://fonts.googleapis.com https://assets.zendesk.com; font-src ‘self’ https://themes.googleusercontent.com; frame-src https://assets.zendesk.com https://www.facebook.com https://s-static.ak.facebook.com https://tautt.zendesk.com; object-src ‘none'”;
# redirect all http traffic to https
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name .forgott.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name .forgott.com;
ssl_certificate /etc/nginx/ssl/star_forgott_com.crt;
ssl_certificate_key /etc/nginx/ssl/star_forgott_com.key;
# enable session resumption to improve https performance
# http://vincent.bernat.im/en/blog/2011-ssl-session-reuse-rfc5077.html
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# enables server-side protection from BEAST attacks
# http://blog.ivanristic.com/2013/09/is-beast-still-a-threat.html
ssl_prefer_server_ciphers on;
# disable SSLv3(enabled by default since nginx 0.8.19) since it’s less secure then TLS http://en.wikipedia.org/wiki/Secure_Sockets_Layer#SSL_3.0
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ciphers chosen for forward secrecy and compatibility
# http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html
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’;
# enable ocsp stapling (mechanism by which a site can convey certificate revocation information to visitors in a privacy-preserving, scalable manner)
# http://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
resolver 8.8.8.8 8.8.4.4;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/star_forgott_com.crt;
# config to enable HSTS(HTTP Strict Transport Security) https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
# to avoid ssl stripping https://en.wikipedia.org/wiki/SSL_stripping#SSL_stripping
# also https://hstspreload.org/
add_header Strict-Transport-Security “max-age=31536000; includeSubdomains; preload”;
# … the rest of your configuration
}

Xóa Letsencrypt certificate – standalone

on CentOS: 

$ sudo yum remove git

Next, you can completely remove the /opt/letsencrypt directory (the directory that you downloaded the LetsEncrypt repository to).

$ sudo rm -rf /opt/letsencrypt

If you actually generated a Certificate using the instructions in the guide, then you’ll also want to remove this following directory:
(If you already installed Certbot, this will also remove any certificates generated by that tool, and it could possibly break your Nginx/Apache configurations)

rm -rf /etc/letsencrypt

(I know you’ve already done this, but just for the sake of it…)
If you added the Cron entry to your cron table, then you’ll also need to remove that line. You can open the cron table with this command:

$ sudo crontab -e

Then, you’ll just want to remove the following line:

0 0 1 * * /opt/letsencrypt/letsencrypt-auto renew

Source: https://www.linode.com/community/questions/17003/how-do-i-remove-a-custom-letsencrypt-installation

Gia hạn Letsencrypt tư động

 

Quá trình cấp & gia hạn Letsencrypt SSL hiện có nhiều phương thức như sử dụng Webroot, Standalone, Apache, Nginx, DNS Plugins, manual… Dưới đây là 2 phương thức phổ biến (Stanalone & Webroot) và được sử dụng bởi 2 bashscript thông dụng tại VN: VPSSIM & HOCVPS.

Cá nhân mình thì thích dùng Standalone (Hocvps) sử dụng do đơn giản, tất cả đều được tự động (tự động issue, tạo cronjob tự động renew, cấu hình file conf rõ ràng => việc cập nhật/thay đổi file conf cho các mục đích khác đơn giản hơn so với cách vpssim sử dụng). 

Hocvps letsencrypt

Chế độ Standalone (Hocvps sử dụng)

Standalone là cách issue & gia hạn đơn giản nhất tuy nhiên có một nhược điểm là cần stop web lại trong khoảng 30s để nhường port 80 cho Standalone xác thực & cấp certificate.
Đề gia hạn SSL, bạn vào thư mục cài Letsencrypt & đánh dòng lệnh sau:
certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" 
hoặc: ./Certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"
Chú ý: Nhớ vào thư mục cài dặt Letsencrypt rồi mới chạy lệnh để tránh command not found.
Tạo cronjob gia hạn tự động Letsencrypt:

Mở file cấu hình crontab:

# EDITOR=nano crontab -e

Copy và paste đoạn code bên dưới vào cửa sổ terminal:

30 2 * * * /opt/letsencrypt/certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start" >> /var/log/le-renew.log

Nhấn Ctrl+O, Enter để lưu và Ctrl+X để thoát. Bạn nhận được thông báo sau là thành công

crontab: installing new crontab

crontab trên sẽ tự động chạy lệnh gia hạn Let’s Encrypt vào lúc 2h30 hàng ngày và kiểm tra xem đã hết hạn chưa và tiến hành gia hạn. Trước khi gia hạn sẽ stop Nginx, sau đó sẽ start lại ngay lập tức. Như vậy, gần như không ảnh hưởng gì cả đến website.

Vậy là xong.

Một số lỗi thường gặp: 
– Cerbot: command not found => If you have installed certbot using the certbot-auto script, you generally should use ./certbot-auto ... (notice the ./ in the beginning) whenever the documentation says certbot ....Make sure you’re doing this from the directory where you initially downloaded the certbot-auto script.
Accepted solution: You have to be in the certbot folder and address the file certbot-auto directly with ./certbot-auto 
Ghi chú: thư mục cài: /opt/letsencrypt (cần vào thư mục này rồi chạy lệnh – Nếu dùng certbot-auto không được thì dùng ./certbot-auto
1 certificate covers nhiều domain (www & non-www): 
sudo certbot certonly --standalone -d domain.com -d www.domain.com

 

Chế độ webroot (VPSSIM sử dụng)

Để đơn giản quá trình cài đặt SSL từ Letsencrypt, chúng ta nên dùng VPSSIM. Script này có chức năng tự động gia hạn SSL khi chứng chỉ còn hạn 30 ngày nữa, tuy nhiên có một số trường hợp VPSSIM không tự động gia hạn nên chúng ta cần gia hạn bằng tay. Vì vậy, có một số điều cần chú ý khi gia hạn manual SSL, sau khi cài đặt chứng chỉ qua VPSSIM: 

  • VPSSIM sử dụng tool: http://acme.sh
  • VPSSIM sử dụng phương thức webroot để cấp & gia hạn SSL từ Letsencrypt: 

Đây là chế độ mà bắt buộc phải có sẵn một web service, trỏ website trước, vì vậy nó không cần tạo ra 1 máy chủ web ảo chiếm port 443 như chế độ standalone, vì vậy không cần stop web service khi tạo và gia hạn. Việc tạo và gia hạn sẽ được chứng thực thông qua 1 đường link có dạng tenmien.com/.well-known. Đơn giản bạn có thể hiểu nếu trên web của bạn có đường dẫn này thì máy chủ Letsencrypt sẽ xác thực cho bạn và cho phép tạo, gia hạn…

Trong vhost sẽ có thêm đoạn: 

location /.wellknown/ {
              log_not_found off;
              root /usr/local/nginx/html;
để Letsencrypt xác thực (không cần stop Nginx) => thư mục .well-known được VPSSIM thiết lập trong public_html của web.
Trong quá trình sử dụng, mình thấy phương thức này hay bị lỗi (có thể là do hoạt động cập nhật/sửa chữa file conf phục vụ các mục đích khác/cấu hình khác) dẫn đến không chạy được chức năng này. 

Varnish cache server – Tất tần tật về Varnish cache server

varnish cache

1. Varnish cache server – tốt hay xấu: 

Varnish cache servers are considered good to speed up websites. It works quite well at the basis server infrastructure, although it can prove to be bad for developers who are working on CSS codes. In a nutshell, most of the customers love the speed performance offered by servers running on varnish cache system, but it has its own limitations.

Limits – giới hạn khi sử dụng

Varnish cache servers are limited at two factors.

  • Varnish cache servers do not allow tweaking .htaccess file.
  • Varnish cache servers do not allow the execution of cache plugins.

Source: https://www.markdescande.com/varnish-cache-server-for-caching-sites/

* Kiểm tra xem Varnish cache có hoạt động tốt với Woocommerce không? Có làm drop cookie => empty cart không?

2. Is Varnish cache working on this site – Free check: 

https://isvarnishworking.uk/

Ví dụ về Varnish cache chạy với SSL:

https://tuvangoicuoc.com

 

Tham khảo hướng dẫn install của Linode: https://www.linode.com/docs/websites/varnish/use-varnish-and-nginx-to-serve-wordpress-over-ssl-and-http-on-debian-8/

 

Tham khảo cách lấy IP thật của user:

To get the Real IP of your WooCommerce user comments and emails from Varnish, use the Real IP feature of nginx

https: //guides.wp-bullet.com/install-configure-varnish-3-cache-nginx-woocommerce-speed/

 

Những vấn đề cần đoc thêm: 

+ Cài Varnish trên 1 server Nginx được không? (mô hình SSL: nginx => varnish => backend nginx)

+ Ram tối thiểu allocated cho Varnish cache để Varnish cache hoạt động hiệu quả

Tham khảo configuration – Nginx.conf & varnish conf: https://www.digitalocean.com/community/questions/nginx-ngx_pagespeed-and-varnish-but-server-responded-slow-how-to-fix

Varnish cache vs memcached

An HTTP proxy server and memcached are different technologies that solve different problems and apply at different layers of your software stack. Both can be useful.

An HTTP proxy server sitting in front of your application can respond to requests from its cache, saving your application from having to handle some of the request load. This only works if your application outputs content that is cacheable and if end users request the content more than once. In order for the content to be cacheable, your application needs to set the appropriate HTTP headers to let proxy servers (and browsers) know what is cacheable and for how long.

In the case of requests that make it all the way to your application (they miss the HTTP proxy cache or there is no HTTP proxy), your application has to compute the content it needs to send back. If this computation is expensive but parts of the data can be cached from previous requests, memcached is a good way for your application to stash away the results of [parts of] those computations so they can be reused later. Your application needs to be written specifically to do this, and to connect to memcached instances to get and set this data.

Kiêm tra thời hạn của chứng chỉ SSL

ngay het han SSL

Để kiểm tra thời hạn của chứng chỉ SSL, sử dụng tool tại web sau => nhập tên miền và đợi kết quả:

https://ssltools.digicert.com/checker/views/checkInstallation.jsp

Hoặc: https://www.sslshopper.com/ssl-checker.html

Ngoài ra, có thể xem thông tin ngày hết hạn trên trình duyệt web: 

ngay het han SSL