Ubuntu,apache2通配符dns到子域名

Ubuntu,apache2通配符dns到子域名

目前,我正在托管自己的 (ubuntu) 服务器,其中包含以下服务:samba、ftp 和 webserver。我已购买域名并将 DNS A 记录链接到我的 ISP 的 IP。一切正常。现在我想使用 DNS 通配符记录来创建子域。我想避免在 DNS 更改完成之前等待 24 小时。

到目前为止我只能重定向全部传入通配符到同一目录:

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/>允许访问的块,并且请记住,此 vhost 应该只为您动态配置的 vhost 处理服务 - 如果您希望example.comwww.example.com单独处理,那么您希望它们拥有自己的<VirtualHost>

编辑:

您将需要使用不同的虚拟主机来处理“基本”域。根据注释中的当前配置进行构建:

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服务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 中完成。 请注意,这个解决方案对我来说很有效。我想这对其他人也同样有效。

相关内容