В этом посте мы рассмотрим, как настроить Apache и PHP, используя версии, установленные с помощью менеджера пакетов Homebrew для macOS.
macOS поставляется со встроенными версиями Apache и PHP, и мы могли бы легко их использовать. Однако у этого подхода есть несколько недостатков. У нас нет контроля над точными используемыми версиями, и доступная версия может быть неактуальной. У меня были проблемы, когда обновления ОС перезаписывали мою конфигурацию для встроенного сервера Apache. Наконец, запуск php -v для проверки версии встроенного PHP выдает предупреждающее сообщение о том, что PHP будет удален из будущих версий macOS — на самом деле, в грядущей macOS Monterey PHP, похоже, больше нет... Вместо использования встроенных версий мы установим Apache и PHP с помощью Homebrew. Мы рассмотрим, как настроить локальную среду разработки, используя их, и, как обычно, попытаемся охватить «почему» и «что»; помимо простого представления конфигурации, мы рассмотрим назначение каждой директивы и команды.
Вот шаги, которые мы предпримем:
1. Установка
Несколько слов о путях: на Mac с Apple Silicon Homebrew будет использовать /opt/homebrew префикс. Префикс является своего рода базовым каталогом; каталог, в который Homebrew будет помещать различные файлы, принадлежащие пакетам, которые он устанавливает. Двоичные файлы будут находиться в /opt/homebrew/bin, файлы конфигурации в /opt/homebrew/etc/, и так далее. На Mac с процессором Intel скорее всего будет этот базовый каталог /usr/local. В этой статье я буду ссылаться на пути, используя префикс Homebrew /opt/homebrew. Если ваш префикс отличается, пожалуйста, измените пути соответствующим образом. Чтобы узнать, какой базовый каталог использует Homebrew на вашем компьютере, запустите brew --prefix.
2. URL-адреса разработки
.test является зарезервированным доменом верхнего уровня, и поэтому, используя его, вы не должны сталкиваться с такими проблемами, как люди, использующие .dev для сред разработки, когда Google приобрел .dev TLD .
Этот /etc/hosts файл предоставляет удобный способ связать имена хостов с IP-адресами. Обычно, когда мы посещаем URL-адрес, например https://www.git-tower.com/, фактический IP-адрес сервера должен быть определен с помощью чего-то, что называется системой доменных имен или сокращенно DNS. Файл /etc/hosts дает нам простой способ переопределить это. Для целей этой статьи предположим, что мы работаем с проектом под названием my-project, который мы хотим обслуживать по URL-адресу my-project.test. Мы добавим эту строку внизу /etc/hosts:
После сохранения файла посещение my-project.test в браузере приведет к отправке запроса на IP-адрес нашей собственной машины.
3. Конфигурация Apache
LoadModule ssl_module lib/httpd/modules/mod_ssl.so
LoadModule vhost_alias_module lib/httpd/modules/mod_vhost_alias.so
LoadModule userdir_module lib/httpd/modules/mod_userdir.so
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
4. Конфигурация PHP
Include /opt/homebrew/etc/httpd/extra/httpd-php.conf
DirectoryIndex index.html index.php
Начнем с проверки доступности модуля PHP, который может показаться излишним, поскольку мы только что добавили его в httpd.conf файл. Однако эти файлы могут редактироваться независимо друг от друга, поэтому давайте последуем соглашению относительно других файлов в каталоге extra и проверим, доступны ли используемые нами модули. Мы будем искать файлы, оканчивающиеся на .php, и установим их обработчик application/x-httpd-php — обработчик, предоставленный модулем PHP. Обработчик в Apache представляет собой действие, которое необходимо выполнить для файла. В то время как большинство файлов просто обслуживаются с помощью встроенного обработчика, файлы PHP должны быть интерпретированы PHP перед обслуживанием.
Некоторые руководства используют здесь директивы AddType или AddHandler , которые принимают параметры для расширений файлов, к которым они применяются. Это может привести к проблемам с безопасностью , поскольку они проверяют свои настроенные расширения на соответствие каждому расширению файла. Например, веб-приложение может разрешить пользователям загружать .jpeg файлы. Однако, если пользователь загружает файл с именем, оканчивающимся на .php.jpeg, этот файл может быть выполнен как PHP, если используются вышеуказанные директивы. Поэтому мы используем FilesMatch директиву вместе с SetHandler. Не то, чтобы мы столкнулись с этими проблемами, когда мы запускаем Apache локально для себя, но мы могли бы также настроить все правильно.
Директива DirectoryIndex гарантирует, что если запрашивается URL-адрес для каталога, а каталог содержит файл index.php(или index.html файл), этот файл будет обслуживаться.
5. Настройка виртуального хоста
ServerName tempd.test
DocumentRoot /Users/xdomus/Sites/tempd.test
<Directory /Users/xdomus/Sites/tempd.test>
Require all granted
AllowOverride All
</Directory>
</VirtualHost>
Это настраивает виртуальный хост на порту 80. ServerName устанавливает имя хоста для виртуального сайта. Когда мы заходим my-project.test в браузер, сделанное нами изменение /etc/hosts гарантирует, что запрос будет отправлен на локальный сервер Apache. Apache найдет виртуальный хост с соответствующим именем хоста и обслужит этот сайт. Директива DocumentRoot указывает место в файловой системе, где находятся обслуживаемые файлы. Обязательно измените этот путь вместе с другим его экземпляром в директиве Directory на фактический путь вашего веб-сайта на вашем компьютере!
Директива Directory имеет отношение к разрешениям. В httpd.conf файле есть раздел, который по умолчанию запрещает доступ к любому ресурсу. Доступ ко всему, что должно быть общедоступным, должен быть специально разрешен. Итак, для файлов в корне нашего сайта мы даем всем доступ ко всем ресурсам через директиву Require. Директива AllowOverride определяет, какие директивы могут быть переопределены в .htaccess файле. Файл .htaccess можно использовать для конфигурации каждого каталога — многие CMS используют этот файл вместе с mod_rewrite упомянутым ранее модулем, например, для настройки своих URL-адресов. Здесь мы разрешаем переопределять все директивы.
Пока мы это делаем, мы можем удалить или закомментировать существующие фиктивные виртуальные хосты, существующие в этом файле, иначе Apache будет выдавать некоторые предупреждения при запуске, поскольку корневые документы для этих сайтов, вероятно, не существуют.
::1 wp.test
6. Настройка SSL
<VirtualHost _default_:443>
ServerName www.example.com:443
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
ServerName yourprojectdomain.com
DocumentRoot "/Users/your_username/Sites/yourprojectname"
ErrorLog "/usr/local/var/log/httpd/yourprojectname-error_log"
CustomLog "/usr/local/var/log/httpd/yourprojectname-access_log" common
</VirtualHost><VirtualHost *:443>
DocumentRoot "/Users/your_username/Sites/yourprojectname"
ServerName yourprojectdomain.com
SSLEngine on
SSLCertificateFile "/usr/local/etc/httpd/server.crt"
SSLCertificateKeyFile "/usr/local/etc/httpd/server.key"
</VirtualHost>
7. Полезняшки
Как прописать переменные среды в MacOs
Затем необходимо выполнить команду: