Ivan Asmer 8 anos atrás
pai
commit
b26cc1f000
2 arquivos alterados com 139 adições e 0 exclusões
  1. 10 0
      Hosting.md
  2. 129 0
      apache.md

+ 10 - 0
Hosting.md

@@ -21,6 +21,16 @@ username@helium ~/public_html/project $ echo "<?php phpinfo(); " > php_tst.php #
 Для закачки файлов вы можете пользоваться **sshfs**, **ftp** с тем же логином и паролем что и на **ssh** или **git** из вашего репозитария из **shell**
 (ssh)
 
+## yii
+
+Корень сайта в Yii2 обычно в basic/web или другой поддиректории. Для того, что бы обойти это ограничение, сделайте **симлинк**, т. е. ссылку на папку basic/web:
+```bash
+cd public_html
+ln -sf yii2/basic/web y
+```
+
+Таким образом один и тот же Yii проект будет доступен по yii2.username.phpN.a-level.com.ua/basic/web и по адресу y.username.phpN.a-level.com.ua
+
 ## Примеры:
 
 http://phptest.asmer.php1.a-level.com.ua/phphell.php. Этот файл (`phphell.php`) лежит у пользователя `asmer` в папке `~/public_html/phptest`.

+ 129 - 0
apache.md

@@ -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
+```
+
+Опция полезна для записи ошибок в лог-файл на продакшене