在 Ubuntu 安裝 PHP 8 與 Apache
大约 3 分鐘
在 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 問題。
所以要先了解權限設定
打開檔案 /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