Дружим WordPress и mathopd

Вторая статья из серии "WordPress: Заменяем Apache лёгким web-сервером".

Первая статья была посвящена nginx, в данной статье разберём особенности конфигурирования mathopd и WordPress для совместной работы.

В Ubuntu/Debian нам понадобится пакет libfcgi0ldbl, содержащий программу cgi-fcgi, которую mathopd использует в качестве обёртки для FastCGI:

[-]
View Code Bash
aptitude install libfcgi0ldbl

Или можно попробовать собрать обёртку с исходников.

Как и в прошлом случае, мы предполагаем, что PHP в режиме FastCGI прослушивает 9000 порт на 127.0.0.1

[-]
View Code (Unknown Language)
Server {
    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). В ней есть интересные строки:

[-]
View Code PHP
  1.         if ( !$requested_url ) {
  2.                 // build the URL in the address bar
  3.                 $requested_url  = ( !empty($_SERVER['HTTPS'] ) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://';
  4.                 $requested_url .= $_SERVER['HTTP_HOST'];
  5.                 $requested_url .= $_SERVER['REQUEST_URI'];
  6.         }

В случае 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.

Добавить в закладки

Связанные записи

25
Ноя
2008

Комментарии к статье «WordPress: заменяем Apache mathopd’ом» (3)  »

  1. Vladimir says:

    Чисто субъективно: mathopd работает быстре, чем nginx, так что стоит присмотреться к нему повнимательнее…

  2. Кирилл says:

    В файрфоксе у меня при заходе на главную пишет ошибка forbidden и тд

Подписаться на RSS-ленту комментариев к статье «WordPress: заменяем Apache mathopd’ом» Trackback URL: http://blog.sjinks.org.ua/wordpress/400-wordpress-replacing-apache-with-mathopd/trackback/

Оставить комментарий к записи «WordPress: заменяем Apache mathopd’ом»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя