Назад | Перейти на главную страницу

Один IP-адрес на 80-м порту с несколькими виртуальными хостами, разными именами и портами

Я не знаю, как спросить или описать словами, что я пытаюсь сделать, и можно ли это сделать таким образом, поэтому я решил нарисовать диаграмму. Надеюсь, это довольно понятно:

Я знаю, что могу использовать все именованные виртуальные хосты на 80-м порту, но могу ли я разместить их на разных портах и ​​заставить сервер определять, какой именованный хост какой и на каком порту они находятся?


<VirtualHost _default_:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/foo-1.com
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/foo-1.com/>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

<VirtualHost _default_:80>
    DocumentRoot /var/www/foo-2.com
    ServerName foo-2.com
    <Directory "/var/www/foo-2.com">
        allow from all
        Options -Indexes
    </Directory>
</VirtualHost>

При первом чтении вашего сценария мой первый ответ был: зачем вам делать это так же, как и другие, но с Apache или PHP что-то подобное возможно. Было бы намного лучше, если бы виртуальные хосты работали должным образом на 80-м порту, поскольку именно этого ожидают посетители веб-сайта, но это мое мнение.

Чтобы сделать то, что вы хотите выполнить, есть два варианта, и вы должны быть уверены, что должно произойти перенаправление HTTP. Ни в коем случае.

Ваш первый вариант - использовать для этого PHP примерно так ...

  1. Ваш основной сайт Apache будет охватывать все запросы сайтов по умолчанию с использованием PHP
  2. PHP прочитает заголовки, просмотрит URL-адрес и вернет перенаправление в браузер.
  3. Затем браузер перенаправит на правильный URL

Apache также поддерживает возможность перезаписи, и вы можете организовать это для каждого сайта следующим образом

# First host rewrite
RewriteCond %{HTTP_HOST} ^www.\foo-1\.com$ [NC]
RewriteRule ^(.*)$ http://www.foo-1.com:8080/$1 [L,R=301]

# Second host rewrite
RewriteCond %{HTTP_HOST} ^www.\foo-2\.com$ [NC]
RewriteRule ^(.*)$ http://www.foo-2.com:8081/$1 [L,R=301]

Однако, если вы собираетесь перейти на этот уровень с условиями перезаписи, может быть проще определить VHOSTS в Apache и заставить его правильно работать на вашем сервере.

Иметь два виртуальные хосты на основе имен работая с одним и тем же IP-адресом, попробуйте что-нибудь вроде этого

NameVirtualHost *:80

<VirtualHost _*:80>
    ServerAdmin webmaster@localhost
    ServerName foo-1.com
    ServerAlias www.foo1.com
    DocumentRoot /var/www/foo-1.com
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/foo-1.com/>
        Options -Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/foo-2.com
    ServerName foo-2.com
    ServerAlias www.foo-2.com
    <Directory "/var/www/foo-2.com">
        allow from all
        Options -Indexes
    </Directory>
</VirtualHost>

Обратите внимание, что у каждого виртуального хоста есть Название сервера и ServerAlias