从零开始Apache2配置php服务并支持网页访问

前言

最近打算再做一版服务器状态查看的dashboard,采用"子服务器主动向主服务器推送自己的状态"的方案。一种方案是用php写,Apache作为后台服务器。简单写一下构建过程。

TL;DR

github有个docker compose做的lamp全套环境,只需要git clonedocker compose up -d两个命令就能直接搭好linux端的apache+mysql+php环境。试了下确实直接能用,可以参考https://github.com/sprintcube/docker-compose-lamp

准备Apache2环境

以下均为Ubuntu 22.04的wsl,以root运行。配置apache2需要apr、apr-util的runtime包,可以从https://apr.apache.org/download.cgi下载,以及正则、压缩传输、加密、xml的库。

shell 复制代码
wget https://dlcdn.apache.org/apr/apr-1.7.4.tar.gz
wget https://dlcdn.apache.org/apr/apr-util-1.6.3.tar.gz
wget https://dlcdn.apache.org/httpd/httpd-2.4.58.tar.gz
tar xf httpd-2.4.58.tar.gz
tar xf apr-util-1.6.3.tar.gz
tar xf apr-1.7.4.tar.gz
mv apr-util-1.6.3 httpd-2.4.58/srclib/apr-util
mv apr-1.7.4 httpd-2.4.58/srclib/apr

apt install libpcre3 libpcre3-dev zlib1g-dev openssl libssl-dev libexpat1 libexpat1-dev

cd httpd-2.4.58 && ./configure --prefix=/usr/local/apache2 # 可以设置下path
make install

准备PHP环境

https://www.php.net/downloads.php下载最新的php包,比如

shell 复制代码
# 准备php所需要的一些环境
wget https://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
tar xf pkg-config-0.29.2.tar.gz
cd pkg-config-0.29.2 && ./configure --with-internal-glib
make install

# 非常重要
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig

# 最简化安装,详细方式见下方
apt install libxml2 libxml2-dev sqlite3 libsqlite3-dev
wget https://www.php.net/distributions/php-8.2.12.tar.gz
tar xf php-8.2.12.tar.gz
cd php-8.2.12
./configure --prefix=/usr/local/src/php-8.2.12 --sysconfdir=/etc/php-8.2.12 --with-apxs2=/usr/local/src/apache2/bin/apxs  

也可以参考这篇文章,配置更丰富的configure,以下的部分为参考该文章配置的,即

shell 复制代码
apt install build-essential autoconf automake libtool libsqlite3-dev pkg-config libjpeg-dev libpng-dev libxml2-dev libbz2-dev libcurl4-gnutls-dev libssl-dev libffi-dev libwebp-dev libonig-dev libzip-dev libjpeg-dev
cd php-8.2.12 && ./configure --prefix=/usr/local/src/php-8.2.12 --sysconfdir=/etc/php-8.2.12 --with-openssl --with-zlib --with-bz2 --with-curl --enable-bcmath --enable-gd --with-webp --with-jpeg --with-mhash --enable-mbstring --with-imap-ssl --with-mysqli --enable-exif --with-ffi --with-zip --enable-sockets --with-pcre-jit --enable-fpm --with-pdo-mysql --enable-pcntl --with-apxs2=/usr/local/src/apache2/bin/apxs

配置服务器

如果按以上方式安装,则修改/usr/local/apache2/conf/httpd.conf文件的ServerName选项到实际ip和端口。比如ServerName 172.19.202.144:80。这里的ip可以运行ifconfig看一下。

为了使apache对php文件进行解释执行,在httpd.conf文件添加:

text 复制代码
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

设置文档目录,比如

txt 复制代码
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>



#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   AllowOverride FileInfo AuthConfig Limit
    #
    AllowOverride None
    #
    # Controls who can get stuff from this server.
    #
    Require all granted
</Directory>

检查下php模块是不是打开了:

txt 复制代码
LoadModule php_module         modules/libphp.so

启动服务器

shell 复制代码
apachestl start # 假设在准备环境阶段设置了path

随后本地浏览器直接访问localhost即可。

相关推荐
Never_Satisfied2 小时前
在JavaScript / Node.js / 抖音小游戏中,使用tt.request通信
开发语言·javascript·node.js
爱吃小胖橘2 小时前
Unity资源加载模块全解析
开发语言·unity·c#·游戏引擎
千里镜宵烛4 小时前
Lua-迭代器
开发语言·junit·lua
渡我白衣4 小时前
C++ 同名全局变量:当符号在链接器中“相遇”
开发语言·c++·人工智能·深度学习·microsoft·语言模型·人机交互
淮北4944 小时前
html + css +js
开发语言·前端·javascript·css·html
Apache Flink5 小时前
理想汽车基于 Hologres + Flink 构建万亿级车联网信号实时分析平台
阿里云·flink·apache
源码_V_saaskw5 小时前
JAVA国际版二手交易系统手机回收好物回收发布闲置商品系统源码支持APP+H5
java·开发语言·微信·智能手机·微信小程序·小程序
java1234_小锋5 小时前
PyTorch2 Python深度学习 - PyTorch2安装与环境配置
开发语言·python·深度学习·pytorch2
海边夕阳20065 小时前
深入解析volatile关键字:多线程环境下的内存可见性与指令重排序防护
java·开发语言·jvm·架构