实验内容介绍
Linux 操作系统在服务器领域具有广泛的应用。Web 服务是服务器领域中应用最广泛的服务,常见 Web 服务有 WAMP(Windows+Apache+MySQL+PHP)
和 LAMP(Linux+Apache+MySQL+PHP)
架构,其中 Apache 是全世界最流行的 Web 服务软件,此外,Web 服务软件 nginx,因其具有优秀的性能也受到越来越多的用户欢迎。本实验中,演示在 Linux 环境下搭建支持 PHP 等网页的 Web 服务平台,即LAMP。
Linux 环境下搭建 Web 服务器有三种方式,一是在安装操作系统时勾选相应服务组件;二是从网上下载或从 ISO 系统镜像包中拷贝安装包手动安装;三是在在连接网络的的情况下在线安装。
本实验演示以 kali 64 位操作系统为例。因 kali 系统已经自带 Apache、MySQL 和 PHP,为了解安装流程,请先卸载系统自带软件。
卸载系统原有Apache、MySQL、PHP
sudo apt-get remove apache2
sudo apt-get remove mysql-*
sudo apt-get remove php
在线安装Apache 服务器
输入命令:sudo apt-get install apache2
输入命令:sudo /etc/init.d/apache2 start
手动启动服务
以上页面详细介绍了 Debian 发行版 Linux 中 Apache 基本信息,其中:
Apache 根目录:/var/www/html
Apache 配置目录和文件:/etc/apache2
: Apache 主配置目录, Apache 所有配置文件均在此目录下;/etc/apache2/apache2.conf
: 主配置文件,可配置 Apache 全局配置;/etc/apache2/ports.conf
: 端口配置文件。默认情况下,当启用提供 SSL功能的模块时,Apache 监听端口 80,并在端口 443 上进行监听。
其它文件略。
Apache 日志文件:/var/log/apache2/access.log
: 服务请求日志/var/log/apache2/error.log
: 服务错误日志
Apache 基本操作:
服务启动:/etc/init.d/apache2 start
服务停止:/etc/init.d/apache2 stop
服务重启:/etc/init.d/apache2 restart
部分 Linux 安装 Apache 后可能出现服务正常运行,相应端口正常打开,但其它主机无法访问情况,此现象一般是因为系统防火墙未开放相应服务端口。在浏览器找那个输入虚拟机的IP,看到:
说明服务器配置成功!
安装 MySQL/MariaDB
本示例采用 MariaDB 代替 MySQL。MariaDB 是 MySQL 的一个分支,现由开源社区维护,采用 GPL 授权许可,其大部分语法与 MySQL 都相同。因 MySQL 被 Oracle收购后有闭源的风险,大部分 Linux 组织均从其套件清单删除了 MySQL,并以MariaDB 代替 MySQL,若一定要使用 MySQL,可通过下载安装包的方式手动安装MySQL。
安装 MariaDB 服务:sudo apt-get install mariadb-server
sudo apt-get install mariadb-client
遇到的问题:
首先就是提示没有mariadb-server
软件包,类似于这样
这个可能是apt版本不够,需要执行sudo apt-get update
进行更新,但是更新实在太慢,我更新了33分钟才更新好,这时候已经快下课了。
然后就是出现域名无法解析的错误
这个错误困扰了我好久,按照网上的方法试了很多,但是还是不行。最后发现是/etc/network/interfaces
文件中网关写错了,写成了192.168.1.0
,正确的应该是192.168.1.1
然后修改/etc/resolv.conf
文件,增加字段:nameserver 8.8.8.8(好像是谷歌的DNS服务器)
,然后执行ifdown -a
关闭网卡,ifup -a
启动网卡,然后就可以了。
至于为什么会出现DNS解析错误,一开始我的虚拟机的网络是用的NAT(虚拟地址转换),在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。在NAT模式下,宿主计算机相当于一台开启了DHCP功能的路由器,而虚拟机则是内网中的一台真实主机,通过路由器(宿主计算机)DHCP动态获得网络参数。因此在NAT模式下,虚拟机可以访问外部网络,反之则不行,因为虚拟机属于内网。
而改成了桥接模式后,虚拟机和宿主计算机处于同等地位(同处一个局域网),虚拟机就像是一台真实主机一样存在于局域网中。因此在桥接模式下,我们就要像对待其他真实计算机一样为其配置IP、网关、子网掩码等等。
但是修改/etc/resolv.conf
,重启过后就没有了,我们需要安装resolvconfig
应用组件:sudo apt-get install resolvconf
,在/etc/resolvconf/resolv.conf.d/base
文件中添加DNS信息(nameserver 8.8.8.8)
,就可以了。
然后再次重新启动,刚刚的问题解决!
配置 Mariadb 的安全选项:sudo mysql_secure_installation
此时系统会提示输入数据库 root 用户密码,因系统并未设置相应密码,此时直接按提示回车即可。若提示错误,则 sudo /etc/init.d/mysql restart 命令重启 mysql 服务并重新执行安全选项命令。随后数据库会提示以下安全设置信息,一般设置数据库 root 用户密码即可,其它选项按回车选择默认:
- Enter current password for root (enter for none): 输入当前 root的密码(因新数据库无密码,回车即可);
- Set root password? [Y/n] 回车,默认为输入 Y;
- New password: 输入新密码;
- Re-enter new password 确认密码;
- Remove anonymous users? [Y/n] 移除匿名用户;
- Disallow root login remotely? [Y/n] 禁止 root 远程登录;
- Remove test database and access to it? [Y/n] 移除测试数据库;
- Reload privilege tables now? [Y/n] 重新加载权限表。
测试数据库:
如图所示,若进入数据库则表示数据库安装成功,sudo mysql -u root -p
安装PHP
安装 PHP 除了 PHP 应用程序外,还需安装 PHP 与 Apache、MySQL/MariaDB相关扩展包,扩展包需与软件对应,本例中安装 php7.2 版本,对应扩展包可通过以下命令模糊查询:sudo apt-cache search php7
从查询结果可知,php7.3对应Apache、MySQL扩展包分别为 :libapahe2-mod-php7.2,php7.2-mysql
.如下图所示为安装 PHP 相关软件包。sudo apt-get install php7.2 libapahe2-mod-php7.2 php7.2-mysql PHP
安装完毕后需重启 Apache
测试PHP页面
编辑测试文件,如下图所示,在 /var/www/html
目录下新建 test.php
文件,并输入如下所示的测试代码。
1 | echo phpinfo(); |
在浏览器中访问如下:
注意:我修改了Apache的端口为8080,因此访问时要在URL后面加上8080端口。
创建文件上传页面
文件上传功能由上传文件的 HTML 表单和文件上传脚本构成。在根目录下创建upload.html
文件,编辑表单
在根目录下创建 upload.php
脚本文件,编写文件上传功能代码:
在根目录下创建“upload”目录,用于保存上传的图片
然后访问192.168.1.120:8080/upload.html
选择一个不超过200K的图片文件:
先修改upload文件夹的权限,上传之后查看服务器中upload文件夹:
或者查看Apache的属主:ps -ef | grep apache
,发现是www-data
然后更改修改目录的所有者:
结果和上述一样,大功告成!