Ubuntu Apache为网站使用错误的VHost

时间:2018-01-25 11:54:39

标签: apache vhosts certbot

我正在使用Ubuntu 16.0.4,并且配置了vhost,所有.conf文件位于/etc/apache2/sites-available,所有已启用的网站位于/etc/apache2/sites-enabled,每个网站会话使用a2ensite。我禁用了000-default.conf,我正在使用certbot,以及最新的apache和PHP 7.2.x。

我的两个网站都存在vhost配置问题。这些网站是:

Site 1: clients.site1.com.conf
Site 2: clients.site2.com.conf
Site 3: site3.com.conf (Mention later)

如果我在浏览器中转到clients.site1.com,它会正常加载。

如果我在浏览器中转到clients.site2.com,则网址会显示加载clients.site2.com,但它实际上正在加载来自clients.site1.com的{​​{1}}内容。

我已查看/var/www/clients.site1.com/public_html,并拥有以下内容:

clients.site1.com.conf

我已查看<VirtualHost *:80> ServerAdmin webmaster@clients.site1.com ServerName clients.site1.com ServerAlias clients.site1.com DocumentRoot /var/www/clients.site1.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine on RewriteCond %{SERVER_NAME} =clients.site1.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> ,并拥有以下内容:

clients.site2.com.conf

我玩过conf文件的文件名,认为有两个配置<VirtualHost *:80> ServerAdmin webmaster@clients.site2.com ServerName clients.site2.com ServerAlias clients.site2.com DocumentRoot /var/www/clients.site2.com/public_html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine on RewriteCond %{SERVER_NAME} =clients.site2.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> 的配置文件存在通配符匹配问题。所以我尝试删除点clients.,甚至尝试用连字符.替换它。结果仍然相同。

我做的最后一次测试是禁用-。当我这样做然后继续在我的浏览器中加载clients.site1.com.conf时,下一个网站按照conf文件的顺序(上面的站点3作为示例)就是加载的。

更新:

我跑clients.site2.com并获得以下内容:

apache2ctl -S

2 个答案:

答案 0 :(得分:1)

您可以采取以下措施来帮助调试:

apache2ctl -S

这将显示Apache认为您拥有的vhost配置。重命名之前a2dissite配置文件很重要,等等。

  

我禁用了000-default.conf

最好保持启用此功能,并创建一个在Apache不知道去哪里时加载的默认文件。它可以是一个非常简单的文件,只是说“错误”,但是当Apache认为它无处可去时你会发现它。此外,为所有不合法的请求提供蜜罐更好的安全性。最后,我有一个模糊的记忆,发现如果没有设置000-default,它实际上可能会随机选择一个vhosts,但不确定,但它会解释网站3的行为。

最后,您将ServerNameServerAlias都设置为相同的网址。这不是必要的,虽然我不认为这是问题,但最好将其从混合中取出。

否则我看不到您的vhosts文件有任何问题,应该可以使用。

<强>更新

您正在重定向到https网址。那么决定Apache的是-le-ssl.com.conf文件。我也曾用Let's Encrypt与之斗争过。以下是使Apache和Let的加密都快乐的程序:

  • 为非安全端口80
  • 创建一个配置(website.com.conf)
  • a2ensite website.com.conf
  • apache2ctl graceful(所以Apache知道非安全网址)
  • letsencrypt --apache -d website.com(这将生成整个-le-ssl文件)
  • apache2ctl graceful

答案 1 :(得分:0)

万一它可以帮助某人:我有完全相同的问题。

在Apache中配置的几个网站。他们工作正常。

我将它们移至新服务器。我不知道为什么(可能是默认的Apache conf有所不同),但是它们开始表现得像问题中所解释的那样,例如“指向”默认站点。

原因是我没有ServerAlias行将站点的“非www”名称转发到“ www前缀”名称。

我习惯于键入“ mydomainname.com”而不是“ www.mydomainname.com”,因为我的DNS配置中有一行,如果www丢失,则将请求转发到www.xxxx。

因此,Apache没有找到ServerName,而是试图将请求传递给默认站点。

但是,由于我已经删除了000-default.conf文件的内容,因此该请求已传递到第一个正常工作的网站。

因此请确保您拥有:

  • 有效的000-default.conf文件
  • www前缀站点之类的ServerAlias

    ServerAlias www.yourdomainname.com