Я использую Django в качестве веб-фреймворка, а затем Apache и Lighttpd в качестве веб-сервера и статического медиа-сервера соответственно. Lighty хорошо обслуживает весь мой статический контент, но мне нужно настроить его для обслуживания новых файлов, загруженных пользователем. Lighttpd работает на другом компьютере, чем Apache (Django). Мой код django для создания каталога и последующего создания файла изображения выполняется на моей машине Apache, в результате чего он в настоящее время сохраняется на той же машине. Я хочу, чтобы создание этого каталога и файла происходило на моем статическом медиа-сервере, который затем должен обслуживаться самим медиа-сервером. Я использую функции os.mkdir и urllib.urlretrieve соответственно для создания каталога и сохранения файлов на машине Django (Apache). Могу ли я сделать некоторую настройку конфигурации, чтобы эти вещи работали, или мне нужно написать сценарии на медиа-сервере и вызвать их с машины Django?





Вот для чего я использую rsync. Делайте все, что хотите на главном сервере, а затем периодически (или по запросу) отправляйте rsync на статический сервер. Rsync быстрее (и функциональнее), чем все, что вы можете создать с помощью быстрого взлома.
Просто потому, что я параноик, я ежечасно выполняю синхронизацию всех сайтов своих клиентов с двумя резервными серверами, один из которых находится в моем гараже. Я только что синхронизировал "rsync -a" с сайтом клиента размером 1,7 ГБ (на котором не было никаких изменений), и потребовалось 9,92 секунды времени настенного времени, включая 3 сетевых рукопожатия для синхронизации 3 разных каталогов. Если что-то изменилось, presto-bango, все готово, с отметками времени, владельцем / группой и т. д.
Удивительно, насколько сильно вы можете относиться к сбоям сервера, когда получаете настоящее резервное копирование на нескольких машинах без участия человека. Я очень хорошо сплю.
Самый простой ответ заключается в том, что пользователь загружает данные в общий каталог, к которому имеют доступ оба веб-сервера. Тогда он доступен мгновенно. Если вы используете unix (звучит так), то NFS - возможное решение. Если вы думаете, что ваш сайт будет масштабироваться на несколько серверов а-ля flickr, то другим решением будет использование rsync для отправки на несколько пограничных серверов и, возможно, даже реализация схемы сегментирования.
Просто будь осторожен. В зависимости от вашего приложения вы должны учитывать множество проблем с безопасностью.
Если все файлы отправляются в общедоступный каталог, пользователи могут угадывать имена файлов других людей и загружать их. В этом случае вы захотите обслуживать их из Django с тонким слоем безопасности наверху.
Никогда не доверяйте своим пользователям! Убедитесь, что то, что они загружают, находится в определенном допустимом наборе. Ни при каких обстоятельствах вы не должны позволять им загружать все, что они хотят. Если, конечно, вашим пользователям не доверяют. Даже в этом случае вам следует провести некоторые проверки. Скорее всего, им не стоит загружать файлы .php. Последнее, что вы хотите им дать, - это возможность запускать произвольные скрипты на вашем сервере. По крайней мере, настройте каталог так, чтобы он просто обслуживал файлы и ничего не выполнял.
Удачи
Большое спасибо. NFS работает как шарм, и я изо всех сил стараюсь сделать его безопасным. Думаю, я забочусь почти обо всех упомянутых вами точках безопасности. Еще раз спасибо.
Спасибо за ваш комментарий, но использование rsync может потребовать, чтобы мы сначала временно обслужили файлы с самого веб-сервера, а затем запустили механизм, который обслуживает статический файловый сервер после того, как rsync подтолкнет его. На данный момент NFS работает, и мы посмотрим, поможет ли нам rsync в будущем.