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

相关推荐
武昌库里写JAVA13 分钟前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
ZSYP-S1 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos1 小时前
c++------------------函数
开发语言·c++
程序员_三木1 小时前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊1 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
tianmu_sama1 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
黄公子学安全1 小时前
Java的基础概念(一)
java·开发语言·python
liwulin05061 小时前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc1 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法
Oneforlove_twoforjob2 小时前
【Java基础面试题027】Java的StringBuilder是怎么实现的?
java·开发语言