|
@@ -59,6 +59,8 @@ LoadModule php5_module modules/mod_php.so
|
|
|
|
|
|
### Virtual mass hosting
|
|
|
|
|
|
+Работает как модуль mod_vhost_alias. Перед настройкой убедитесь что этот модуль подключен.
|
|
|
+
|
|
|
Обычно в дистрибутивах linux с apache домены настраиваются путем копипасты конфига домена в папке на подобие /etc/apache2/sites.d/. Возможна так же папка /etc/apache2/sites.enabled.d/ в которой хранятся симлинки на включенные сайты. Сайты из sites.d без симлинка в этой папке
|
|
|
выключены. Enabled сайты подключаются в основной конфиг apache через директиву Include (в конце файла).
|
|
|
|
|
@@ -95,5 +97,132 @@ VirtualScriptAlias "/www/hosts/%0/cgi-bin"
|
|
|
|
|
|
### `.htaccess`
|
|
|
|
|
|
+Эти файлы являются способом установки локальных настроек для директории и её поддиректорий. Синтаксис в них такой же как и в других конфигах **apache**. Для изменения настроек **PHP** вы можете использовать директиву `php_value` согласно синтаксису `php.ini`.
|
|
|
+
|
|
|
+#### `mod_rewrite`
|
|
|
+
|
|
|
+Еще один модуль **apache** для отвязывания адреса URL от реальной файловой системы. Часто вызывает боль при попытках отладить сложные конфигурации. Для отладки можно включить логгирование, но **только** при конфигурировании `mod_rewrite` в конфиге **apache**, а не в
|
|
|
+`.htaccess`.
|
|
|
+
|
|
|
+Данную опцию надо занести в конфиг виртуального хоста, поэтому он несовместим с Mass Virtual Hosting:
|
|
|
+```
|
|
|
+LogLevel alert rewrite:trace3
|
|
|
+```
|
|
|
+
|
|
|
+Умолчательный .htaccess для перенаправления всех запросов к index.php для дальнейшего роутинга средствами MVC-фреймворка:
|
|
|
+
|
|
|
+```
|
|
|
+RewriteEngine on
|
|
|
+# If a directory or a file exists, use the request directly
|
|
|
+RewriteCond %{REQUEST_FILENAME} !-f
|
|
|
+RewriteCond %{REQUEST_FILENAME} !-d
|
|
|
+# Otherwise forward the request to index.php
|
|
|
+RewriteRule . index.php [L]
|
|
|
+```
|
|
|
+
|
|
|
+**Учтите**, что для работы .htaccess вы должны разрешить изменения конфигурации для конкретной директории. Делается это с помощью
|
|
|
+следующих настроек веб-сервера в секции Directory:
|
|
|
+
|
|
|
+```
|
|
|
+AllowOverride all
|
|
|
+Require all granted
|
|
|
+```
|
|
|
+
|
|
|
+Однако в целом **Apache** изначально задуман для отображения папок реальных файлов, и данные костыли выглядят чужеродно. Более органичен для таких целей **NGINX** и **PHP-FPM**.
|
|
|
+
|
|
|
## NGINX
|
|
|
|
|
|
+Легковесный быстродействующий веб-сервер, популярный для высоконагруженных решений. Конфигурация скорее настраивает доменные имена и их обработчики, чем файлы и директории. В этом контексте **NGINX** является **reverse-proxy**, т. е. фасадом перед реальным веб-сервером,
|
|
|
+обрабатывающим запросы. Тем не менее NGINX без проблем раздает файлы и может сильно оптимизировать раздачу статики и загрузку файлов. На данный момент в NGINX даже есть внутренний скриптовый язык, базированный на **JS**.
|
|
|
+
|
|
|
+### `php-fpm`
|
|
|
+
|
|
|
+Типичная конфигурация **nginx+php** реализуется через **php-fpm**. В отличие от **Apache**, в котором **mod_php** является частью процесса веб-сервера, при работе с **php-fpm** нужно два процесса (демона), которые обрабатывают запросы. Первый - **веб-сервер**, который
|
|
|
+обрабатывает входящие запросы, привязывает веб-приложение к домену, зачастую отдает статические файлы и так далее. Второй процесс - сервер приложения, к которому **веб-сервер** обращается для обработки запросов.
|
|
|
+
|
|
|
+#### Конфигурация `php-fpm`
|
|
|
+
|
|
|
+Файл php-fpm.conf хранит основные настройки:
|
|
|
+
|
|
|
+```
|
|
|
+user = nobody
|
|
|
+group = nobody
|
|
|
+listen = 127.0.0.1:9000
|
|
|
+
|
|
|
+pm = dynamic
|
|
|
+pm.max_children = 5
|
|
|
+pm.start_servers = 2
|
|
|
+pm.min_spare_servers = 1
|
|
|
+pm.max_spare_servers = 3
|
|
|
+```
|
|
|
+
|
|
|
+- `user,group` - пользователь и группа, из под которых будет запускаться сервер приложений
|
|
|
+- `listen` - адрес и порт. Обычно используется 127.0.0.1 для безопасности. Запомните эти параметры.
|
|
|
+- pm... - настройки процессов, количество обработчиков запросов и т. д.
|
|
|
+
|
|
|
+#### NGINX
|
|
|
+
|
|
|
+```
|
|
|
+server {
|
|
|
+ listen 164.138.30.21; //внешний IP
|
|
|
+ server_name yieldmap.helium.asmer.org.ua; //домен
|
|
|
+
|
|
|
+ root /var/www/gorobets/yieldmap.helium.asmer.org.ua; //DocumentRoot
|
|
|
+
|
|
|
+ location / { //корень сайта
|
|
|
+ try_files $uri $uri/ /index.php;
|
|
|
+ autoindex on;
|
|
|
+ }
|
|
|
+ location ~ \.php$ { //все PHP на fpm
|
|
|
+ include /etc/nginx/fastcgi.conf;
|
|
|
+ fastcgi_pass unix:/run/php-fpm.socket;
|
|
|
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
|
+ fastcgi_index index.php;
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+параметром `fastcgi_pass` указывается сокет в файловой системе (или сетевой, 127.0.0.1:9000, например)
|
|
|
+
|
|
|
+## `php.ini`
|
|
|
+
|
|
|
+Это файл конфигурации собственно php. Большинство настроек можно узнать используя `phpinfo()` в коде.
|
|
|
+
|
|
|
+> Учтите, что для каждого варианта запуска php скорее всего будет *свой* php.ini. Т. е. настройки, которые работают в консоли, вовсе не обязательно что совпадают с mod_php или php-fpm.
|
|
|
+
|
|
|
+Важные конфигурационные параметры:
|
|
|
+
|
|
|
+```
|
|
|
+short_open_tag = Off
|
|
|
+```
|
|
|
+
|
|
|
+Опция включает или выключает короткие php-тэги `<?` и `?>`
|
|
|
+
|
|
|
+```
|
|
|
+max_execution_time = 30
|
|
|
+```
|
|
|
+
|
|
|
+время работы скрипта. Имеет смысл для разгрузки веб-серерва и никакого смысла для работы скриптов в консоли.
|
|
|
+
|
|
|
+```
|
|
|
+memory_limit = 128M
|
|
|
+```
|
|
|
+
|
|
|
+Лимит памяти. Может грохнуть скрипт, который ворочает большим объемом данных, например генерирует прайс в xls, или ORM по большому набору данных в БД.
|
|
|
+
|
|
|
+```
|
|
|
+error_reporting = E_ALL
|
|
|
+```
|
|
|
+
|
|
|
+Какие ошибки логгировать.
|
|
|
+
|
|
|
+```
|
|
|
+display_errors = On
|
|
|
+```
|
|
|
+Показывать ошибки в выводе или нет. Удобно видеть ошибки в перемешку с HTML при отладке, но недопустимо в продакшене.
|
|
|
+
|
|
|
+```
|
|
|
+log_errors = On
|
|
|
+```
|
|
|
+
|
|
|
+Опция полезна для записи ошибок в лог-файл на продакшене
|