Apache 始终服务于第一个虚拟主机

Apache 始终服务于第一个虚拟主机

我曾多次看到有人问到这个问题,但令人惊讶的是,没有一个解决方案对我有用:

  • 是的,我已经使用了“sudo a2ensite com.secondwebsite.conf”
  • 是的,我已经使用了“sudo /etc/init.d/apache2 reload”
  • 是的,我已经使用了“sudo /etc/init.d/apache2 restart”
  • 是的,我尝试将两个虚拟主机放入一个文件(/etc/apache2/sites-available/default),在其顶部添加“NameVirtualHost *:80”并将其从“/etc/apache2/ports.conf”中删除
  • 是的,我使用了“sudo chmod 777 /var/www/secondwebsite”

无论我做什么,secondwebsite.com 总是显示 firstwebsite.com。有人知道这可能是什么原因吗?

这是我的“/etc/apache2/sites-available/default”

    <VirtualHost *:80>
            ServerAdmin [email protected]
            ServerName firstwebsite.com
            ServerAlias www.firstwebsite.com

            DocumentRoot /var/www
            <Directory />
                    Options FollowSymLinks
                    AllowOverride None
            </Directory>
            <Directory /var/www/>
                    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 /static /home/user/firstwebsite/firstwebsite/static
            <Directory /home/user/firstwebsite/firstwebsite/static>
                    Order allow,deny
                    Allow from all
            </Directory>

            Alias /media /home/user/firstwebsite/firstwebsite/site_media/media
            <Directory /home/user/firstwebsite/firstwebsite/site_media/media>
                    Order allow,deny
                    Allow from all
            </Directory>

            <Directory /home/user/firstwebsite/firstwebsite>
                    Order allow,deny
                    Allow from all
            </Directory>

            WSGIDaemonProcess firstwebsite
            WSGIProcessGroup firstwebsite
            WSGIScriptAlias / /home/user/firstwebsite/firstwebsite/wsgi.py
    </VirtualHost>

我的“/etc/apache2/sites-available/com.secondwebsite.conf”

    <VirtualHost *:80>
            ServerAdmin [email protected]
            ServerName secondwebsite.com
            ServerAlias www.secondwebsite.com

            DocumentRoot /var/www/secondwebsite/public_html
            ErrorLog ${APACHE_LOG_DIR}/secondwebsite_error.log
            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            LogLevel warn

            CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

我的“/etc/apache2/ports.conf”

    # If you just change the port or add more ports here, you will likely also
    # have to change the VirtualHost statement in
    # /etc/apache2/sites-enabled/000-default
    # This is also true if you have upgraded from before 2.2.9-3 (i.e. from
    # Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
    # README.Debian.gz

    NameVirtualHost *:80
    Listen 80

    <IfModule mod_ssl.c>
        # If you add NameVirtualHost *:443 here, you will also have to change
        # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
        # to <VirtualHost *:443>
        # Server Name Indication for SSL named virtual hosts is currently not
        # supported by MSIE on Windows XP.
        Listen 443
    </IfModule>

    <IfModule mod_gnutls.c>
        Listen 443
    </IfModule>

sudo /usr/sbin/apache2ctl -S 的结果

    VirtualHost configuration:
    wildcard NameVirtualHosts and _default_ servers:
    *:80                   is a NameVirtualHost
             default server firstwebsite.com (/etc/apache2/sites-enabled/000-default:1)
             port 80 namevhost firstwebsite.com (/etc/apache2/sites-enabled/000-default:1)
             port 80 namevhost secondwebsite.com (/etc/apache2/sites-enabled/com.secondwebsite.conf:1)
    Syntax OK

答案1

您的服务器别名似乎不起作用,因为它们没有被命令报告,/usr/sbin/apache2ctl -S因为它应该类似于

VirtualHost configuration:
    wildcard NameVirtualHosts and _default_ servers:
    *:80                   is a NameVirtualHost
             default server firstwebsite.com (/etc/apache2/sites-enabled/000-default:1)
             port 80 namevhost firstwebsite.com (/etc/apache2/sites-enabled/000-default:1)
                     alias www.firstwebsite.com
             port 80 namevhost secondwebsite.com (/etc/apache2/sites-enabled/com.secondwebsite.conf:1)
                     alias www.secondwebsite.com
    Syntax OK

请提供您的 Apache 版本。

此外,没有“目录”配置/var/www/secondwebsite/public_html在您的第二个虚拟主机中。尝试放置一个。

答案2

根据我的经验,这可能发生在以下情况下:

firstsite.com 的 dns 为 1.2.3.4,vhost 中的 ip 为 1.2.3.4 或 *

secondsite.com 的 dns 为 1.2.3.4,vhost 中的 ip 为 1.2.3.5。

1.2.3.4 和 1.2.3.5 都是有问题的服务器的 IP,并且 apache 正在监听这两个 IP。

但就您提供的少量日志和详细信息而言,很难发现是否确实如此。

相关内容