Debian 13.5 下安装Apache+PHP+Mariadb+VSftp

Debian 13.5 下安装Apache+PHP+Mariadb+VSftp
准备工作:更新系统和安装必要工具
在开始安装任何软件之前,建议先更新系统的软件包索引,并安装一些常用的管理工具。
apt update
apt upgrade -y
apt install -y lsb-release ca-certificates curl
安装完成后,Apache 服务会自动启动。你可以通过以下命令验证它的运行状态
apt install -y apache2 apache2-utils
安装 PHP 及其 Apache 模块 在 Debian 系统中,最常用的方式就是通过 libapache2-mod-php 这个包,让 Apache 能够直接处理 PHP 文件
apt install php libapache2-mod-php -y
同时安装一些常用的 PHP 扩展,以满足大多数 Web 应用(如 WordPress)的需求
apt install php-mysqli php-imagick php-redis php-curl php-gd php-mbstring php-xml php-dom php-intl php-zip -y
PHP 版本号
php -v
PHP模块支持检查:
php -m | grep -E “mbstring|xml|gd|redis|curl|dom|imagick|zip|gd|intl”
PHP配置文件
vi /etc/php/*/apache2/php.ini
添加www用户组和www用户且不允许登录
useradd -d /var/www -g www -s /usr/sbin/nologin -M www
更改网站目录权限
chown -R www:www /var/www
配置Apache
vi /etc/apache2/apache2.conf
修改加入:
User www
Group www
vi /etc/apache2/ports.conf
vi /etc/apache2/sites-available/000-default.conf
开启 URL 重写 (mod_rewrite)
a2enmod rewrite ssl
配置网站目录以支持 .htaccess,为了让 Apache 读取并应用网站目录下的 .htaccess 文件,需要修改对应目录的 AllowOverride 设置。
vi /etc/apache2/sites-available/000-default.conf
在 <VirtualHost> 块内,为你的网站根目录添加或修改 <Directory> 配置,将 AllowOverride 设置为 All:
<VirtualHost *:80>
# … 其他配置 …
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Apache配置检查
apache2ctl configtest
重启 Apache
systemctl restart apache2
安装 MariaDB 服务器和客户端:
apt install mariadb-server mariadb-client -y
安装完成后,MariaDB 服务通常会自动启动。你可以通过以下命令验证其状态:
systemctl status mariadb
确保 MariaDB 服务当前是运行状态时,设置开机自启
systemctl enable mariadb
初始化 root 密码(核心步骤)
mariadb-secure-installation
按提示进行交互设置(这里是关键):
Enter current password for root (enter for none):
因为是初次设置,直接按 Enter 跳过。
Switch to unix_socket authentication [Y/n]:
这里要特别注意。如果你希望使用密码登录,请输入 n(选择否),这样会保留密码认证方式。如果输入 y,则只能通过 sudo mariadb 登录。
Change the root password? [Y/n]:
输入 y,然后根据提示设置一个强密码。
Remove anonymous users? [Y/n]:
输入 y,删除匿名用户以提升安全性。
Disallow root login remotely? [Y/n]:
输入 y,禁止 root 用户远程登录(这是一种好习惯)。
Remove test database and access to it? [Y/n]:
输入 y,删除测试数据库。
Reload privilege tables now? [Y/n]:
输入 y,重新加载权限表使更改生效。
Debian常用操作
在命令行中查看MySQL安装路径
which mysql
查看MySQL服务器程序的安装路径
whereis mysqld
查看MySQL配置文件的位置
ls -l /etc/mysql
查看MySQL数据目录的位置
ls -l /var/lib/mysql
查看MySQL插件目录的位置
ls -l /usr/lib/mysql/plugin
apache2配置文件目录
/etc/apache2/
apache2启动
systemctl restart apache2
apache2停止
systemctl stop apache2
查看apache2启动错误
clear && systemctl status apache2.service
Apache多线程配置
开启prefork多线程模式
a2dismod mpm_event && a2dismod mpm_worker && a2enmod mpm_prefork && systemctl restart apache2
vi /etc/apache2/mods-enabled/mpm_prefork.conf
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
参数解释:
MaxRequestWorkers (关键参数):Apache 能同时处理的最大请求数。这是限制并发能力的核心参数。
如何设置:保守起见,可以用“服务器可用内存(MB) ÷ 单个 Apache 进程平均内存占用(MB)”来估算。例如,2GB内存,单进程约50MB,上限约40。如果服务器内存不大,一定要把这个值调小,比如设为 50 或更低,否则容易因内存耗尽而崩溃。
MaxConnectionsPerChild:每个子进程处理完指定数量的请求后自动销毁,可以有效防止因程序(如PHP)内存泄漏导致的内存耗尽。设为 1000 或 10000 是比较稳妥的做法。
StartServers、MinSpareServers、MaxSpareServers:控制进程池的大小,保证在请求到来时能快速响应。通常保持默认或按需微调即可。
配置虚拟网站
# 为两个示例网站创建目录
mkdir -p /var/www/www.1539.cn/public_html && mkdir -p /var/www/o.1539.cn/public_html && mkdir -p /var/www/api.1539.cn/public_html
# 创建简单的测试首页
echo “<h1>Welcome to www.1539.cn</h1>” | tee /var/www/www.1539.cn/public_html/index.html
echo “<h1>Welcome to o.1539.cn</h1>” | tee /var/www/o.1539.cn/public_html/index.html
echo “<h1>Welcome to api.1539.cn</h1>” | tee /var/www/api.1539.cn/public_html/index.html
# 设置目录所有者为你当前的用户和www组
chown -R www:www /var/www/www.1539.cn && chown -R www:www /var/www/o.1539.cn && chown -R www:www /var/www/api.1539.cn
# 设置适当的权限
chmod -R 755 /var/www/www.1539.cn && chmod -R 755 /var/www/o.1539.cn && chmod -R 755 /var/www/api.1539.cn
配置网站
vi /etc/apache2/sites-available/www.1539.cn.conf
复制粘贴:
<VirtualHost *:80>
ServerAdmin 28693177@qq.com
ServerName 1539.cn
ServerAlias www.1539.cn
DocumentRoot /var/www/www.1539.cn/public_html
<Directory /var/www/www.1539.cn/public_html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/www.1539.cn_error.log
CustomLog ${APACHE_LOG_DIR}/www.1539.cn_access.log combined
</VirtualHost>
# 启用新创建的虚拟主机
a2ensite www.1539.cn.conf
# 检查配置文件语法是否正确
apache2ctl configtest
以此类推,可以建立多个虚拟主机
1GB 内存 MariaDB 优化配置
vi /etc/mysql/mariadb.conf.d/50-server.cnf
内存与性能核心参数
key_buffer_size = 32M(非常重要)
作用:这是 MyISAM 存储引擎的专属索引缓冲区大小。它决定了数据库在处理 MyISAM 表的索引时,能使用多少内存来加速查询。
建议:如果你的系统主要使用 InnoDB(现代默认),这个值不宜过大,32M-64M 足够,因为 InnoDB 有自己的缓冲池。如果 MyISAM 表很多且索引很大,可以适当调大(如 256M),但不要超过物理内存的 30%。
max_allowed_packet = 10M
作用:允许客户端和服务器之间一次传输的最大数据包大小。这直接影响你能否导入大 SQL 文件、插入大文本或 BLOB 字段(如存图片/文件)。
建议:如果你的业务涉及大字段操作,通常需要调大,比如 128M 或 256M。如果默认太小,导入大数据库时会出现 Packet too large 错误。
max_connections = 100
允许的最大客户端并发连接数。默认通常是 151,如果你网站访问量大,需要调大(如 500),但要注意内存开销(每个连接会消耗约 2-4MB)。
table_cache = 64(在较新版本中改名为 table_open_cache)
表缓存数量:服务器能同时打开的表文件描述符数量。如果并发查询涉及很多表,这个值太小会导致频繁打开/关闭表,降低性能。繁忙服务器通常设到 2000 以上。
# — 核心:InnoDB 缓冲池 (最重要!) —
# 这是 InnoDB 引擎缓存数据和索引的地方。对于1GB内存,建议设置在 256M – 384M 之
# 留出足够内存给操作系统和其他进程,避免系统开始使用 Swap 交换空间,那会严重拖慢性能。
innodb_buffer_pool_size = 256M
安装FTP
apt install vsftpd -y
再添加一个名字叫做“fs_user ”FTP用户,只能访问 /var/www目录
useradd -d /var/www -g www -s /usr/sbin/nologin -M fs_user
参数解释:
-d /var/www:设置用户主目录为 /var/www
-g www:指定主工作组为 www
-s /usr/sbin/nologin:禁止 SSH 登录(该用户无法交互式登录)
-M:不自动创建家目录(因为 /var/www 已存在,避免权限覆盖)
fs_user:用户名
vi /etc/vsftpd.chroot_list
添加www用户名字和fs_user 名字,一行一个即可
vi /etc/vsftpd.conf
#启用在chroot_list_file的用户只能访问根目录
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
禁止匿名登录:
anonymous_enable=NO
启用了chroot的话,根目录要设置为不可写才能登录,否则就算是成功登录,也不会显示文件列表
chmod a-w /var/www
重启
systemctl restart vsftpd
设置开机自启:确保服务器重启后 vsftpd 能自动运行。
systemctl enable vsftpd
解决530错误
vi /etc/pam.d/vsftpd
注释掉下面两行再重启
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
//查看FTP配置项目
cat /etc/vsftpd.conf |grep ^[^#]
FlashFXP登录软件设置:
新建站点 》 FTP 》 数据连接模式 》 主动模式(PORT)
注意,现在FTP客户端软件默认都是被动模式,现在我们设置必须选择主动模式才能登录。
如果VSFTP用着一直没有问题,突然有问题了,可能是防火墙设置错误,可关闭试试

