В настоящее время я размещаю свой собственный сервер (ubuntu) со следующими службами: samba, ftp и веб-сервер. Я купил домен и связал DNS A-запись с IP моего интернет-провайдера. Это работает правильно. Теперь я хотел бы использовать DNS wildcard-record для создания поддоменов. Я хочу избежать ожидания в течение 24 часов до завершения изменения DNS.
До сих пор я могу только перенаправитьвсевходящие подстановочные знаки в тот же каталог:
test1.domain.com перенаправляет на /var/www
test2.domain.com перенаправляет на /var/www
Хотя я хотел бы получить:
test1.domain.com перенаправляет на /var/www/test1
test2.domain.com перенаправляет на /var/www/test2
Я предполагаю, что нужно изменить файл /etc/apache2/sites-available/domain.
Любая помощь или советы будут приветствоваться!
Спасибо,
Отметка
РЕДАКТИРОВАТЬ:
Вот как выглядит мой файл /etc/apache2/sites-available/domain:
<VirtualHost *:80>
ServerAdmin webmaster@domain
DocumentRoot /var/www/webroot
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/webroot>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
решение1
Вы должны иметь возможность получить желаемое поведение с помощью VirtualDocumentRoot
.
В вашем <VirtualHost>
, добавьте , ServerAlias
чтобы охватить все интересующие вас домены:
ServerAlias *.example.com
...затем сопоставьте их с нужными каталогами. Удалите ваш DocumentRoot
, и на его место добавьте:
VirtualDocumentRoot /var/www/%1
Вам понадобится <Directory /var/www/>
блок, разрешающий доступ, и помните, что этот виртуальный хост должен обслуживать только ваши динамически настроенные виртуальные хосты — если вы хотите, чтобы example.com
и www.example.com
обрабатывались отдельно, то вам нужно, чтобы у них были свои собственные <VirtualHost>
.
Редактировать:
Вам нужно будет использовать другой vhost для обработки "базовых" доменов. Построение текущей конфигурации в комментарии:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName catchall.example.com
ServerAlias *.example.com
# NOTE: this config will map test1.example.com to /var/www/test1
VirtualDocumentRoot /var/www/%1
# If you want that to map instead to /var/www/test1.example.com, then use %0:
# VirtualDocumentRoot /var/www/%0
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Order Allow,Deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# This next vhost should be in a different file in sites-available to
# fit with debian-style vhosts - but make sure it's alphabetically
# after the file that contains the first vhost - we want it to load first
# so that it's default. It can also just go in the same file.
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/www.example.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Order Allow,Deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
решение2
Спасибо за помощь в поиске ответа. Здесь я нашел решение своей проблемы, я думаю, это поможет другим новичкам, таким как я, в поиске решения вышеупомянутой проблемы.
шаг 1: настройте свой веб-сайт, как указано ниже
vi /etc/apache2/sites-available/yoursite
<VirtualHost *:80> ServerAlias localhost *.yoursite #wildcard catch all VirtualDocumentRoot /path/to/your/workspace/%1/public UseCanonicalName Off <Directory "path/to/your/workspace"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
2)sudo a2ensite /etc/apache2/sites-available/yoursite
3) sudo service apache2 перезагрузка
4)Установите Dnsmasq: sudo apt-get install dnsmasq
5) откройте /etc/NetworkManager/NetworkManager.conf и закомментируйте строку dns=dnsmasq. После этого перезапустите NetworkManager: sudo restart network-manager.
6)vi /etc/dnsmasq.conf и строку listen-address=127.0.0.1.
7) Создайте новый файл в /etc/dnsmasq.d, откройте его и отредактируйте следующим образом:
address=/yourdomain/127.0.0.1
8) Перезапустите Dnsmasq: sudo /etc/init.d/dnsmasq restart.
Это также можно сделать в nginx. и, пожалуйста, обратите внимание, что это решение сработало для меня. Я думаю, это сработает и для всех остальных.