Архив метки: nginx

MediaWiki: решение проблем с производительностью

Каждый, кто устанавливал MediaWiki, замечал, как медленно она работает. Буквально при любом действии вы сталкиваетесь с невыносимыми тормозами (конечно, если сервер не космически быстрый).

В поисках решения этой проблемы вы придете, например, сюда - How to make MediaWiki fast. Ну, или вот общая категория: Performance tuning. Там собраны вполне разумные советы. Однако важно понять вот что: большинство из них дает лишь микроскопический прирост скорости и не решает проблему тормозов кардинально.

В этот момент нужно сесть, успокоиться, глубоко вздохнуть и принять следующую мысль: без кэширующего реверсивного прокси, который кэшировал бы страницы для незалогиненных пользователей (таких всегда подавляющее большинство) ничего не получится.

Mediawiki.org предлагает использовать Squid, но мне с ним никак не хотелось связываться — во-первых, опыт эксплуатации оставил не очень приятные воспоминания, а во-вторых, на промышленном сервере уже стоял Nginx, который отдавал статику по классической схеме в связке с httpd.

Скажем так: здесь могут быть трудности, но настроить можно. Мне это удалось (не исключаю, правда, что придется еще понаблюдать и что-то допилить). Nginx — очень мощный прокси, и когда вы видите, насколько мгновенно он отдает контент, это, конечно, производит впечатление. Главное — подумать, как различать залогиненных и незалогиненных пользователей. Можно найти пример конфига, где проверяется, содержится ли в куке «UserID» — для этого задействуется модуль ngx_lua, я же решил обойтись без него. И второй важный момент — как принудительно удалять страницу из кэша после ее редактирования. Здесь несколько сложнее: для выполнения запроса PURGE, который выдает MediaWiki, потребуется сторонний модуль ngx_cache_purge.

Основы: NGINX Content Caching.