本教程面向低配 VPS(2核2G),手把手带你把aaPanel 海外版、Nginx1.19、PHP8.2/7.4、Redis7.2、MySQL8.0、memcached 全部装完,并给出内存极限压榨的终极配置。跟着做,日跑 5000 IP 不卡!
- 准备工作
- 一键安装 aaPanel 海外版
- 环境安装 & 版本选择
- 内存极限优化(全部配置代码)
- 常见问题 & 彩蛋
1. 准备工作
# 更新系统 & 装常用工具
apt update -y
apt install -y curl wget socat htop vim
# 开 BBR
wget -N --no-check-certificate https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh && bash tcp.sh
# 选 4 启用 BBR,重启生效
2. 一键安装 aaPanel 海外版
wget -O install.sh https://www.aapanel.com/script/install_7.0_en.sh && bash install.sh aapanel
安装完会提示外网地址、账号、密码,保存到记事本!
3. 环境安装 & 版本选择
- Nginx 1.19(兼容 aaPanel 免费 WAF)
- PHP 8.2 + 7.4(新项目用 8.2,老项目 7.4)
- MySQL 8.0
- Redis 7.2
- Memcached 1.6
4. 内存极限优化(全部配置代码)
4.1 Nginx 1.19 优化配置
# /www/server/nginx/conf/nginx.conf
user www www;
worker_processes 2;
worker_cpu_affinity 01 10;
pid /www/server/nginx/logs/nginx.pid;
error_log /www/wwwlogs/nginx_error.log warn;
worker_rlimit_nofile 65535;
events {
use epoll;
multi_accept on;
worker_connections 2048;
accept_mutex on;
}
http {
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 8k;
large_client_header_buffers 2 16k;
client_max_body_size 20m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 30s;
keepalive_requests 100;
fastcgi_connect_timeout 3s;
fastcgi_send_timeout 30s;
fastcgi_read_timeout 30s;
fastcgi_buffer_size 8k;
fastcgi_buffers 4 8k;
fastcgi_busy_buffers_size 16k;
fastcgi_temp_file_write_size 32k;
fastcgi_intercept_errors on;
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 2;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/json application/xml+rss image/svg+xml;
gzip_disable "msie6";
limit_conn_zone $binary_remote_addr zone=perip:2m;
limit_conn perip 30;
limit_req_zone $binary_remote_addr zone=req:2m rate=10r/s;
limit_req zone=req burst=20 nodelay;
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log off;
server_tokens off;
server {
listen 888 default_server;
server_name _;
root /www/server/phpmyadmin;
index index.php;
location ~* \.(gif|jpg|jpeg|png|ico|svg|woff|woff2)$ { expires 30d; add_header Cache-Control "public, immutable"; }
location ~* \.(css|js)$ { expires 7d; add_header Cache-Control "public"; }
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\. { deny all; }
}
include /www/server/panel/vhost/nginx/*.conf;
}
4.2 PHP-FPM 8.2 / 7.4 优化配置
# /etc/php/8.2/fpm/pool.d/www.conf
[www]
listen = /tmp/php-cgi-82.sock
listen.backlog = 1024
listen.owner = www
listen.group = www
listen.mode = 0660
user = www
group = www
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 10s
pm.max_requests = 500
request_terminate_timeout = 30s
request_slowlog_timeout = 2s
slowlog = /www/server/php/82/var/log/slow.log
4.3 PHP 8.2 / 7.4 ini 优化
# /etc/php/8.2/fpm/php.ini (7.4 同理)
memory_limit = 128M
max_execution_time = 30
max_input_time = 30
post_max_size = 50M
upload_max_filesize = 50M
expose_php = Off
error_reporting = E_ALL & ~E_NOTICE
display_errors = Off
log_errors = On
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"
extension = mysqli
extension = pdo_mysql
extension = redis
extension = opcache
extension = memcached
4.4 MySQL 8.0 优化配置(关闭 binlog)
# /etc/mysql/mysql.conf.d/mysqld.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir = /www/server/data
# 基础
default_storage_engine = InnoDB
lower_case_table_names = 1
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
skip_name_resolve = 1
# 连接
max_connections = 200
max_connect_errors = 1000
open_files_limit = 65535
thread_cache_size = 16
max_allowed_packet = 64M
# 会话缓冲区
sort_buffer_size = 256K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
join_buffer_size = 256K
tmp_table_size = 32M
max_heap_table_size = 32M
# InnoDB
innodb_buffer_pool_size = 512M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_lock_wait_timeout = 50
innodb_data_file_path = ibdata1:10M:autoextend
# 关闭 binlog
skip-log-bin
# 慢日志
slow_query_log = 1
slow_query_log_file = /www/server/data/mysql-slow.log
long_query_time = 2
# 性能监控关闭
performance_schema = OFF
4.5 Redis 7.2 优化配置
# /www/server/redis/redis.conf
bind 127.0.0.1
port 6379
tcp-backlog 1024
timeout 0
tcp-keepalive 300
maxclients 4096
daemonize yes
supervised no
pidfile /www/server/redis/redis.pid
loglevel warning
logfile /www/server/redis/redis.log
databases 8
maxmemory 268435456
maxmemory-policy allkeys-lru
maxmemory-samples 5
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /www/server/redis/
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
appendonly no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
slowlog-log-slower-than 10000
slowlog-max-len 128
hz 10
dynamic-hz yes
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
4.6 memcached 1.6 优化脚本
# /etc/init.d/memcached
#!/bin/bash
IP=127.0.0.1
PORT=11211
USER=memcached
MAXCONN=512
CACHESIZE=128
OPTIONS="-t 2"
RETVAL=0
prog="memcached"
start() {
echo -n $"Starting $prog: "
/usr/local/memcached/bin/memcached -d -l $IP -p $PORT -u $USER -m $CACHESIZE -c $MAXCONN -P /var/run/memcached.pid $OPTIONS
[ "$?" != 0 ] && echo " failed" && exit 1 || { touch /var/lock/subsys/memcached; echo $(pgrep -f memcached) > /var/run/memcached.pid; echo " done"; }
}
stop() {
echo -n $"Stopping $prog: "
[ -e /var/run/memcached.pid ] || { echo "$prog not running"; exit 1; }
kill $(cat /var/run/memcached.pid) && rm -f /var/lock/subsys/memcached /var/run/memcached.pid
echo " done"
}
restart() { $0 stop; sleep 2; $0 start; }
case "$1" in
start|stop|restart|reload) $1 ;;
*) echo "Usage: $0 {start|stop|restart|reload}"; exit 1 ;;
esac
5. 常见问题 & 彩蛋
- 端口放行:aaPanel 默认 7800|888|80|443|20|21 记得在防火墙放行。
- 忘记密码:SSH 执行
bt
→ 选项 5 改面板密码。 - 中文界面:
wget -O aapanel_chinese.zip https://github.com/gacjie/aapanel_chinese/releases/download/6.8.27/aapanel_simplified_chinese_6827.zip unzip -o aapanel_chinese.zip -d /www/server/ && /etc/init.d/bt restart
- 彩蛋:把
/www/server/panel/plugin/static_cdn
删掉,面板秒开!
2C2G 也能跑得飞起,日 5000 IP 毫无压力!
没有回复内容