Отображать правильный веб-сайт с веб-сервера при доступе через IP и протопередачу

0

Я настроил переадресацию портов так, чтобы они указывали на мой рабочий веб-сервер, чтобы выбранные пользователи могли получать доступ к сайту через наш внешний IP-адрес, когда он не в сети. Переадресация на сервер работает, но на этом сервере есть несколько конфигураций, и в данный момент он останавливается на первом, поэтому отображается неправильный веб-сайт.

Например, возьмем эти две конфигурации, и наш внешний IP-адрес 11.22.33.44- то, что я хотел бы сделать, это перейти http://11.22.33.44:789(произвольный порт, может быть любым) и показать веб-сайт в конфигурации 1. Тем не менее, веб-сайт в Config 2 показывает, потому что он идет в алфавитном порядке в списке конфигов. Есть ли способ (аналогичный ServerAlias), чтобы я мог проверить, к какому порту был получен доступ, и использовать соответствующий конфиг?

Конфиг 1

Listen *:789
NameVirtualHost *:80
NameVirtualHost *:789

<VirtualHost *:80 *.789>
        ServerName test.dynedrewett.com
        DocumentRoot /var/www/html/website/test
        ErrorLog /var/log/httpd/test.dynedrewett.com-error
        CustomLog /var/log/httpd/test.dynedrewett.com-access combined
        ErrorDocument 401 /wp-content/themes/dyne_drewett/401.php
</VirtualHost>

Конфиг 2

<VirtualHost *:80>
        ServerName dummy.dynedrewett.com
        ServerAlias dummy
        DocumentRoot /var/www/html/intranet/intranet_test
        ErrorLog /var/log/httpd/dummy.dynedrewett.com-error
        CustomLog /var/log/httpd/dummy.dynedrewett.com-access combined
        ErrorDocument 403 /wp-content/themes/dyne_drewnett/403.php
</VirtualHost>

Могу ли я изменить настройки так, чтобы при этом показывался правильный веб-сайт? Благодарю.

Дэвид Гард
источник
О каком веб-сервере вы говорите? IIS, Apache?
Пауло Скардин
@PauloScardine - я подозреваю, что он говорит об Apache 2, учитывая, что пост помечен как таковой :)
Оливер Дж
О боже, я нашел, почему это не работает, как я хотел. То, что у меня есть выше, на самом деле правильно, но я случайно перенаправил не на тот порт, поэтому он использовал первый конфиг, так как не знал, какой именно он должен использовать! Благодарю.
Дэвид Гард

Ответы:

2

Если у вас есть несколько доменных имен, размещенных на одном и том же IP-адресе, веб-сервер использует домен, присутствующий в заголовках запросов, чтобы выяснить, какой контент следует обслуживать. Большинство установок apache по умолчанию поставляется с конфигурацией «VirtuaHost», даже если она обслуживает только один сайт.

Вы можете сделать один сайт сайтом по умолчанию, когда в запросе недостаточно информации для выбора нужного VirtualHost, обратитесь к документации Apache о конфигурации виртуального хоста по умолчанию .

Другой способ - указать какое-либо доменное имя для внешнего IP-адреса и включить это доменное имя в конфигурацию VirtualHost с помощью директивы ServerAlias.

[Обновить]

Вы не можете обслуживать более одного веб-сайта на одном и том же ip / порту с использованием имен, основанных на имени, но вы можете обслуживать их через альтернативные порты TCP (или IP-адреса, если у вас есть более одного доступного).

Если вы не можете настроить внешний DNS, чтобы использовать vhosts, основанные на именах, вы можете прибегнуть к этому трюку: отредактируйте %WINDIR%\system32\drivers\etc\hostфайл клиентского компьютера / etc / hosts (или ), чтобы он указывал то же внутреннее имя DNS на ваш внешний IP.

Пауло Скардин
источник
Спасибо за ответ. Я использую виртуальные хосты (около 7 из них), и я успешно использую директиву ServerAlias ​​внутри, где наш DNS включает записи для этих веб-сайтов. Я подключаюсь к веб-серверу через переадресацию портов через наш внешний IP-адрес, поэтому ServerAlias ​​для поиска не существует.
Дэвид Гард
@DavidGard: что мешает вам сопоставить внешний IP-адрес с доменным именем, например, «external.example.com», и добавить еще одну ServerAlias ​​к желаемому виртуальному хосту?
Пауло Скардин
Если я добавлю запись во внутренний DNS, вам нужно будет быть на сайте, чтобы использовать ее. И я не могу добавить внешнюю запись DNS, как меня просили не полномочия.
Дэвид Гард
@DavidGard: поэтому вам нужно настроить _default_vhost или сделать желаемый vhost по умолчанию, переместив его в первую конфигурацию vhost, перейдите по ссылке в ответе.
Пауло Скардин
Я вижу, что в краткосрочной перспективе это, вероятно, ответ, но в будущем, если мне понадобится сделать это для другого нашего внутреннего веб-сайта, я столкнусь с той же проблемой.
Дэвид Гард