Ubuntu 配置 LAMP 环境

1. Apache

1.1. 安装Apache

1
sudo apt update && apt install apache2

1.2. 启动Apache

任选一条命令启动apache:

1
2
3
4
apache2ctl -k start
systemctl start apache2
service apache2 start
/etc/init.d/apache2 start

1.3. 验证服务状态

执行curl -I 127.0.0.1,能看到200状态码则说明服务正在运行。

1.4. 常见问题

  1. 启动过程若如果遇到配置文件错误的提示,执行下面这条命令可解决大部分相关问题:
1
source /etc/apache2/envvars
  1. 如果已经安装了Nginx并且正在运行,则还需要修改apache默认监听端口,比如改为81:
1
sudo sed -i '/^Listen 80/c\#Listen 80\nListen 81' /etc/apache2/ports.conf
  1. 去除AH00558警告:
1
echo ServerName localhost >> /etc/apache2/apache2.conf

注意,这里的localhost并不表示只接受来自本机的访问,而是一个服务器名称,用于给apache服务器构建它自身的url, 比如apache服务器在需要引用自己的时候,将会使用如 http://localhost/ 这样的URL, 并且在日志中记录的也将是localhost,方便更容易地看出哪些请求是由服务器本身发出的。

  1. 没有索引文件时禁止显示目录结构(目录遍历漏洞):

编辑/etc/apache2/apache2.conf文件中的<Directory /var/www/>项,将Options字段中的Indexes删除:

1
2
sudo sed -i 's/Options Indexes FollowSymLinks/Options FollowSymLinks/' /etc/apache2/apache2.conf
apache2ctl -k restart
  1. 隐藏Apache版本信息:
1
2
sudo sed -i '$a ServerTokens Prod' /etc/apache2/apache2.conf
sudo apache2ctl -k restart

1.5. 常用命令

1
2
3
4
5
apache2ctl [-k start|restart|graceful-stop|stop]  # 服务启停(推荐,会自动加载环境变量)
apache2 -k [-k start|restart|graceful-stop|stop] # 服务启停
apache2ctl -t # 测试配置文件
apache2 -V # 查看详细版本信息
apache2ctl -M # 查看已加载的模块

2. PHP

2.1. 安装PHP

1
sudo apt install php # 安装过程会自动安装以及配置相关模块

2.2. 验证服务状态

1
2
echo <?php phpinfo();?> /var/www/html/index.php
curl 127.0.0.1/index.php # 返回大量内容则说明PHP调用成功,否则需要修复

2.3. 修复无法调用PHP

1
2
3
4
sudo apt install -y libapache2-mod-php
apache2ctl -k restart
apache2ctl -M | grep php # 检查php模块是否已在使用
curl 127.0.0.1/index.php # 再次验证

3. MySQL

3.1 安装MySQL和phpMyAdmin

1
2
3
sudo apt install mysql-server
sudo apt install phpmyadmin # 安装时选择apache和no
apache2ctl -k restart

3.2. 启用phpMyAdmin

1
2
echo Include /etc/phpmyadmin/apache.conf >> /etc/apache2/apache2.conf  # 启用配置
apache2ctl -k restart

本机浏览器访问127.0.0.1/phpmyadmin即可看到登录页面。

注意:如果重启Apache2时弹AH00671警告,则需注释掉/etc/apache2/apache2.conf文件中的Include /etc/phpmyadmin/apache.conf,重启即可。

3.3. 常见问题

  1. phpMyAdmin禁止空密码用户登录

编辑/etc/phpmyadmin/config.inc.php文件,将含AllowNoPassword的两行取消注释,再回到网页即可使用空密码登录。

  1. mysql的root用户无法登录

在mysql8.0以后,root用户使用auth_socket插件进行身份验证,此插件不验证登录密码,也就是说,即使给root设置了密码,也不会进行验证,只有本地系统的root用户才能登录mysql的root账户,其他用户必须使用sudo提权至root才可登录。

解决方法有两个,第一个是取消auth_socket验证,改为password验证(不推荐):

1
2
3
4
select user,host,authentication_string from mysql.user;  -- 可以看到root用户默认没有设置密码
select user,host,plugin from mysql.user; -- 可以看到root用户使用的插件为auth_socket
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; -- 将认证插件更改为mysql_native_password并设置root密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket; -- 恢复auth_socket验证

第二个方法是创建新用户并赋予全部权限来代替root用户(推荐):

1
2
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

4. 参考资料

How to install Apache2, Ubuntu
How to install on Debian and Ubuntu, phpMyAdmin
在Ubuntu上安装并配置Apache2 + PHP, 爱拼安小匠
故障分析 | 正确使用 auth_socket 验证插件, 爱可生开源社区