Alexander Sheiko Blog

WWW интерфейс для FTP сайта

Категория: Компьютерное
Отправлено: 02.01.2006 02:02

Пусть у нас есть FTP сайт:

ftp://ftp.server.com с корневым каталогом в /var/ftp

И стоит задача создать WWW интерфейс к этому сайту:

http://ftp.server.com с корневым каталогом в /var/www/ftp.server.com

Другими словами - корень WWW сайта не должен смотреть в корень FTP сайта. Это значит, что файлы, расположенные на FTP сайте, мы должны отдавать через симлинки, лежащие на WWW сайте.

Для чего такое может понадобиться. Допустим - мы хотим организовать Mp3 архив, при этом часть файлов будет доступна только через WWW. Кроме того так можно гибко разграничивать доступ к WWW и FTP сайтам.

Возникает необходимость автоматизировать создание таких симлинков после обновления FTP сайта. При этом, кроме создания самих симлинков, так же нужно создавать для них каталоги и производить очистку WWW сайта, как от пустых каталогов, так и от симлинков, ведущих в никуда.

https://adsh.org.ua/blog/upload/opensource_code.jpg

В результате был написан небольшой скрипт, запускаемый после обновления FTP сайта и выполняющий все необходимые операции:
#!/bin/sh

# Находим симлинки, ведущие в никуда, и удаляем их:
find -L /var/www/ftp.server.com/ -type l -exec rm -f {} \;

# Находим получившиеся пустые каталоги и удаляем их:
find /var/www/ftp.server.com/ -type d -empty -delete

# Рекурсивно находим все файлы, лежащие в корневом
# каталоге FTP сервера:
for i in `find /var/ftp/ -type f`; do

# Для каждого из этих файлов получаем путь для симлинка,
# указывающего на этот файл, при этом происходит замена
# пути "ftp" на "www/ftp.server.com":
link=`echo $i | sed -e 's/ftp/www\/ftp\.serever\.com/g'`

# Если каталог, в котором нужно создать симлинк,
# ещё не существует,
if [ ! -d `dirname $link` ]; then

# то - создаём его:
mkdir -p `dirname $link`
fi

# Если нужный симлинк ещё не существует,
if [ ! -L $link ]; then

# то - создаём его:
ln -s $i $link
fi

done

Хочется лишь добавить, что для того, чтобы Apache следовал по прописанным симлинкам, в свойствах VirtualHost должна быть прописана директива:

Options FollowSymlinks
Постоянная ссылка Комментарии (0)
Powered by sBLOG XHTML 1.0 Strict PHP CSS
Локальное время: 28.03.2024 17:51 GMT+2
© 2005-2024 Alexander Sheiko