Сървър Apache и PHP в macOS от v11.6 Big Sur и по-нови

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

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

Съдържание

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

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

След актуализация на macOS до версия Vеntura 13.0.1, при отваряне в браузър на адрес localhost, се установява, че адресът функционира и показва страница с надпис "It works!". Това е така, защото има системно вграден сървър Apache. Направени промени в конфигурацията на този сървър при надграждане към нова версия на macOS се заличават и заменят от нови настройки по подразбиране.

Във версия на macOS 14.Х Sonoma също е наличен Apache сървър, но той не е предварително настроен правилно и не стартира. Необходимо е редактиране на конфигурационния му файл /private/etc/apache2/httpd.conf за да се отстранят два проблема: 1. Да се зададе настройка ServerName, със стойност, например: localhost. и 2. Да се даде достъп на потребителя, от чието име се изпълнява изпълнява Apache сървъра до директорията за log файлове /private/var/log/apache2. Второто го правя, като задавам настройка User да е моето потребителско име, а Group staff; достъпът го позволявам през Finder, като си добавям право за четене и запис в директорията за log файлове.

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

sudo apachectl start
sudo apachectl stop
sudo apachectl restart

Пътят до инсталираната при обновяване на системата команда е /usr/sbin/apachectl и за управляване на стартирания от системата сървър трябва да се използва именно тази команда.

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

apachectl -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.

Осигуряване на някои разширения

Install PHP's Imagick Extension on macOS - Matthew Setter

 

Copyright CC BY-ND 4.0.
Посещения на страницата: общо 1964 днес 0
Направено с VanyoG CMS.
Force Reload