跳至主要內容

在 Ubuntu 安裝 PHP 8 與 Apache

Pamis Wang大约 3 分鐘後端PHPPHP 8UbuntuUbuntu 24.04

在 Ubuntu 安裝 PHP 8 與 Apache

前言

雖然平常都是用 PHP 搭配 Nginx
但有時候還是會用到 Apache
設定上也是很方便

使用官方套件庫安裝

安裝 Apache

sudo apt update
sudo apt install apache2

安裝 PHP

sudo apt update
sudo apt install php
sudo apt install libapache2-mod-php

撰寫 PHP

首先在 /var/www 新增一個 index.php
程式碼參考下方片段

<?php

phpinfo();

設定 Apache

撰寫設定檔案

可以參考 000-default.conf 的設定來修改一個執行 PHP 的範例

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

啟用設定檔案

ln -s /etc/apache2/sites-available/0-default.conf /etc/apache2/sites-enabled/

這邊解釋一下 ln -s 是建立符號連結,類似 Windows 捷徑的概念。
透過在 ites-enabled 建立捷徑來決定哪些網站設定要被啟用。

設定完畢後重啟伺服器

sudo systemctl restart apache2

執行 PHP 查看網頁

如果步驟正確理論上就會出現 PHP 版本資訊的畫面了

設定 Apache 權限

安裝 Apache 後設定檔會出現在 /etc/apache2 這個目錄內。

專案目錄

打開檔案 /etc/apache2/apache2.conf
可以看到以下這段就是說明專案目錄的設定。

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Require all denied
</Directory>

<Directory /usr/share>
    AllowOverride None
    Require all granted
</Directory>

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

一般來說 /usr/share/var/www 目錄就是放網頁的,
但有時候一般使用者無法用 root 權限登入,
所以網頁專案會放在 /home/user 等目錄內,
因此可以在複製上方的設定修改,加入自己的專案目錄,
但加入之後還無法正確開啟網頁,還有權限需要設定。

群組權限

許多人頭痛的權限問題,沒有設定好就會出現各種 403 問題。

滿滿的403
滿滿的403

所以要先了解權限設定
打開檔案 /etc/apache2/apache2.conf
看到這一段可以知道伺服器的用戶與群組

# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

再前往 /etc/apache2/envvars 內查看

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

可以確認到預設使用者為是 www-data
所以為了能夠正確讀取我們的網頁,
故需要將指定使用者加入 www-data 群組。

# username 自己替換成指定使用者
sudo gpasswd -a www-data username

並確保用戶群組可以進入路徑中的所有目錄

sudo chmod g+x /home/pamis && chmod g+x /home/pamis/test

設定完畢後重啟伺服器

sudo systemctl restart apache2

參考資料

How to install and configure PHPopen in new window

上次編輯於:
貢獻者: Pamis Wang