Для разработчиков

На нашем хостинге используется nginx для снижения нагрузок на сервера и увеличения скорости работы сайтов. Существуют различные схемы проксирования nginx->apache, их можно переключать для каждого домена в контрольной панели.

Сейчас используются четыре схемы проксирования:

  1. на Apache 1.3 с php 5.2 (mod_php) проксируется все, кроме явно статических файлов (*.css, *.jpg и подобное). Этот режим рекомендуется использовать для всех старых сайтов и CMS, которые не поддерживают php 5.4.
  2. nginx сам отдает все файлы как статические. На Apache ничего не проксируется, скрипты не работают.
  3. всё проксируется на Apache с php 5.2, установленным как модуль. Этот режим нужен, если вы используете mod_rewrite для адресов, заканчивающихся на .css, .jpg и т.д. для динамической генерации статических файлов.
  4. всё проксируется на Apache 2.4 с php 5.4, запускаемым как php-fpm через FastCGI. Этот режим рекомендуется использовать для современных сайтов, поддерживающих php 5.4.

У Apache-ей установлен mod_aclr и если попавший к Apache-у запрос на самом деле статический файл - nginx-у отдастся internal redirect на него.

По умолчанию для всех аккаунтов (кроме Битрикс тарифов) используется первый вариант проксирования и мы не рекомендуем его менять, если всё работает. Однако, если у вас сложные правила mod_rewrite или требуется, чтобы скрипты получали запросы, заканчивающиеся на .css и другие расширения, которые считаются статическими файлами, и это не работает в этом режиме, то переключение на третий вариант проксирования решит проблему.

В том случае, если у вас в домене лежат только статические файлы - можно переключить на режим "только статика" для наиболее оптимальной отдачи файлов при наименьшей нагрузке на сервер.

Как сделать переадресацию на https

Если вы установили сертификат и хотите, чтобы все посетители переадресовывались на https - необходимо добавить в .htaccess следующие строчки:

RewriteCond %{HTTP:HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Обратите внимание - их необходимо добавить перед остальными RewriteCond/RewriteRule правилами от вашей CMS.

Как отдать internal redirect

Бывают скрипты, ограничивающие доступ к статическим файлам. Мы видели много реализаций подобных скриптов на perl/php, которые после проверки прав доступа читали большие (мегабайты и гигайбаты) файлы побайтово или небольшими блоками и отдавали их nginx. Подобная логика работы крайне неоптимальна и создаёт очень большую нагрузку на сервер. Чтобы не создавать такой нагрузки, можно после проверки прав доступа в скрипте указать nginx, что он должен сам отдать этот файл.

Пример кода на php, для файла big-file.avi, который лежит в каталоге ./test/ относительно DOCUMENT_ROOT:

header("Content-Type:");
header("X-Accel-Redirect: /internal_xxx/test/big-file.avi");

Путь до файла должен быть абсолютным от DOCUMENT_ROOT, должен начинаться с /internal_xxx/, без точки в начале. При обработке такого запроса префикс "/internal_xxx" отбрасывается.

header("Content-Type:") нужно для автоматического определения майм-типа nginx-ом. Так же его можно указывать вручную.

Дополнительно

Про FastCGI

Про поддержку PHP 5.4

Cron

Почтовая контрольная панель

Email: info@dobrohost.ru
Телефон в Перми:
(кроме технических вопросов)
+7 (904) 842-31-30
Другие контакты