Укороченная версия:
В чем разница между контекстом сервера и разделом виртуального хоста в файле конфигурации proftpd? В том смысле, что я могу сделать с первым, я не могу сделать со вторым.
Например, я не могу поместить директивы типа UseIPv6 или MaxInstances в раздел виртуального хоста или глобального, но размещение их в контексте сервера работает просто отлично. Каково тогда будет правильное использование этих разделов для настройки, упомянутой ниже?
Я думал, что общий процесс выглядит следующим образом: всякий раз, когда клиент подключается к серверу, сервер проверяет, есть ли виртуальный хост, соответствующий адресу, к которому подключился клиент. Если нет, выбирается раздел контекста сервера (за исключением директивы DefaultServer, которая предотвращает это). Поэтому я думал, что раздел контекста сервера и раздел виртуального хоста одинаково «мощны». Но это не может быть так, поскольку есть директивы, которые работают только в одном из разделов.
Длинная версия (дополнительная информация):
По сути, все, что я хочу сделать, это запустить сервер proftp на локальной машине дома и сделать этот сервер доступным как из интернета, так и из моей локальной сети. И он работает. Я скомпилировал proftpd из исходников (причина ниже), установил и настроил его, и, похоже, он работает так, как и должен. Мне не нужна помощь, чтобы заставить proftpd работать должным образом.
Я не смог запустить сервер, просто прочитав документацию proftpd, и мне пришлось продолжать возиться с файлом конфигурации, пока все не заработало как надо. Так что есть еще кое-что в использовании virtualhosts, global и server context section, чего я не понимаю должным образом, и поэтому я задал вопросы выше.
Я прочитал о настройке proftpd за маршрутизатором и значении раздела virtualhosts, global и server context:
http://www.proftpd.org/docs/howto/NAT.html
http://www.proftpd.org/docs/howto/Vhost.html
Я следовал нескольким руководствам и искал на форуме похожие вопросы. Сервер работает, просто я не совсем понимаю, почему сейчас и почему раньше не работал.
Вот структура моего текущего (рабочего) proftpd.conf:
<Global> User ... Group ... RequireValidShell ... DefaultRoot ... ... <IfModule mod_tls.c> TLSEngine ... TLSProtocol TLSv1.2 ... </IfModule> </Global>
#server context managing the config for access over the internet ServerName "external" Port 21 #can't be used inside a virtualhost section UseIPv6 off ... #need to masquerade ip for external address MasqueradeAddress myurl.com #needed for passive ftp mode PassivePorts 60000 65535
#virtualhost managing the config for lan access <VirtualHost 192.168.178.54> ServerName "internal" Port 21 PassivePorts 60000 65535 </VirtualHost>
Сначала я подумал, что мне просто нужно создать два раздела virtualhost, один для локальной сети и один для внешнего доступа, и отключить раздел контекста сервера, установив порт 0. Но есть директивы, которые я не могу использовать внутри разделов virtualhost. Поэтому я не уверен, использую ли я 3 возможных раздела, как положено. Нужно ли мне использовать раздел контекста сервера, чтобы иметь какую-то конфигурацию по умолчанию? Это можно сделать с помощью директивы DefaultServer, согласно документации.
uname -a: Linux ИМЯ ХОСТА 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 GNU/Linux
proftpd -v: ProFTPD Version 1.3.5 Двоичный пакет proftpd, включенный в репозитории Debian, не поддерживает TLS 1.2, а я не хочу использовать FTP с версией TLS ниже или даже SSL. Поэтому я скомпилировал его сам.
Это довольно длинный текст. Я старался сократить его, быть точным, избегать ненужного, но предоставить достаточно информации. Если есть что-то, что я мог бы улучшить или если мой вопрос скорее относится к unix и linux stackexchange, просто дайте мне знать. Я выбрал superuser вместо serverfault, чтобы задать этот вопрос, потому что он касается серверной среды дома.
Спасибо за ваше время и помощь.
Янв
решение1
Существуют некоторые директивы конфигурации, которые влияют на весьдемон, например UseIPv6
или MaxInstances
. Эти директивыне могупо этой причине может быть установлен на уровне каждого виртуального хоста.
Однако синтаксис файла конфигурации ProFTPD не имеет контекста/раздела, который говорит: «Эти директивы предназначены только для всего демона». Таким образом, по умолчанию (и да, это не идеально) эти директивы, охватывающие весь демон, разрешены только в разделе «server config», вне <Global>
, <VirtualHost>
, или любого другого контекста.
Надеюсь это поможет!
решение2
Как оказалось, я был не прав в предоставленной мной информации. Я собираюсь отметить этот вопрос как решенный, чтобы люди не тратили время на ответ на него. Простое редактирование не поможет, так как я не знаю, когда у меня будет время перепроверить настройки proftpd. Однако я выясню, что послужило причиной неверного описания, пересмотрю свой вопрос и опубликую его снова через некоторое время.