从零开始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即可。

相关推荐
buhuizhiyuci15 分钟前
【python篇——一周速通python语法】python的条件语句和循环语句
开发语言·python
geovindu18 分钟前
go: Recursion Algorithm
开发语言·后端·算法·golang·递归算法
geovindu24 分钟前
CSharp: Composite Pattern
开发语言·后端·c#·组合模式·结构型模式
消失的旧时光-194329 分钟前
KMP Web 开发实战(二):js、wasmJs、browser、executable 到底是什么意思?
开发语言·前端·javascript·跨平台·kmp
sycmancia39 分钟前
Qt——线程的生命期问题
开发语言·qt
影寂ldy40 分钟前
C# 多线程进阶知识点(线程优先级、多委托传参、线程锁、死锁)
开发语言·数据库·c#
国服第二切图仔43 分钟前
09-搜索工具Grep与Glob
开发语言·javascript·ecmascript
凤山老林1 小时前
从“无法创建本地线程“异常说起:深度解析线程栈与JVM线程优化指南
java·开发语言·jvm
库克克1 小时前
【C++】多态
开发语言·c++
观远数据1 小时前
经营闭环的最后一公里:从看见问题到解决问题之间还差什么
java·开发语言·数据库