Дружим WordPress и mathopd
Вторая статья из серии "WordPress: Заменяем Apache лёгким web-сервером".
Первая статья была посвящена nginx, в данной статье разберём особенности конфигурирования mathopd и WordPress для совместной работы.
В Ubuntu/Debian нам понадобится пакет libfcgi0ldbl
, содержащий программу cgi-fcgi
, которую mathopd использует в качестве обёртки для FastCGI:
Или можно попробовать собрать обёртку с исходников.
Как и в прошлом случае, мы предполагаем, что PHP в режиме FastCGI прослушивает 9000 порт на 127.0.0.1
Port 80
Address 0.0.0.0
Virtual {
Host example.com
Control {
Alias /
Location /var/www/example.com
ScriptUser nobody
External {
"/usr/bin/cgi-fcgi -bind -connect 127.0.0.1:9000" { .php }
}
}
}
}
Особенностью работы под mathopd является то, что он не предоставляет функциональности для переписывания адресов (как mod_rewrite в Apache), поэтому пермалинки будут всего лишь "Almost Pretty".
При тестировании данной конфигурации обнаружилась одна интересная особенность, которую, вероятно, стоит считать ошибкой mathopd: если демон web-сервера слушает нестандартный (не 80) порт, то WordPress уходит в вечный цикл редиректов.
Причина здесь в следующем: mathopd, в отличие от других серверов, не добавляет порт в переменную $_SERVER["HTTP_HOST"]
. Таким образом, для example.com:8080
$_SERVER["HTTP_HOST"]
в mathopd будет example.com
(nginx, например, укажет значение example.com:8080
).
В WordPress есть интересная процедура — redirect_canonical
, которая пытается привести URL к каноническому виду (типа, SEO friendly). В ней есть интересные строки:
- if ( !$requested_url ) {
- // build the URL in the address bar
- $requested_url = ( !empty($_SERVER['HTTPS'] ) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://';
- $requested_url .= $_SERVER['HTTP_HOST'];
- $requested_url .= $_SERVER['REQUEST_URI'];
- }
В случае mathopd и http://example.com:8080/
, $requested_url
будет установлен в http://example.com/
. Так как форма этого URL не будет совпадать (из-за того, что порт потерялся) с формой, хранимой в базе данных, WordPress сделает перенаправление на http://example.com/
, и так будет продолжаться до бесконечности.
Для решения проблемы придётся закомментировать строку add_action('template_redirect', 'redirect_canonical');
в файле /wp-includes/canonical.php
.
Чисто субъективно: mathopd работает быстре, чем nginx, так что стоит присмотреться к нему повнимательнее…
В файрфоксе у меня при заходе на главную пишет ошибка forbidden и тд
С IP 79.139.147.167 ошибок в логе Апача нет