Cài đặt triển khai Nginx Caching API A-Z
Mục Lục
Table of Contents
Triển khai Nginx Caching API A-Z FIXLOINHANH 2
1./ Tạo server wordpress để test. 2
2./ Cài đặt server nginx caching 3
2.1/ Tìm hiểu các thông số trong nginx 4
3.1.1/ key_zone và max_size và inactive 4
3.3/ Chỉ định ra Cache Request nào 5
3.4/ Limit hoặc Disabling Caching 6
3.5.2/ Gửi lệnh xoá cache sử dụng module ngx_cache_purge 7
3.5.3/ Giới hạn được IP được phép gửi lệnh PURGE CACHE 8
3.6/ Xoá cache của 1 page sử dụng bypass/recache với set secret_header 9
3.7/ Yêu cầu cần giữ được keys quá thời gian inactive. 9
3.9/ Các lệnh thường sử dụng 12
3.10/ Khi test với web site chạy IIS 12
4./ File cấu hình nginx.vhost 12
Cài đặt triển khai Nginx Caching API A-Z FIXLOINHANH
Bài Lab này sẽ hướng dẫn chi tiết sử dụng Nginx Caching như 1 CDN server.
Mô hình
1./ Tạo server wordpress để test.
Các bước tạo 1 web site wordpress khá đơn giản có thể chủ động tìm hiểu
Nên tạo random Salt để sercure site WP
root@srv022_wordpress:/opt/wordpress# curl -s https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY', 'V~&+C@{2G7!_9ubm^|j`w*wj6+#oDJU2jB.S33WYagC9->R<TMQl?4gh](]_]yx(');
define('SECURE_AUTH_KEY', '~X-J&P9X4uP?.2)S3Eg+U;;2BR+~[isa^/;H$v-tKN<4-)k_|_iIkkO);M|z.CPa');
define('LOGGED_IN_KEY', '^!y7B<xl}$K|Z%lq)CI1iaCD3:3#X#$3%Ea_s+}<X%vc{x)SId?t[R|G+dFZ_,+]');
define('NONCE_KEY', '3mj]: 6s-`Yk9|-&G{8n6;f0<^{_~vZSvfXAO9U=l)SWPYb;=EBeaZ~W9:A-si;n');
define('AUTH_SALT', 'k|v23Phi6S-a]W~jJ2bf7A@qBOxqHUBvlGXd:%0I3RoQM<Pr(KiX=7dgB{bY|f.[');
define('SECURE_AUTH_SALT', '.)m`M$q/M_6`V6O0{YeuIXesDcWHb<A=4bU(Xk3PF%GS-}F[(>|Q$>f~9}E+x(%/');
define('LOGGED_IN_SALT', 'U$f0lF?DVFV)[@Y~^=qAibC=~tV$DcW5NpY,dZnF*}ICxdv;wcb4s.|T q[w_ qY');
define('NONCE_SALT', '`dl6|[&LoI&V0{nwCvY;r]32Fj=|[gwz~IC,dF%b3U%bI.zXw/28jec|7&,tf|w7');
Thông tin login
admin/”Your Password”
Kết quả up 1 video lên test, sau này sẽ up các video khác nhau để tiến hành test caching
2./ Cài đặt server nginx caching
cấu hình basic
proxy_cache_path /opt/nginx/cache levels=1:2 keys_zone=STATIC:100m inactive=48h max_size=10g;
server {
listen 80;
listen [::]:80;
server_name testsite.local;
access_log /var/log/nginx/testsite.local/access.log;
error_log /var/log/nginx/testsite.local/error.log;
location / {
proxy_pass http://10.0.1.22:80/;
proxy_set_header Host $host;
proxy_buffering on;
proxy_cache STATIC;
proxy_cache_valid 200 1d;
proxy_cache_use_stale error timeout invalid_header updating
http_500 http_502 http_503 http_504;
}
}
Sau mỗi lần xem video hoặc xem bài viết có text và ảnh thì dung lượng của folder cache tiếp tục tăng, chứng tỏ cache đã hoạt động
2.1/ Tìm hiểu các thông số trong nginx
keys_zone=STATIC:10m
là tên của key_zone và dung lượng file cache.
max_size
là dung lượng tối đa mà có thể cache proxy_cache_path ở trong folder chỉ định.
levels=1:2
Định nghĩa mức phân cấp của bộ nhớ cache, hay có thể hiểu là có 2 cấp thư mục chứa cache.
3./ Lý thuyết Nginx caching
3.1.1/ key_zone và max_size và inactive
keys_zone=STATIC:10m
keys_zone=one:10m
Static hoặc one là tên của keys_zone
có thể đặt tên key_zone và dung lượng bộ nhớ cấp (cấp ở Disk là Disk, cấp ở Ram là Ram). Những thông tin metadata, keys được lưu tại đây sẽ được truy xuất ngay mà không cần lấy thông tin từ disk của server gốc.
keys_zone sets up a shared memory zone for storing the cache keys and metadata such as usage timers. Having a copy of the keys in memory enables NGINX to quickly determine if a request is a HIT or a MISS without having to go to disk, greatly speeding up the check. A 1‑MB zone can store data for about 8,000 keys, so the 10‑MB zone configured in the example can store data for about 80,000 keys.
max_size
là dung lượng tối đa mà có thể cache proxy_cache_path ở trong folder chỉ định.
inactive:
là khoảng thời gian định kì cache được lưu trữ hết thời gian thì tất cả cache sẽ bị xoá đi.(bất kể keys là mới hay cũ)
Một số các biến số khác trong nginx
$scheme – request scheme, HTTP or HTTPS.
$request_method – request method, usually “GET” or “POST”.
$host – this can be hostname from the request line, or hostname from the “Host” request header field, or the server name matching a request, in the order of precedence.
$request_uri – means the full original request URI (with arguments).
3.1.2/ Cache manager
Định kì kiểm tra trạng thái của cache. Nếu cache size vượt quá max_size được giới hạn bởi max_size được cấu hình trong proxy_cache_path folder, thì cache manager sẽ xoá nhưng dữ liệu cũ nhất đi. Dữ liệu cache có thể vượt qua giới hạn limit trong khoảng thời gian mà cache manager hoạt động.
3.1.3/ Cache loader
chỉ chạy 1 lần duy nhất khi khởi động của nginx. Nó loads metadata về dữ liệu đã cache trước đó để shared memmory zone. Việc tải toàn bộ bộ nhớ đệm cùng một lúc có thể tiêu tốn đủ tài nguyên để làm chậm hiệu suất NGINX trong vài phút đầu tiên sau khi khởi động. Để tránh điều này xảy ra có thể cấu hình chỉ thị proxy_cache_path như sau:
loader_threshold – Duration of an iteration, in milliseconds (by default, 200)
loader_files – Maximum number of items loaded during one iteration (by default, 100)
loader_sleeps – Delay between iterations, in milliseconds (by default, 50)
In the following example, iterations last 300 milliseconds or until 200 items have been loaded:
proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;
3.3/ Chỉ định ra Cache Request nào
Mặc định nginx plus cache tất cả mọi thứ với HTTP GET và HEAD
By default, NGINX Plus caches all responses to requests made with the HTTP GET and HEAD methods the first time such responses are received from a proxied server. As the key (identifier) for a request, NGINX Plus uses the request string. If a request has the same key as a cached response, NGINX Plus sends the cached response to the client. You can include various directives in the http {}, server {}, or location {} context to control which responses are cached.
To change the request characteristics used in calculating the key, include the proxy_cache_key directive:
proxy_cache_key "$host$request_uri$cookie_user";
Định nghĩa số lần request cùng 1 keys nhỏ nhất để keys được cache.
To define the minimum number of times that a request with the same key must be made before the response is cached, include the proxy_cache_min_uses directive:
proxy_cache_min_uses 5;
To cache responses to requests with methods other than GET and HEAD, list them along with GET and HEAD as parameters to the proxy_cache_methods directive:
proxy_cache_methods GET HEAD POST;
3.4/ Limit hoặc Disabling Caching
By default, responses remain in the cache indefinitely. They are removed only when the cache exceeds the maximum configured size, and then in order by length of time since they were last requested. You can set how long cached responses are considered valid, or even whether they are used at all, by including directives in the http {}, server {}, or location {} context:
To limit how long cached responses with specific status codes are considered valid, include the proxy_cache_valid directive:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
In this example, responses with the code 200 or 302 are considered valid for 10 minutes, and responses with code 404 are valid for 1 minute. To define the validity time for responses with all status codes, specify any as the first parameter:
proxy_cache_valid any 5m;
Định nghĩa điều kiện với NGINX Plus không gửi phản hồi cache đến clients, chỉ thị proxy_cache_bypass, mỗi tham số định nghĩa 1 điều kiện và bao gồm 1 biến số. Nếu ít nhất 1 tham số không trống và không bằng 0, NGINX Plus không tìm kiếm trong bộ nhớ cache mà thay vào đó sẽ chuyển tiếp yêu cầu đến backend server ngay lập tức. Ví dụ trường hợp cần update ngay lập tức như xác nhận thanh toán, xác nhận đã mua, bán…
To define conditions under which NGINX Plus does not send cached responses to clients, include the proxy_cache_bypass directive. Each parameter defines a condition and consists of a number of variables. If at least one parameter is not empty and does not equal “0” (zero), NGINX Plus does not look up the response in the cache, but instead forwards the request to the backend server immediately.
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
Để định nghĩa điều kiện dưới NGINX Plus không cache 1 respond at all. bao gồm chỉ thị proxy_no_cache. Định nghĩa tham số gióng như proxy_cache_bypass
To define conditions under which NGINX Plus does not cache a response at all, include the proxy_no_cache directive, defining parameters in the same way as for the proxy_cache_bypass directive.
proxy_no_cache $http_pragma $http_authorization;
3.5/ Xoá nội dung từ Cache
Nginx cho phép xoá các file cache cũ. Điều này là cần thiết để ngăn không cho cả dữ liệu cũ và mới được phép cùng tồn tại. Cache bị xoá khi nhận tín hiệu “purge” từ custum HTTP header, hoặc phương thức HTTP PURGE.
Tuy nhiên chỉ thị nginx_cache_purge chỉ có sẵn trong phiên bản NGINX Plus, ở bản trial cần cài thêm module ngx_cache_purge
https://github.com/FRiCKLE/ngx_cache_purge
3.5.1/ Cấu hình Cache Purge
Cấu hình với request sử dụng phương thức HTTP PURGE xoá matching URLs.
In the http {} context, create a new variable, for example, $purge_method, that depends on the $request_method variable:
http {
...
map $request_method $purge_method {
PURGE 1;
default 0;
}
}
In the location {} block where caching is configured, include the proxy_cache_purge directive to specify a condition for cache‑purge requests. In our example, it is the $purge_method configured in the previous step:
server {
listen 80;
server_name www.example.com;
location / {
proxy_pass https://localhost:8002;
proxy_cache mycache;
proxy_cache_purge $purge_method;
}
}
3.5.2/ Gửi lệnh xoá cache sử dụng module ngx_cache_purge
When the proxy_cache_purge directive is configured, you need to send a special cache‑purge request to purge the cache. You can issue purge requests using a range of tools, including the curl command as in this example:
$ curl -X PURGE -D – "https://www.example.com/*"
HTTP/1.1 204 No Content
Server: nginx/1.15.0
Date: Sat, 19 May 2018 16:33:04 GMT
Connection: keep-alive
Tuy nhiên làm theo mà bị lỗi
root@srv023_nginx_cache:~# curl -X PURGE -IL testsite.local/wp-content/uploads/2021/01/2.mp4
curl: (52) Empty reply from server
Nguyên nhân lỗi là do module ngx_cache_purge của FRiCKLE đã outdate không phù hợp cho các version cao.
https://github.com/FRiCKLE/ngx_cache_purge
Chuyển sang sử dụng Module ngx_cache_purge của torden có tại link:
https://github.com/torden/ngx_cache_purge
Sau khi download module về và complie lại thì cấu hình để xoá keys rất đơn giản như sau:
proxy_cache_purge PURGE from 127.0.0.1 10.0.1.23;
Thêm IP được phép xoá keys.
Câu lệnh xoá Keys
curl -X PURGE http://testsite.local/wp-content/uploads/2021/01/1.mp4
Kết quả
root@srv023_nginx_cache:~# curl -X PURGE http://testsite.local/wp-content/uploads/2021/01/1.mp4
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
Keys đã bị xoá trên server, dung lượng bị xoá bằng đúng dung lượng keys được cache.
hoặc có thể sử dụng lệnh xoá bên dưới kết quả không thay đổi
curl -X PURGE -D - http://testsite.local/wp-content/uploads/2021/01/1.mp4
Với client không được phép xoá keys
Keys sẽ không bị xoá trên server.
=> Như vậy đã Lab xong, không cần thực hiện bước 3.5.3 nữa. Phần đó chỉ giành cho nginx plus trả phí.
3.5.3/ Giới hạn được IP được phép gửi lệnh PURGE CACHE
cấu hình ở trong http{}
we recommend that you limit the number of IP addresses that are allowed to send a cache‑purge request:
geo $purge_allowed {
default 0; # deny from other
10.0.0.1 1; # allow from localhost
192.168.0.0/24 1; # allow from 10.0.0.0/24
}
map $request_method $purge_method {
PURGE $purge_allowed;
default 0;
}
Phần xoá cache không làm việc được với nginx bản thường. với nginx plus thì rất đơn giản.
3.6/ Xoá cache của 1 page sử dụng bypass/recache với set secret_header
Thêm proxy_cache_bypass có giá trị
proxy_cache_bypass $http_secret_header;
add_header X-Cache-Status $upstream_cache_status;
Để exprixe/bypass the cached file, sử dụng curl
curl http://testsite.com/mypage.html -s -I -H "secret-header:true"
Test với link trang chủ
Ngay sau đó thì cache được bypass chỉ cho link đó các link khác vẫn cache
#https://stackoverflow.com/questions/6236078/how-to-clear-the-cache-of-nginx
3.7/ Yêu cầu cần giữ được keys quá thời gian inactive.
Hướng xử lý cho thời gian inactive trong thời gian dài 10 năm để không bị hết hạn keys, keys mới vào sẽ đẩy keys cũ và dữ liệu cũ ra khi tràn bộ nhớ được cấp trong max_size
Sau khi xem 1 video dung lượng lớn 194Mb mà dung lượng cấp 200Mb, dữ liệu cũ liền bị xoá đi
sau khi xem 1 video nữa dung lượng vượt quá 200Mb thì dung lượng được cache lưu trữ thay đổi. (dữ liệu không quay về 0 zero)
3.8/ Chủ động cache 1 link video hoặc ảnh bất kì
Mục đích: có thể chủ động cache 1 link, keys bất kì trước khi client truy cập, hoặc cache lại link, keys sau khi expire time hoặc quá dung lượng max_size.
3.8.1 / Enable Debug by X-Cache-Status
Mục đích: show ra mã cache status để kiểm tra trạng thái của cache. Thường thì kiểm tra các trạng thái cơ bản như:
Miss: chưa được cache
Hit: dữ liệu đã được cache.
Nên giới hạn chỉ cho 1 vài IP có thể show ra trạng thái X-Cache-Status
trên server local thấy trạng thái X-Cache-Status
trên client bất kì sẽ không thấy trạng thái của X-Cache-Status
Cấu hình
map $remote_addr $cache_status {
127.0.0.1 $upstream_cache_status;
10.0.1.23 $upstream_cache_status;
default "";
}
#######################
add_header X-Cache-Status $cache_status;
Bảng mã X-Cache-Status
By debugging the X-Cache-Status header you will appreciate the following table:
MISS | Object was not found in the cache. Response was served from the origin. Response may have been saved to cache. |
BYPASS | Got response from upstream. Response may have been saved to cache. |
EXPIRED | Cached object has expired. Response was served from the upstream. |
STALE | Object served from cache because of issues with origin server response |
UPDATING | Serve stale content from cache because proxy_cache_lock has timed out and proxy_use_stale takes controll |
REVALIDATED | proxy_cache_revalidate verified that the current cached content was still valid |
HIT | The object was found in the cache and it is served from there |
3.8.2/ Cache 1 link, 1 keys bất kì
Cache video
curl -I http://testsite.local/wp-content/uploads/2021/01/4.mp4
số lần Miss sẽ phụ thuộc vào cấu hình proxy_cache_min_uses hiện đang để là 2 lần, đến lần thứ 3 truy cập thì cache sẽ được load trên server cache.
proxy_cache_min_uses 2;
Cache text file và image
hoàn toàn tương tự
curl -I http://testsite.local/2021/01/18/long-text03/
curl -I http://testsite.local/2021/01/27/test-image-heavy-0002/
Lưu ý: sau khi curl -I 1 link bất kì và trạng thái trả về của X-Cache-Status là HIT thì dung lượng cache sẽ tăng lên.
3.9/ Các lệnh thường sử dụng
Check md5 của 1 keys
echo -n testsite.local/2021/02/18/bai-viet-20210218-09h32 | md5sum
3.10/ Khi test với web site chạy IIS
Test nginx cache với web chạy IIS thì kết quả vẫn như khi dùng web server nginx.
Vẫn hoạt động đúng vả đủ các chức năng, Purge, bypass header, cache dynamic, cache all content of page.
Đoạn mã html hoặc aspx đơn giản như sau
<header><title>Hello World Page</title></header>
<div>
<img src="/images/hinh1-22.jpg">
<img src="/images/hinh2-21.jpg">
<img src="/images/lay-net-01.png">
</div>
<div>
Hello world! Hello world! Hello world! Hello world!
</div>
Cần cấu hình Add Virtual Directory chứa ảnh để có thể hiển thị được ảnh.
Lưu ý: khi dựng 1 website IIS chứa ảnh, nếu view qua browser mà ảnh không hiển thị được là do chưa cài đủ các features lên.
4./ File cấu hình nginx.vhost
proxy_cache_path /opt/nginx/cache levels=1:2 keys_zone=STATIC:10m inactive=3650d max_size=200m loader_threshold=300 loader_files=200;
#############
# lua_package_path "/opt/setup/nginx-1.19.2/lua-resty-corelib/?.lua;;"
# init_by_lua_block {
# require "resty.core"
# collectgarbage("collect") -- just to collect any garbage
# }
#############
# proxy_cache_path /opt/nginx/cache keys_zone=STATIC:1m inactive=365d max_size=10g loader_threshold=300 loader_files=200;
# proxy_cache_path /opt/nginx/cache keys_zone=STATIC:10m loader_threshold=300 loader_files=200;
###################PURGE BEGIN
# map $request_method $purge_method {
# PURGE 1;
# default 0;
# }
###################PURGE END
server {
listen 80;
# listen [::]:80;
server_name testsite.local;
# access_log /var/log/nginx/testsite.local/access.log;
error_log /var/log/nginx/testsite.local/error.log;
location / {
# index index.html index.htm;
proxy_set_header Host $host;
proxy_buffering on;
proxy_cache STATIC;
proxy_cache_valid 200 302 1d;
proxy_cache_valid 404 10m;
more_set_headers "Server: TEST_CACHE_23_NGINX";
# proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_cache_key "$host$uri$is_args$args$request_uri$cookie_user$scheme";
# proxy_cache_key $uri$is_args$args;
##############
add_header X-Cache-Status $upstream_cache_status;
# add_header X-Cache-Status $cache_status;
proxy_cache_min_uses 2;
proxy_cache_methods GET HEAD POST;
# proxy_cache_bypass $http_cache_bypass;
proxy_cache_bypass $http_secret_header$http_cache_bypass;
proxy_no_cache $http_pragma $http_authorization;
# proxy_cache_purge $purge_method;
# proxy_cache_purge STATIC $1$is_args$args;
#delete cache use curl PURGE
proxy_cache_purge PURGE from 127.0.0.1 10.0.1.23;
##################
proxy_pass http://10.0.1.22:80/;
}
# location ~ /purge(/.*) {
# # allow 0.0.0.0;
# # deny all;
# proxy_cache_purge STATIC $1$is_args$args;
# }
}
#############################################################################
# location / {
# if ($request_method = PURGE) {
# set $lua_purge_path "/opt/nginx/cache";
# set $lua_purge_levels "1:2";
# set $lua_purge_upstream "http://10.0.1.22:80";
# # set $lua_package_path "/opt/setup/nginx-1.19.2/lua-resty-core";
# content_by_lua_file /lua/purge.lua;
# }
# proxy_pass http://10.0.1.22:80/;
# proxy_cache STATIC;
# }
# }
5./ Compile nginx 1.19.2 from source
Với nginx plus đơn giản là chỉ cần enable tính năng nào đó lên, nhưng với nginx bản miễn phí cần compile để lấy được thêm các tính năng addon chỉ có ở bản trả phí.
Script chạy trên Ubuntu 20.04LTS như sau:
#!/bin/bash
# Build NGINX 1.19.2 From source
#/opt/setup/build-nginx-1.9.9-from-source.sh
echo "Install Pakage Dependency"
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential git tree
sudo add-apt-repository -y ppa:maxmind/ppa
sudo apt install -y build-essential libpcre3-dev zlib1g-dev libssl-dev libatomic-ops-dev libxml2-dev libxslt1-dev libgeoip1 libgeoip-dev libgd-dev google-perftools libgoogle-perftools-dev libperl-dev
cd /opt/setup
###################Download Pakage Dependency
wget https://nginx.org/download/nginx-1.19.2.tar.gz && tar zxvf nginx-1.19.2.tar.gz
# PCRE version 8.44
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz && tar xzvf pcre-8.44.tar.gz
# zlib version 1.2.11
wget https://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib-1.2.11.tar.gz
# OpenSSL version 1.1.1g
wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz && tar xzvf openssl-1.1.1g.tar.gz
###################Download Pakage Dependency
cd nginx-1.19.2
############ Copy Nginx manual page to /usr/share/man/man8/ directory BEGIN
cp man/nginx.8 /usr/share/man/man8
sudo gzip /usr/share/man/man8/nginx.8
ls /usr/share/man/man8/ | grep nginx.8.gz
# Check that man page for Nginx is working
#man nginx
############ Copy Nginx manual page to /usr/share/man/man8/ directory END
##########Create user, group nginx BEGIN
#sudo useradd -s /sbin/nologin nginx
groupadd -g 2002 nginx
useradd -u 2002 -s /bin/false -d /bin/null -c "pureftpd user" -g nginx nginx
##########Create user, group nginx END
##############
#add module headers-more-nginx-module
git clone https://github.com/openresty/headers-more-nginx-module.git
git clone https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git
git clone https://github.com/AirisX/nginx_cookie_flag_module.git
git clone https://github.com/kyprizel/testcookie-nginx-module.git
git clone https://github.com/FRiCKLE/ngx_cache_purge.git
##############
echo "################################################"
./configure \--prefix=/etc/nginx \
--add-module=headers-more-nginx-module \
--add-module=nginx-sticky-module-ng \
--add-module=nginx_cookie_flag_module \
--add-module=testcookie-nginx-module \
--add-module=ngx_cache_purge \
--sbin-path=/usr/sbin/nginx \
--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 \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.44 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.1g \
--with-openssl-opt=no-nextprotoneg \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-threads \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-http_ssl_module \
--with-http_image_filter_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-debug \
--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'
echo "################################################"
#chạy lệnh này để tạo file binary nginx trong objs
sudo make
# chạy lệnh này sẽ copy hết tất cả file cài đặt vào đúng đường dẫn (file nginx dạng binary sẽ được copy vào /usr/sbin/ ).
sudo make install
############
#
mkdir -p /etc/nginx/sites-enabled/
mkdir -p /etc/nginx/sites-available/
ln -s /etc/nginx/sites-available/* /etc/nginx/sites-enabled/
mkdir -p /data/www/cache/tmp
chown -R nginx.nginx /data/www/cache*
# Create NGINX cache directories and set proper permissions
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*
#
echo "################################################"
netstat -ntlup | egrep "Proto|nginx|haproxy|php" | sort -n
echo "################################################"
ps aux | egrep "USER|nginx|php" | awk '{print $1"\t"$2"|"$3"|"$4"|"$11"\t"$12 "\t" $13 "\t" $14 "# " $15 " " $16}'
echo "################################################"
#
echo "################################################"
#DONE
#####################################
6./ Tham khảo:
https://fixloinhanh.com
https://www.nginx.com/blog/nginx-high-performance-caching/#CacheDontCache
https://www.nginx.com/resources/wiki/start/topics/examples/reverseproxycachingexample/
https://github.com/FRiCKLE/ngx_cache_purge
https://www.fatalerrors.org/a/nginx-compiling-and-installing-lua-nginx-module.html
https://github.com/openresty/lua-nginx-module
https://stackoverflow.com/questions/6236078/how-to-clear-the-cache-of-nginx
https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/