Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Rewrite rules/MultiViews в nginx
цитата
30/11/09 в 13:48
 megreep
Собственно обращаюсь за помощью потому как гугль конкретных ответов не дал.

Есть антилич, не самописный. Принцип действия: файлы для скачивания лежат в private/, в корне антлича есть download.php, идет обращение на http://www.host.com/files/download/projects/archive.rar (под апачем работал multiviews), затем пользователю отдается ссылка http://www.host.com/files/public/72jfbkjdshbn78nbakdnkjsa/projects/archive.rar, то есть в public/ формируется внутренний симлинк на файл.

Options -Indexes +MultiViews был прописан в files/.htaccess

Как это дело заставить работать под nginx?
цитата
30/11/09 в 17:42
 Alex AWM
проверяешь скриптом права, и отправляешь ответ с "специальным" заголовком
X-Accel-Redirect: /private/archive.rar
и пустой строкой в самом ответе.

Ну или 403 если Forbidden

PS На location /private говоришь internal.
цитата
01/12/09 в 13:45
 megreep
сиба. сделал. возник второй вопрос: когда пользователь пытается начать качать по ссылке http://www.host.com/files/public/72jfbkjdshbn78nbakdnkjsa/projects/archive.rar - то вываливается 404 ошибка, и причем эту ошибку кажет nginx. В конфиге я прописал:
Код:
location ~* ^.+\.(rar|zip)$ {
root /home/user/host.ru/html/fafiles/public/;
}

чтобы nginx отдавал сам файлы а не перекладывал это на плечи апача. Только почему-то такая конструкция не работает. Возможно ли это из-за того чтобы в /public/ лежит не сам файл а симлинк на него?

в созданной директории public/87928342376jsdnfb7823/ антилич создает еще такой .htaccess:
Код:
RewriteEngine   On
Options +FollowSymLinks
RewriteBase     /fafiles/0a9ed8fdac28244f1cfd51d2160d6a9b/
RewriteCond     %{HTTP_REFERER}    !^http://www\.host\.ru/fafiles/download/ [NC,OR]
RewriteCond     %{REMOTE_ADDR}     !^xx\.xx\.xx\.xx$
RewriteRule     .*                 - [F]
цитата
01/12/09 в 19:43
 Alex AWM
Что-то сложное у тебя там и под апач заточеное.

Делай просто.
У тебя есть

Код:

location /private {
   root /path/to/files;  /* и помни что у тебя все файлы будут искаться как /path/to/files/private/... */
    internal;
}
location /public {
   proxy_pass http://127.0.0.1;
   /*  отправляешь в антилич скрипт в апач, или
       что там у тебя */
}


в скрипте проверяешь referer и сессию
(впрочем реферер можешь и в location public проверить)
Простых антиличей в рассылке nginx тоже было.


Эта страница в полной версии