Сървър Apache и PHP в macOS v11.6 Big Sur и v12.0.1 Monterey

Страницата е създадена на:26 септември 2021 и редактирана на:20 април 2022

Apache(колекция връзки)

Съдържание

Интернет сървър Apache Някои настройки Потребител на сървъра Директория DocumentRoot Виртуален хостинг Възможен проблем Настройване на https Скриптов език за програмиране PHP Инсталиране на PHP с Homebrew Проблем с електронния подпис на libphp.so Превключване на версиите на PHP

Интернет сървър Apache

В macOS Big Sur и Monterey има системно вграден сървър Apache. Направени промени в конфигурацията на сървъра при надграждане към нова версия на macOS се заличават, така че преди надграждане е добре да се предприемат мерки за запазване на променените конфигурационни файлове.

Стартиране, спиране или рестартиране на Apache се извършва с команди от терминал, съответно:

sudo apachectl start
sudo apachectl stop
sudo apachectl restart

Къде се намират някои конфигурационни файлове се вижда с команда:

httpd -V

След промени в някои от конфигурационните файлове, тяхната коректност се проверява с команди:

apachectl configtest   или   httpd -t

а за да влязат в сила промените сървърът се рестартира.

Къде Apache записва своите log файлове се разбира от настройката ErrorLog, дефинирана във файл httpd.conf.

Някои настройки

Потребител на сървъра

По подразбиране, настройката на потребителя, в ролята на който функционира Apache, e:

User _www
Group _www

В много случаи би било по-подходящо сървърът да работи в ролята на текущия потребител и посочените два реда да се променят на:

User имеНаПотребител
Group staff

Когато Apache вече работи, от името на кой потребител става това, може да се види с команда:

lsof -i tcp:80

Директория DocumentRoot

По подразбиране настройката е:

DocumentRoot "/Library/WebServer/Documents"
Directory "/Library/WebServer/Documents">

но посочената директория се намира в системната част от файловата система на компютъра и не е удобна за отваряне и редактиране. Промяна на директория /Library/WebServer/Documents с достъпна за редактиране от текущия потребител директория (например: /Users/имеНаПотребител/Sites) може да е за предпочитане.

Виртуален хостинг

Използва се за хостване чрез един сървър Apache на няколко сайта с различни домейни. Ползата от това е, че файловете на различните сайтове могат да бъдат разположени на различни места във файловата система и дори на външен диск.

За да се активира тази възможност във файл: httpd.conf се премахва знака # пред реда:

#Include /private/etc/apache2/extra/httpd-vhosts.conf

което означава, че при стартиране, сървърът ще чете настройки и от посочения файл httpd-vhosts.conf.

Такъв файл съществува и в него има настройки за един примерен сайт. Тези настройки непременно трябва да се редактират, за да съответстват на ситуацията на конкретния компютър и сайтове.

Освен това, за да може да се отворят хостваните на локалната машина сайтове трябва да се посочи техния IP адрес 127.0.0.1 във файл /etc/hosts. За домейни на такива сайтове може да се задават кратки низове, като na, oa, dp и др., за да може бързо да се изписват в адресната лента на браузъра и да се изпробват. Трябва да се има предвид, че браузърите възприемат такива низове, като думи по които трябва да извършат търсене и ако не се допълнят с наклонена черта (na/, oa/, dp/) вместо хоствания сайт ще се покаже резултат от търсене в Интернет на съответния стринг.

Възможен проблем

При използване на външен диск и PHP е вероятно да възникне грешка:

Warning: Unknown: Failed to open stream: Operation not permitted in Unknown on line 0
Fatal error: Failed opening required '/Volumes/път/index.php' (include_path='.:/usr/local/Cellar/php/8.0.12/share/php/pear') in Unknown on line 0

Решението: Under Catalina MacOS 10.15 PHP under Apache has restricted access to some files via file links possibly by privacy changes - Stack Overflow - в настройките за сигурност на macOS, отварящи се през иконата на Apple - System Preferences... - Security & Privacy - Full Disk Access, да се добави, че пълен достъп до файловата система има и изпълнимият файл на Apache: /usr/sbin/httpd.

Настройване на https

