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