Re: Помогите решить проблему
Igor Sysoev
igor на sysoev.ru
Чт Апр 1 14:06:40 MSD 2010
On Wed, Mar 31, 2010 at 12:34:50PM -0400, straj wrote:
> Здравствуйте эксперты и автор(ы) nginx'a.
>
> Сейчас хостюсь у никхоста, поставил nginx как frontend перед апачем.
> Статику отдаю соответсвенно nginx'ом. Но хочется еще больше снизить нагрузку!
>
> Решил сделать кеш из старниц, которые редко меняются, например так выглядит обращение к форуму
>
>
> location ~* ^/forum/.+\.html$ {
> if (-f /home/site/site.ru/docs/cache/nginx$document_uri) {
> root /home/site/site.ru/docs/cache/nginx;
> break;
> }
>
> rewrite ^/forum/([0-9]+)\.html$ /forum/index.php?id=$1&nginx=1 last;
> }
>
>
>
> данная связка уже работает... в принципе жалоб нет...
>
> Но хочется еще большего, решил закешировать главную, делаю так:
>
>
> location = / {
> if (-f /home/site/site.ru/docs/cache/nginx/index.html) {
> root /home/site/site.ru/docs/cache/nginx/index.html; #<<<<<
> break;
> }
>
> rewrite ^/$ /index.php?id=1&nginx=1 last;
> }
>
>
> Ну и соответственно не получается :)
>
> выдает ошибку 404...смотрю в логи там говорится что не может найти файл /home/site/site.ru/docs/cache/nginx/index.html/index.html
>
> я так понял надо значит убрать из рута /index.html убираю.... после чего открывает только по редиректу даже если файл создан....
>
> ммм... думаю...возможно если он ругается на рут может и из проверки убрать /index.html .... убираю , при этом ничего не меняется также проход только через редирект....
>
> Смотрел в документации nginx'a там есть еще директива index ... ставлю ее после рута...ошибка типа такая директива не поддерживается... значит мой nginx не содержит его (нет модуля соответсвуещего)
>
> Вопрос(ы):
> 1. Возможно ли без директивы index в данном случае?
> 2. Если нет, возможно ли без перекомпиляции самого nginx'a добавить index?
>
> Да кстати пока писал подумал о принудительном редиректе на index.html, типа такого:
>
>
> # Home 1
> location = / {
> if (-f /home/site/site.ru/docs/cache/nginx$document_uri) {
> rewrite ^(.+)$ /index.html last;
> break;
> }
> rewrite ^(.+)$ /index.php?id=1 last;
> }
>
> # Home 2
> location = /index.html {
> root /home/site/site.ru/docs/cache/nginx;
> }
>
>
> Но ожидаемого эффекта НЕТ... все идет через редирект апачу...
>
> Пожалуйста помогите разобраться!
Не нужно использовать if... нужно использовать try_files...
http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#try_files
--
Игорь Сысоев
http://sysoev.ru
Подробная информация о списке рассылки nginx-ru