环境:阿里云服务器ECS,Alibaba Cloud Linux 3.2104 LTS 64位 ,2核(vCPU) 2 GiB
LAMP 是搭建Web应用时最常用的环境,LAMP 分别表示 Linux、Apache、MySQL 以及 PHP,即在Linux 系统中安装 Apache、MySQL 以及 PHP。
此前参考阿里云服务器教程,使用yum安装Apache和PHP,但是出现了Apache无法调用PHP模块的情况,因此文章全面参考PHP官方文档-Unix系统下的Apache2.x和Apache官方的2.4版本安装指南,进行编译生成。这部分内容不仅可供CentOS等Red Hat类系统参考,也可供其他系统参考。
由于系统等导致的差异,不同环境场景下可能出现各种不同的问题,可以自行查找需要的各种依赖。
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
我选择的是Apache的最新版本,httpd-2.4.55,可以使用下面命令获取:
wget https://dlcdn.apache.org/httpd/httpd-2.4.55.tar.gz
解压软件包,-v选项为过程可视化,tar等linux下常见的解压工具使用可以参考这篇:
tar -xzvf httpd-2.4.55.tar.gz
此时,当前目录下有文件httpd-2.4.55.tar.gz和文件夹httpd-2.4.55。
根据实践操作和Apache官方文档,我们应该提前安装好一些依赖,否则在编译过程中会出现错误。
下面是Apache官方2.4版本安装文档列出的Apache httpd需要的依赖列表:
一般情况下,我们需要提前安装的有APR、APR-Util和PCRE,此处我选择的都是当前与Apache兼容的最新版本。
下载资源:
wget http://archive.apache.org/dist/apr/apr-1.7.2.tar.gz
wget http://archive.apache.org/dist/apr/apr-util-1.6.3.tar.gz
wget https://sourceforge.net/projects/pcre/files/pcre2/10.37/pcre2-10.37.tar.gz
解压,编译安装:
tar -xzf apr-1.7.2.tar.gz
cd apr-1.7.2
./configure --prefix=/usr/local/apr #--prefix用来安装到指定目录
make
make install
tar -xzf apr-util-1.6.3.tar.gz
cd apr-util-1.6.3
./configure --prefix=/usr/local/apr-util -with-apr=/usr/local/apr/bin/apr-1-config
make
make install
tar -xzf pcre2-10.37.tar.gz
cd pcre2-10.37
./configure --prefix=/usr/local/pcre
make
make install
以上三个依赖将在Apache生成Makefile的阶段使用。
cd httpd-2.4.55
./configure --enable-so --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre
make
make install
现在已经将 Apache 2.4.55 安装在 /usr/local/apache2。
Apache的配置文件位于/usr/local/apache2/conf/httpd.conf
,简单的进行一些必要的配置,我们后续还会对其进行修改。
vim /usr/local/apache2/conf/httpd.conf
找到被注释的#ServerName
,并修改为ServerName localhost:80
,以免启动服务器报错。
配置文件中,默认的加载网页的主目录为/usr/local/apache2/htdocs
,此目录下默认已有文件index.html
,用于测试。可以手动修改为其他目录(例如常用的有/var/www/html/
)。
可以使用如下命令启动 Apache 服务器:
/usr/local/apache2/bin/apachectl start
Apache默认监听80端口,只需在其他主机的浏览器访问服务器的公网IP地址:http://<服务器公网IP>
cd ~ && vim .bash_profile
修改环境变量,增加/usr/local/apache2/bin/apachectl
:
PATH=$PATH:$HOME/bin:/usr/bin:/usr/local/apache2/bin/
重新加载配置文件:
source .bash_profile
查看使用:
apachectl -h
PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。 [1-2] PHP同时支持面向对象和面向过程的开发,使用上非常灵活。
参考:PHP官方文档-Unix系统下的Apache2.x
现行的稳定版本可以在官网下载。历史版本(包括已经不支持的版本)可以在此下载。
php-7版本已经在2022年11月停止支持。此处我选择的是最新的php-8.2.2版本:
wget https://www.php.net/distributions/php-8.2.2.tar.gz
解压:
tar -xzvf php-8.2.2.tar.gz
cd ./php-8.2.2
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
make
make install
我此处选择的编译方式是,在有 MySQL 支持的 Apache 2 上进行配置。--with-apxs2=/usr/local/apache2/bin/apxs
选项可以帮助生成libphp.so模块,以供Apache服务器解析php调用。
cp php.ini-development /usr/local/lib/php.ini
vim /usr/local/apache2/conf/httpd.conf
PHP 8 版本需要添加:
LoadModule php_module modules/libphp.so
PHP 7 版本需要添加:
LoadModule php7_module modules/libphp7.so
以上的 make install 命令可能已经完成了这些。如果没有配置则需要手动配置。
让 Apache 将扩展名 .php 解析成 PHP
SetHandler application/x-httpd-php
#如果你想拓展功能,也可以替换为下面的配置
#将 .php,.php2,.php3,.php4,.php5,.php6,以及 .phtml 文件都当做 PHP 来运行
SetHandler application/x-httpd-php
将 .phps 文件由 PHP 源码过滤器处理,使得其在显示时可以高亮源码
SetHandler application/x-httpd-php-source
echo "" > /usr/local/apache2/htdocs/index.php
apachectl start
在其他主机的浏览器访问地址:http://<服务器公网IP>/index.php ,成功显示如下:
PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根据它们的长项持续改进提升自己,例如java的面向对象编程,该语言当初创建的主要目标是让开发人员快速编写出优质的web网站。 [1-2] PHP同时支持面向对象和面向过程的开发,使用上非常灵活。
wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
在进行mysql-community-server
的安装之前,为避免Error:GPG check FAILED
,可以采取两种方案
rpm --import [https://repo.mysql.com/RPM-GPG-KEY-mysql-2022](https://repo.mysql.com/RPM-GPG-KEY-mysql-2022)
yum install mysql-community-server --nogpgcheck
之后执行下面:
yum -y install mysql-community-server
systemctl start mysqld.service
grep "password" /var/log/mysqld.log
mysql -u root -p #不建议使用明文密码登录
输入上述密码登录,进入mysql环境
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your passwd'; #可能需要强密码
#可以在修改密码之前更换为弱密码,执行下述
set global validate_password_policy=0; #修改密码安全策略为低
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your passwd';