Конфигурирование сервиса порта TCP/IP
Конфигурирование сервиса порта TCP/IP
По умолчанию Firebird прослушивает порт 3050 при запросе соединения от клиентов TCP/IP. Зарегистрированное имя сервиса этого порта gds_db. Хорошая новость - вы можете использовать эти установки по умолчанию и ничего не делать с конфигурацией сервиса порта ни для сервера, ни для клиента.
Вы можете использовать другой порт, другое имя сервиса порта или и то, и другое. Вам может понадобиться это сделать, если порт 3050 требуется для другого сервиса, например, если параллельно используемый gds_db сконфигурирован для другой версии Firebird или для сервера InterBase. Есть несколько способов перекрыть значения по умолчанию. Сервер и клиенты оба должны быть сконфигурированы для изменения имени сервиса или номера порта (или и того, и другого) по меньшей мере одним из следующих способов:
* в строке соединения клиента;
* в команде запуска исполняемой программы сервера;
* активацией параметров RemoteServicePort или RemoteServiceName В firebird.config (версия 1.5 и выше);
* в демоне конфигурации (для Классического сервера в POSIX);
* в записи файла services.
Прежде чем проверять каждую из этих техник, будет полезным взглянуть на логику, используемую сервером для установки прослушиваемого порта, и порядок установки клиентом используемого порта.
Как сервер устанавливает прослушиваемый порт
Исполняемая программа сервера имеет необязательный переключатель в командной строке (-р), который можно использовать для указания номера порта или имени сервиса порта, который будет прослушиваться сервером. Если присутствует этот переключатель, то номер порта 3050 или имя сервиса порта (gds_db) будут заменены на значение аргумента, указанного в переключателе -р.
Затем- или вначале, если не установлен переключатель -р,- сервер версии 1.5 проверяет наличие параметров RemoteServicePort и RemoteServiceName В firebird.config.
* Если оба параметра закомментированы с использованием #, то принимаются значения по умолчанию, и никакие дальнейшие изменения не выполняются. Любой аргумент -р игнорируется, и "отсутствующие" аргументы сохраняют значение по умолчанию.
* Если RemoteServiceName (но не RemoteServicePort) не закомментирован, то имя сервиса порта заменяется, только если это имя не было уже перекрыто переключателем -р.
* Если RemoteServicePort и RemoteServiceName не закомментированы, ТО RemoteServiceName получает приоритет, если он не был перекрыт аргументом -р. Если же имя сервиса порта уже было изменено, то значение RemoteServiceName будет проигнорировано, и новое значение RemoteServicePort заменит предыдущее значение 3050.
* В этой точке, если замена номера порта или имени сервиса была выполнена, то оба сервера версий 1.0 и 1.5 выполняют проверку файла services на наличие записи с корректной комбинацией имени сервиса и номера порта. Если соответствие найдено, то все в порядке. Если нет, и имя сервиса порта не gds db, то сервер выдаст исключение и отменит запуск. Если имя сервиса порта gds db и ему не может быть назначен никакой другой порт, он будет использовать порт 3050 автоматически.
Если значение по умолчанию для номера порта или имени сервиса было изменено, то вам может понадобиться создать запись в файле services. Для понимания того, нужно ли это делать, выполните шаги, описанные далее в этой главе в разд. "Конфигурирование файла services".
Использование переключателя -p
Запуск сервера с необязательным переключателем -р дает вам возможность перекрывать значение по умолчанию для номера порта (3050) или имя сервиса порта (gds db), которые используются сервером для прослушивания запросов на соединение. Переключатель может перекрывать одно значение, но не оба. В Firebird 1.5 и следующих вы можете использовать переключатель -р в комбинации с конфигурацией в файле firebird.conf для получения возможности перекрывать и номер порта, и имя сервиса порта.
Синтаксис для TCP/IP
Шаблон синтаксиса для команд:
Команда-сервера <другие переключатели< -р номер-порта j имя-сервиса
Например, для запуска Суперсервера как приложения и замены имени сервиса с gds_db на fb_db введите:
fbserver -а -р fb_db
Для замены порта 3050 на 3051 введите:
fbserver -а -р 3051
Синтаксис для Wnet
Для сети Wnet замените аргумент переключателя -р на обратная черта-обратная черта-точка-@:
fbserver -а -р \.@fb_db
ИЛИ
fbserver -а -р \.@3051
Классический сервер в POSIX: демон inetd или xinetd
В Классическом сервере Firebird для Linux или UNIX демон inetd или xinetd сконфигурирован на прослушивание порта по умолчанию и имя сервиса по умолчанию. Инсталляционный скрипт запишет соответствующую запись в файл конфигурации /etc/inetd.conf или /etc/xinetd.conf.
Проблемы с подключением к Классическому серверу часто происходят по причине отсутствия или неправильной записи сервиса порта в этом файле. Вы можете проверить текущую запись, открыв файл в текстовом редакторе (например, vim) и скорректировав ее при необходимости. Следующий пример показывает, что вы должны увидеть в файле /etc/inetd.conf или /etc/xinetd.conf после инсталляции Классического сервера Firebird в Linux:
# default: on
# description: FirebirdSQL server
#
service gds_db
(
flags = REUSE KEEPALIVE
socket_type = stream
wait = no
user = root
# user = @FBRunUser@
log_on_success += USER1D
log_on_failure += USER1d
server = /opt/firebird/bin/fb_inet_server
disable = no
)
Если вы изменили сервис порта на значение, отличное от значения по умолчанию, вы должны соответственно изменить /etc/inetd.conf или /etc/xinetd.conf. Заново стартуйте xinetd (или inetd) с аргументом kill -HUP, чтобы убедиться, что демон будет использовать новую конфигурацию.
! ! !
ВНИМАНИЕ! Запросы на соединения будут неуспешными, если xinetd (или inetd) и fbserver (или ibserver) оба пытаются прослушивать один и тот же порт. Если ваша хост-машина имеет подобную дублирующую конфигурацию, то необходимо сделать такие установки, при которых каждая версия сервера имела бы свой собственный порт.
. ! .
Использование параметров файла конфигурации
В Firebird 1.5 и выше вы можете конфигурировать или RemoteServiceName, или RemoteServicePort в файле firebird.config для изменения номера порта по умолчанию (3050), или имени сервиса порта по умолчанию (gds_db), которые использует сервер для прослушивания запросов на соединение.
Сервер будет использовать один параметр Remoteservice*, но не оба. Если вы сконфигурировали оба, то он будет игнорировать RemoteServicePort во всех ситуациях, за исключением того случая, когда команда запуска сервера была вызвана с переключателем -р, перекрывающим имя сервиса порта. Следовательно, вы можете использовать в комбинации переключатель -р и параметр Remoteservice* для изменения номера порта и имени сервиса.
Если значения по умолчанию для номера порта или имени сервиса были изменены, то вам нужно создать запись в файле services.
! ! !
ВНИМАНИЕ! Если вы не закомментировали ни RemoteServiceName, ни RemoteServicePort, но оставили значения по умолчанию нетронутыми, они будут трактоваться как измененные. Необходимо создать запись в файле services для установок значений по умолчанию сервиса порта.
. ! .