За всеки виртуален хостинк трябва да се генерират необходимите ключове: server.key и server.crt, както е описано в Generate and import a Self-Signed SSL certificate on Mac OS X Sierra – A Quest for Knowledge, които се поставят в директория /private/etc/apache2/.

В How to Configure Apache Virtual Host SSL on Mac OSX са описани необходимите настройки:

Активира се ssl модула чрез откоментиране от файл httpd.conf на ред:

LoadModule ssl_module libexec/apache2/mod_ssl.so

Откоментират се редове:

LoadModule socache_shmcb_module libexec/apache2/mod_socache_shmcb.so

Include /private/etc/apache2/extra/httpd-ssl.conf

За промени във файл httpd-vhosts.config, необходими за осигуряване на https към сайтове с виртуален хостинг, вижте: Configure Apache SSL for https on Mac OS | Codexpedia.

Скриптов език за програмиране PHP

Инсталиране на PHP с Homebrew

Различни версии на PHP могат да се инсталират с Homebrew, съответно с команди:

brew install php   - инсталира текущо най-новата версия, поддържана от homebrew
brew install shivammathur/php/php@5.6
brew install shivammathur/php/php@7.0
brew install shivammathur/php/php@7.1
brew install shivammathur/php/php@7.2
brew install shivammathur/php/php@7.3
brew install shivammathur/php/php@7.4
brew install shivammathur/php/php@8.0

Коя версия е активна на системно ниво се вижда с команда:

php -v

Ползване на една от инсталираните версии на системно ниво, например 5.6, се задава с команда:

brew unlink php && brew link --overwrite --force php@5.6

За да се ползва от Apache конкретна версия на PHP трябва да се активира съответния модул чрез добавяне на ред текст в конфигурационния файл httpd.config, например:

LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so

От версия 12 Monterey на macOS се изисква тази библиотека да е подписана с електронен подпис на регистриран от Apple програмист. Как се удовлетворява това изискване вижте по-долу.

За да се изпълнява от Apache файл index.php в директориите, в които има такъв, това име на файл трябва да се добави в частта:

<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>

Също така, трябва да се укаже, че .php файловете са файлове от MIME тип(колекция връзки) приложения на език PHP, чрез добавяне на редове:

<FilesMatch .php$>
SetHandler application/x-httpd-php
</FilesMatch>

Проблем с електронния подпис на libphp.so

Източник: How to future proof your apache modules in macOS by signing them with your own certificate authority.

Преодоляването на проблема се състои в използване на приложението Keychain Access за създаване на фиктивна сертифицираща организация и подпис на програмист. Веднъж направен, докато е все още валиден, този подпис може да се използва за подписване на програми. Подписването се извършва с команда:

codesign -s "име на електронния подпис" --keychain ~/Library/Keychains/login.keychain-db пътДоФайлаКойтоСеПодписва

В конфигурационния файл httpd.conf на Apache трябва да се добави името на използвания сертификат в ред:

LoadModule php_module /usr/local/opt/php/lib/httpd/modules/libphp.so "име на електронния подпис"

Необходимо е да се изпълнява всеки път подписване на libphp.so, когато Homebrew актуализира PHP, и това трябва да е последвано от рестартиране на Apache.

Превключване на версиите на PHP

При необходимост от различни версии на PHP, които да се превключват, може да се инсталират с Homebrew няколко версии. Модулът libphp.so на всяка от тях трябва да е подписан и готов за ползване. Във файл httpd.conf може за всяка версия да се приготви във вид на коментар ред за активиране на съответния модул, като само избрания за дааден момент модул се остави откоментиран, например:

#LoadModule php7_module /usr/local/Cellar/php@7.4/7.4.26_2/lib/httpd/modules/libphp7.so "имеНаСертификат"
#LoadModule php_module /usr/local/Cellar/php@8.0/8.0.13_3/lib/httpd/modules/libphp.so "имеНаСертификат"
LoadModule php_module /usr/local/Cellar/php/8.1.0.reinstall/lib/httpd/modules/libphp.so "имеНаСертификат"

Превключването се извършва с превръщане в коментар на откоментирания ред и откоментиране на друг ред, а след запазване на промяната, трябва да следва рестартиране на Apache.

 

Copyright CC BY-ND 4.0.
Посещения на страницата: общо 340 днес 3
Направено с MyCMS.