LAMP(Linux, Apache, MySQL, PHP)相比LNMP(Linux, Nginx, MySQL, PHP)的优势在于其成熟稳定、文档丰富、社区支持强大。Apache的模块化设计带来高度灵活性,支持.htaccess文件,便于共享主机环境配置。LAMP=Linux+Apache+Mysql/MariaDB+PHP/Perl/Python。LAMP 相对于 NGINX 来说较为安全,但是Nginx处理高并发比Apache要强。最好的架构是Nginx和Apache结合使用:使用Nginx可以做集群等相关配置,可以和apache一起使用,有的会用apache去跑php,然后用nginx做反向代理,比如apache运行在8080端口,nginx在80端口,访问php文件时,反向代理到apache,静态页通过nginx处理。
当前Apache 最新版(2024.12):httpd-2.4.62.tar.gz
通过这个官方网站,可以下到最新的版本:下载地址
1、安装Apache
Apache本身只处理静态页面,处理动态页面需要使用libphp5.so这个模块去工作,编译php其实是将一个至关重要的模块打入到apache内部,然后apache收到php请求,将请求交给这个模块来处理!
# 开通防火墙:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=443/tcp --permanent
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload
# 安装依赖:
yum groupinstall "Development Tools" && \
yum install apr-devel apr-util-devel pcre-devel openssl-devel
# 创建目录:
mkdir -p /usr/local/web/apache/
# 解压:
tar -zxvf httpd-2.4.62.tar.gz -C
cd httpd-2.4.62
./configure --prefix=/usr/local/web/apache \
--enable-so \
--enable-rewrite \
--enable-mods-shared=all
# 编译安装
make && make install
添加httpd系统服务
cat << eof > /etc/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/web/apache/logs/httpd.pid
ExecStart=/usr/local/web/apache/bin/httpd -k start
ExecReload=/usr/local/web/apache/bin/httpd -k graceful-restart
ExecStop=/usr/local/web/apache/bin/httpd -k stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
eof
systemctl enable httpd
systemctl start httpd
把httpd服务的可执行程序文件放入路径环境变量的目录中
ln -s /usr/local/web/apache/conf/httpd.conf /etc/
ln -s /usr/local/web/apache/bin/* /usr/local/bin/
**修改httpd 服务配置文件:**vi /etc/httpd.conf
[!NOTE]
Listen 192.168.10.11:80 # 本地地址
ServerName www.ppyython.cn:80 # 取消注释
DocumentRoot “/usr/local/web/apache/htdocs” # 默认首页存放路径
DirectoryIndex index.html # 默认首页文件名设置httpd -t # 检查配置文件的配置项是否有误
echo "192.168.10.11 www.ppyython.cn" >> /etc/hosts
# win上配置:C:\Windows\System32\drivers\etc\hosts
192.168.10.11 www.ppyython.cn
浏览器访问:
2、安装mariadb
卸载安装的包:yum remove mariadb-libs-5.5.68-1.el7.x86_64 -y
安装依赖:卸载安装的包:yum remove mariadb-libs-5.5.68-1.el7.x86_64 -y
安装数据库:yum install MariaDB-server -y
启动、开机自启并查看是否安装成功
systemctl start mariadb
systemctl enable mariadb
mariadb --version
# 初始化配置:
mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的新密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# mariadb查看字符集:
show variables like "%character%";show variables like "%collation%";
vi /etc/my.cnf.d/server.cnf
[mysqld] # 这个的下面添加信息
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
vi /etc/my.cnf.d/mysql-clients.cnf
在[mysql]标签下添加
default-character-set=utf8
# 重启:systemctl restart mysqld
3、安装php
php-8.0.0官网下载地址:官网下载:php-8.0.0.tar.gz
这是我当前的理解,可能有偏差:lamp中安装php和lnmp中安装php是不一样的,因为原理都不一样。lamp中安装php,要通过安装php*_module模块(with-apxs2)来实现互联互通。而lnmp中安装pap是通过nginx代理到9000端口是实现的。【–with-mysqli=mysqlnd】用于与 MySQL 数据库进行交互,而【with-pdo-mysql】提供了一个轻量级的、一致性的接口来访问多个数据库。
# 安装依赖:
yum install -y libxml2-devel sqlite-devel oniguruma-devel bzip2-devel \
libpng-devel libjpeg-turbo-devel freetype-devel readline-devel libxslt-devel \
php-gd libzip-devel libpng-devel libjpeg-turbo-devel
# 源码安装:
tar -xvf php-8.0.0.tar.gz
cd php-8.0.0
# 确保在配置 PHP 时也指定 Apache 的安装路径,以便它们可以找到彼此。
./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/web/apache/bin/apxs \
--enable-mbstring \
--with-config-file-path=/usr/local/php/etc \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib \
--with-libxml \
--enable-gd \
--enable-gd-jis-conv \
--with-openssl \
--with-jpeg \
--with-freetype \
--with-zip \
--enable-sockets \
--enable-soap \
--enable-calendar \
--enable-intl \
--enable-exif \
--enable-bcmath \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-opcache \
--enable-fpm
make && make install
# 问题处理:No package 'icu-uc' found;No package 'icu-io' found;No package 'icu-i18n' found
yum install -y icu libicu-devel
# 问题2:Requested 'libzip >= 0.11' but version of libzip is 0.10.1
yum remove libzip-devel libzip -y
wget https://libzip.org/download/libzip-1.3.2.tar.gz --no-check-certificate
./configure
make
make install
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH #若配置php报错,在php目录执行一下就可以了。
echo $PKG_CONFIG_PATH # 能返回信息
# 配置完了,还可以继续配置,make clean或者make distclean
# 复制配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
# 启用php-fpm:
/usr/local/php/sbin/php-fpm
# 查看进程和占用的端口
ps aux | grep php | grep -v grep
ss -lntp | grep php
# 查看版本:
php --version
# 遇到问题:-bash: php: 未找到命令
# 解决问题:
vi /etc/profile
PATH=$PATH:/usr/local/php/bin
export PATH
# 刷新配置:
source /etc/profile
# 配置php-fpm用户
useradd -s /sbin/nologin php-fpm
# 配置php-fmp:
vi /usr/local/php/etc/php-fpm.d/www.conf
[www]
user = php-fpm
group = php-fpm
listen = 127.0.0.1:9000 # PHP端口号
pm.max_children = 50 # 最大进程数量
pm.start_servers = 5 # 最小进程数量
pm.min_spare_servers = 2 # 最少需要几个空闲着的进程
pm.max_spare_servers = 10 # 最多允许几个进程处于空闲状态
# 其他参数可设置:
pm = dynamic // 选择动态模式
pm.max_requests = 300
# 启用systemctl来管理php
cat << eof > /etc/systemd/system/php-fpm.service
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
eof
# 开机启动
systemctl enable php-fpm
systemctl start php-fpm
至此,三个服务每次开机后都会自动启动。经过测试,没有问题。
4、配置 Apache 以识别 PHP 文件
vi /etc/httpd.conf
# 加载 PHP 模块
LoadModule php_module /usr/local/web/apache/modules/libphp.so # 安装完发现就有了
# 设置Apache处理PHP文件
AddHandler php-script .php
AddType application/x-httpd-php .php
# 检测配置是否有语法错误:
httpd -t
# 重启:
systemctl restart httpd
创建一个简单的 PHP 脚本以测试配置
vi /usr/local/web/apache/htdocs/info.php
<?php
phpinfo();
?>
浏览器:http://www.ppyython.cn/info.php
5、配置 Apache 以读取到数据库
5.1、创建一个测试数据库和表:
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL
);
INSERT INTO users (username, password) VALUES ('testuser', 'testpass');
5.2、创建 PHP 脚本
1、使用mysqli 版本连接:vi /usr/local/web/apache/htdocs/testdb1.php
<?php
// mysqli 版本
$servername = "192.168.10.11";
$username = "your_username"; // 替换为你的数据库用户名
$password = "your_password"; // 替换为你的数据库密码
$dbname = "testdb";
// 创建连接
$conn = new mysqli($servername, $username,$password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT id, username, password FROM users";$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 输出数据
while($row =$result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Username: " .$row["username"]. " - Password: " . $row["password"]. "<br>";
}
} else {
echo "0 结果";
}
$conn->close();
?>
2、使用PDO版本连接:vi /usr/local/web/apache/htdocs/testdb2.php
<?php
$servername = "192.168.10.11";
$username = "your_username"; // 替换为你的数据库用户名
$password = "your_password"; // 替换为你的数据库密码
$dbname = "testdb";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname",$username, $password);
// 设置 PDO 错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT id, username, password FROM users";
$result =$conn->query($sql);
while($row =$result->fetch()) {
echo "id: " . $row["id"]. " - Username: " .$row["username"]. " - Password: " . $row["password"]. "<br>";
}
}
catch(PDOException $e)
{
echo "连接失败: " . $e->getMessage();
}
$conn = null;
?>
浏览器访问:
6、安装论坛
# 创建数据库:
mysql -uroot -p
create database liang;
CREATE USER 'lianguser'@'%' IDENTIFIED BY 'admin@123';
GRANT ALL PRIVILEGES ON liang.* TO 'lianguser'@'%' IDENTIFIED BY 'admin@123' WITH GRANT OPTION;
FLUSH PRIVILEGES;
下载论坛:https://www.dismall.com/thread-14660-1-1.html
unzip Discuz_X3.5_SC_UTF8_20240520.zip
mkdir /usr/local/web/apache/htdocs/liang
cp -r upload/* /usr/local/web/apache/htdocs/liang
chmod -R 777 liang/
浏览器访问:http://www.ppyython.cn/liang/install/index.php
创建数据库环节:把刚才创建的数据库相关信息填写进去,并设置管理员信息。
完成配置之后,提示:您的服务器不支持 CURL,这将会导致应用无法安装。请联系您的服务商或者网站技术人员
# 安装依赖:
yum install curl-devel
# 编译 PHP 的 cURL 扩展
cd /root/php-8.0.0
配置的时候加上:--with-curl
make && make install
# 重启:
systemctl restart httpd
# 查看是否显示了 cURL 扩展
php -m
7、apache配置https
# 配置、编译和安装 Apache
cd httpd-2.4.62
./configure --prefix=/usr/local/web/apache \
--enable-so \
--enable-rewrite \
--enable-mods-shared=all \
--enable-ssl
# 编译安装
make && make install
# vi /etc/httpd.conf
LoadModule ssl_module modules/mod_ssl.so # 取消注释
Include /etc/httpd/conf.d/ssl.conf # 添加一行
生成自签名证书:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/certs/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
这个命令会创建一个有效期为 365 天的 RSA 密钥和证书,并且会提示你输入一些证书信息。
# 配置apache
cd /etc/httpd/conf.d && cp ssl.conf.rpmsave ssl.conf
vi /etc/httpd/conf.d/ssl.conf
#SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog # 不需要密钥,注释掉
<VirtualHost _default_:443>
ServerName www.ppyython.cn:443
ServerAdmin webmaster@yourdomain.com
DocumentRoot "/usr/local/web/apache/htdocs"
SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt
SSLCertificateKeyFile /etc/ssl/certs/apache-selfsigned.key
<Directory "/usr/local/web/apache/htdocs">
Require all granted
</Directory>
</VirtualHost>
重启apache:systemctl restart httpd
https登录访问: