Re: Трудности с организацией поддоменов и точкой входа для php-скрипта
Sergey Shepelev
temotor на gmail.com
Вт Авг 16 23:31:16 UTC 2011
2011/8/17 J3FF3 <nginx-forum at nginx.us>:
>>> Если урлы сделаны нормально и
> проблема только в том, что исходный код
>>> php файлов можно получить запросом
>
> Да не исходный, а файлы запускаются
> отдельно и результат выполнения
> вылазит в браузере. Если выдергнуть
Чтобы они отдельно не запускались - надо не иметь локейшна,
проксирующего их на fastcgi сервер. Например, так:
location / {
root /path/to;
}
location = /index.php {
fastcgi_pass ...;
}
# и всё. никаких ~ \.php$
Дальше возвращаемся к вопросу об урлах.
> #тут происходит редирект, если
> запрашивают вложенные файлы
> location ~ /application/.+ {
Примеры урлов, которые попадут в этот локейшн:
/application/stat
/application/category/main.php
/files/application/movie.ogg
/images/application/1.gif
Вывод: пользоваться регексповыми локейшнами нужно с большой
осторожностью, особенно когда мало опыта. Лучше - не пользоваться.
> #deny all;
> rewrite ^ / permanent;
> }
>
> location ~ \.php$ {
> root /home/www/site.com;
root здесь совершенно лишняя директива. Тем более, что вы уже объявили
root на уровне server.
> fastcgi_pass 127.0.0.1:9000;
> fastcgi_index index.php;
fastcgi_index - тоже.
> fastcgi_param DOCUMENT_ROOT /site.com;
> }
> }
>
> Сейчас при запросе /application/startup.php
> происходит редирект на главную, что и
> нужно было. Правда, не знаю за что тогда
> отвечает:
> try_files $uri $uri/ index.php?$query_string;
> вроде оно должно редиректить на index.php
> если ктото запрашивает файл или
> директорию.
>
try_files не делает редиректов. Но да, запросы будут обрабатываться
index.php. Только чтобы это произошло нужно чтобы запрос попал в
локейшн с try_files. А вы объявили регексповый локейшн (даже два). И
наверное, ещё не знаете, что регексповые проверяются раньше всех.
http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#location
Теперь, когда мы знаем, что кроме /index.php никакие запросы не должны
уходить на fastcgi, все скрипты лежат в application/ и статики для
раздачи там нет, правильный конфиг существенно упрощается:
# главная страница заслуживает отдельного локейшна
location = / {
include fastcgi.conf;
fastcgi_pass ...;
fastcgi_script_filename /path/to/index.php;
}
location /application/ {
return 404; # это хороший вариант
rewrite ^ / permanent; # это то что вы хотели
}
# всё остальное
location / {
root /path/to;
expires 1w;
try_files $uri $uri/ @php;
}
location @php {
include fastcgi.conf;
fastcgi_pass ...;
fastcgi_script_filename /path/to/index.php;
fastcgi_param QUERY_STRING r=$uri&$args;
}
# этот локейшн нужен только если сайт выдаёт ссылки на /index.php
location = /index.php {
include fastcgi.conf;
fastcgi_pass ...;
fastcgi_script_filename /path/to/index.php;
}
Подробная информация о списке рассылки nginx-ru