В настоящее время у меня есть 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
и это сработало для меня