• 28/06 cập nhật đăng ký đăng nhập qua Google & Facebook

aaPanel Note

TenHoshi

Administrator
Staff member
Trusted Uploader

1. Tạo file script ramcheck​

Chạy lệnh này trên server:

nano /usr/local/bin/ramcheck

Rồi dán nguyên khối dưới đây vào:

Code:
#!/bin/bash
# ===========================
# ramcheck - Clean RAM Report
# ===========================
# Lấy số liệu từ free -k
read _ total used free shared buff_cache available <<< "$(free -k | awk '/Mem:/ {print $1,$2,$3,$4,$5,$6,$7}')"
swap_used_kb=$(free -k | awk '/Swap:/ {print $3}')
# Đổi KB → MB/GB
fmt() { local kb=$1 if [ "$kb" -ge 1048576 ]; then awk -v v="$kb" 'BEGIN {printf "%.2f GB", v/1048576}' else awk -v v="$kb" 'BEGIN {printf "%.0f MB", v/1024}' fi
}
# Sum RSS theo pattern (case-insensitive)
sum_rss() { ps axo rss,args --no-headers | awk -v p="$1" 'BEGIN{IGNORECASE=1} $0 ~ p {sum+=$1} END{print sum}'
}
# MySQL
mysql_kb=$(sum_rss "mariadbd|mysqld")
# Node.js
node_kb=$(sum_rss " node ")
# PHP-FPM
php_kb=$(sum_rss "php-fpm")
# aaPanel – lọc đúng process, KHÔNG cộng trùng
aapanel_kb=$( ps axo rss,args --no-headers | awk ' BEGIN {sum=0} /\/www\/server\/panel\/pyenv\/bin\/python3/ {sum+=$1; next} /BT-Panel/ {sum+=$1; next} /BT-Task/ {sum+=$1; next} /spawn_main/ && /venv\/bin\/python/ {sum+=$1; next} END {print sum}'
)
# App RAM (không tính cache)
app_used_kb=$(( used - buff_cache ))
[ "$app_used_kb" -lt 0 ] && app_used_kb=0
# RAM unknown
known_kb=$(( mysql_kb + node_kb + php_kb + aapanel_kb ))
others_kb=$(( app_used_kb - known_kb ))
[ "$others_kb" -lt 0 ] && others_kb=0
# Bảng đẹp
line="──────────────────────────────────────────────"
printf "┌$line┬───────────────┐\n"
printf "│ %-44s │ %-13s │\n" "Thành phần" "RAM dùng"
printf "├$line┼───────────────┤\n"
printf "│ %-44s │ %-13s │\n" "MySQL / MariaDB" "$(fmt "$mysql_kb")"
printf "│ %-44s │ %-13s │\n" "Node.js (PM2 / node)" "$(fmt "$node_kb")"
printf "│ %-44s │ %-13s │\n" "PHP-FPM" "$(fmt "$php_kb")"
printf "│ %-44s │ %-13s │\n" "aaPanel Python (BT-Panel/Task)" "$(fmt "$aapanel_kb")"
printf "│ %-44s │ %-13s │\n" "Linux file cache" "$(fmt "$buff_cache")"
printf "│ %-44s │ %-13s │\n" "System + nền tảng khác" "$(fmt "$others_kb")"
printf "│ %-44s │ %-13s │\n" "Swap used" "$(fmt "$swap_used_kb")"
printf "├$line┼───────────────┤\n"
printf "│ %-44s │ %-13s │\n" "Tổng RAM used (theo free)" "$(fmt "$used")"
printf "└$line┴───────────────┘\n"

Save lại:

Ctrl + O → Enter → Ctrl + X

Cấp quyền:

chmod +x /usr/local/bin/ramcheck

Chạy thử:

ramcheck

🎉 Giao diện bạn sẽ nhận được:

┌──────────────────────────────────────────────┬───────────────┐
│ Thành phần │ RAM dùng │
├──────────────────────────────────────────────┼───────────────┤
│ MySQL / MariaDB │ 430 MB │
│ Node.js (PM2 / node) │ 458 MB │
│ PHP-FPM │ 184 MB │
│ aaPanel Python (BT-Panel/Task) │ 360 MB │
│ Linux file cache │ 1.7 GB │
│ System + nền tảng khác │ 1.8 GB │
│ Swap used │ 908 MB │
├──────────────────────────────────────────────┼───────────────┤
│ Tổng RAM used (theo free) │ 5.8 GB │
└──────────────────────────────────────────────┴───────────────┘
 

TenHoshi

Administrator
Staff member
Trusted Uploader

Lỗi: file /.well-known/assetlinks.json (Android App Links) bị trả Content-Type: text/plain, trong khi Google bắt buộc application/json.​


Nguyên nhân thường gặp:
- Server là nginx: nginx không đọc .htaccess, nên sửa .htaccess không có tác dụng. Phải sửa trong cấu hình nginx.
- Panel quản lý hosting (aaPanel/BT Panel...): panel thường tự thêm một đoạn cấu hình để xác thực SSL.

Đoạn này bắt mọi request /.well-known/* và ép trả text/plain. Nó chạy trước khi nginx xét các location, nên thêm location riêng cho file cũng không ăn.

Cách fix: trong file cấu hình nginx của site, đặt đoạn sau trước dòng include cấu hình well-known của panel:

Code:
if ($uri = /.well-known/assetlinks.json) { break;
}

break làm nginx bỏ qua đoạn của panel cho riêng file này. File được trả như file tĩnh, lấy kiểu theo mime.types nên ra application/json. Các file khác trong /.well-known/, gồm cả file xác thực SSL, vẫn chạy như cũ.

Với apple-app-site-association (iOS) thì file không có đuôi .json, nên cần thêm location riêng để khai báo kiểu:

Code:
if ($uri = /.well-known/apple-app-site-association) { break;
}
location = /.well-known/apple-app-site-association { default_type application/json;
}

Các bước:
1. Backup file cấu hình.
2. Thêm đoạn trên.
3. Chạy nginx -t, báo OK thì nginx -s reload.
4. Kiểm tra: curl -sI https://<domain>/.well-known/assetlinks.json | grep -i content-type, kết quả phải là application/json.
5. Nếu dùng Cloudflare/CDN thì purge cache file đó.
6. Công cụ kiểm tra của Google lưu kết quả khoảng 10 phút, đợi hết thời gian đó rồi test lại.

Lưu ý: panel có thể ghi đè file cấu hình khi đổi setting site, nên sau mỗi lần đổi hãy kiểm tra lại đoạn này còn không.
 

Guest Post 2022

Top