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

Apache - Несколько сайтов - Один сервер - Различные порты - Linux

В настоящее время у меня есть Apache2, прослушивающий порт 80. Это настраивается в /etc/apache2/listen.conf

В /etc/apache2/conf.d у меня есть обычные файлы конфигурации и:

site1.conf, site2.conf и site3.conf файлы.

Каждый файл conf настроен очень похоже:

Alias /site1 /home/user/www/site1/

AddHandler cgi-script cgi

<Directory "/home/user/www/site1/">
  AllowOverride All
  Options +ExecCGI

  <IfModule mod_authz_core.c>
    Require all granted
  </IfModule>

  <IfModule !mod_authz_core.c>
    Order allow,deny
    Allow from all
  </IfModule>

  DirectoryIndex index.cgi
</Directory>

Итак, зайдя в свой браузер, я могу ввести:

http://10.10.0.1/site1 и получите site1, http://10.10.0.1/site2 и получите site2 и т. д.

Это прекрасно работает внутри.

Теперь я хочу разрешить доступ к сайтам site2 и site3 извне.

Если я открою порт 80 на моем маршрутизаторе и направлю его на 10.10.0.1, тогда все сайты станут доступны.

Я добавил 8080 и 8888 в /etc/listen.conf и отредактировал site2.conf как:

<VirtualHost *:8080>
 Alias /site2 /home/user/www/site2/

    AddHandler cgi-script cgi

    <Directory "/home/user/www/site2/">
      AllowOverride All
      Options +ExecCGI

      <IfModule mod_authz_core.c>
        Require all granted
      </IfModule>

      <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from all
      </IfModule>

      DirectoryIndex index.cgi
    </Directory>
</VirtualHost>

и site3 то же самое, но установка VirtualHost на *: 8888

Это работает. Я могу получить доступ к site2 только на 8080 и site3 только на 8888 НО

Я также могу получить доступ к site1 через порт 8080 и порт 8888

Я хочу:

Маршрутизатор только 8080 и 8888 открыты и маршрутизируются.

Есть идеи, как я могу это сделать?

Спасибо

Я никогда не пробовал Я только что тестировал с помощью Apache DocumentRoot директива без соответствующего ServerName назвал хозяина - и он заработал на моей машине.
Идея состоит в том, чтобы попытаться заставить виртуальный хост соответствовать пути к файлу, попробуйте заменить это:

Alias /site2 /home/user/www/site2/

с участием

DocumentRoot /home/user/www/site2

Документация Apache говорит

DocumentRoot следует указывать без косой черты в конце.

так что вы получите

<VirtualHost *:8080>
 DocumentRoot /home/user/www/site2

    AddHandler cgi-script cgi

    <Directory "/home/user/www/site2/">
      AllowOverride All
      Options +ExecCGI

      <IfModule mod_authz_core.c>
        Require all granted
      </IfModule>

      <IfModule !mod_authz_core.c>
        Order allow,deny
        Allow from all
      </IfModule>

      DirectoryIndex index.cgi
    </Directory>
</VirtualHost>

Попробуйте использовать одну комбинацию веб-сайтов виртуального хоста, если она работает, повторите на других. - не забудьте перезапустить apache после изменения vhosts - вам, вероятно, придется, если вы измените Listen директива.

Apache имеет руководство по запуску нескольких веб-сайтов на разных портах.
Это основано на apache 2.2, и в документации говорится

[вы должны использовать] NameVirtualHost x.x.x.x: 8080 - без имени NameVirtualHost: порт или вы пытаетесь использовать директиву Listen, ваша конфигурация не будет работать.

Я тестировал 2.4 на Ubuntu без NameVirtualHost и это сработало для меня