Ubuntu Apache对站点使用错误的vhost

Ubuntu Apache对站点使用错误的vhost,apache,vhosts,certbot,Apache,Vhosts,Certbot,我使用的是Ubuntu 16.0.4,并且已经配置了vhost,所有的.conf文件都位于/etc/apache2/sites可用,所有启用的站点都位于/etc/apache2/sites enabled使用a2ensite为每个站点配置。我禁用了000-default.conf,我正在使用certbot,以及最新的apache和PHP7.2.x 我的两个站点的vhost配置有问题。这些地点包括: Site 1: clients.site1.com.conf Site 2: clients.si

我使用的是Ubuntu 16.0.4,并且已经配置了vhost,所有的.conf文件都位于
/etc/apache2/sites可用
,所有启用的站点都位于
/etc/apache2/sites enabled
使用
a2ensite
为每个站点配置。我禁用了000-default.conf,我正在使用certbot,以及最新的apache和PHP7.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
,url会显示
clients.site2.com
已加载,但实际上它正在加载
clients.site1.com
来自
/var/www/clients.site1.com/public\u 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>
<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>
root@ip-111-111-111-111:/etc/apache2/sites-available# apache2ctl -S
VirtualHost configuration:
*:443 is a NameVirtualHost

 default server clients.site1.com (/etc/apache2/sites-enabled/clients.site1.com-le-ssl.conf:2)
 port 443 namevhost clients.site1.com (/etc/apache2/sites-enabled/clients.site1.com-le-ssl.conf:2)
         alias clients.site1.com
 port 443 namevhost site3.com (/etc/apache2/sites-enabled/site3.com-le-ssl.conf:2)
         alias www.site3.com
 port 443 namevhost aaaaa.com (/etc/apache2/sites-enabled/aaaaa.com-le-ssl.conf:2)
         alias www.aaaaa.com
 port 443 namevhost bbbbb.com (/etc/apache2/sites-enabled/bbbbb.com-le-ssl.conf:2)
         alias www.bbbbb.com
 port 443 namevhost ccccc.com (/etc/apache2/sites-enabled/ccccc.com-le-ssl.conf:2)
         alias www.ccccc.com
 port 443 namevhost ddddd.com (/etc/apache2/sites-enabled/ddddd.com-le-ssl.conf:2)
         alias www.ddddd.com
 port 443 namevhost eeeee.com (/etc/apache2/sites-enabled/eeeee.com-le-ssl.conf:2)
         alias www.eeeee.com
 port 443 namevhost ip-111-111-111-111.ec2.internal (/etc/apache2/sites-enabled/fffff.com-le-ssl.conf:2)
         alias www.fffff.com
 port 443 namevhost ggggg.com (/etc/apache2/sites-enabled/ggggg.com-le-ssl.conf:2)
         alias www.ggggg.com
 port 443 namevhost site2.com (/etc/apache2/sites-enabled/site2.com-le-ssl.conf:2)
         alias www.site2.com
*:80 is a NameVirtualHost
 default server ip-111-111-111-111.ec2.internal (/etc/apache2/sites-enabled/000-default.conf:1)
 port 80 namevhost ip-111-111-111-111.ec2.internal (/etc/apache2/sites-enabled/000-default.conf:1)
 port 80 namevhost clients.site1.com (/etc/apache2/sites-enabled/clients.site1.com.conf:1)
         alias clients.site1.com
 port 80 namevhost clients.site2.com (/etc/apache2/sites-enabled/clients.site2.com.conf:1)
         alias clients.site2.com
 port 80 namevhost site3.com (/etc/apache2/sites-enabled/site3.com.conf:1)
         alias www.site3.com
 port 80 namevhost aaaaa.com (/etc/apache2/sites-enabled/aaaaa.com.conf:1)
         alias www.aaaaa.com
 port 80 namevhost bbbbb.com (/etc/apache2/sites-enabled/bbbbb.com.conf:1)
         alias www.bbbbb.com
 port 80 namevhost ccccc.com (/etc/apache2/sites-enabled/ccccc.com.conf:1)
         alias www.ccccc.com
 port 80 namevhost ddddd.com (/etc/apache2/sites-enabled/ddddd.com.conf:1)
         alias www.ddddd.com
 port 80 namevhost eeeee.com (/etc/apache2/sites-enabled/eeeee.com.conf:1)
         alias www.eeeee.com
 port 80 namevhost ip-111-111-111-111.ec2.internal (/etc/apache2/sites-enabled/fffff.com.conf:1)
         alias www.fffff.com
 port 80 namevhost ggggg.com (/etc/apache2/sites-enabled/ggggg.com.conf:1)
         alias www.ggggg.com
 port 80 namevhost site2.com (/etc/apache2/sites-enabled/site2.com.conf:1)
         alias www.site2.com

ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
root@ip-111-111-111-111:/etc/apache2/sites-available#
我一直在使用conf文件的文件名,认为有两个conf文件和
客户端。
存在通配符匹配问题。因此,我尝试删除点
,甚至尝试用连字符
-
替换它。还是一样的结果

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

更新:

我运行了
apache2ctl-S
,得到了以下结果:

<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>
<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>
root@ip-111-111-111-111:/etc/apache2/sites-available# apache2ctl -S
VirtualHost configuration:
*:443 is a NameVirtualHost

 default server clients.site1.com (/etc/apache2/sites-enabled/clients.site1.com-le-ssl.conf:2)
 port 443 namevhost clients.site1.com (/etc/apache2/sites-enabled/clients.site1.com-le-ssl.conf:2)
         alias clients.site1.com
 port 443 namevhost site3.com (/etc/apache2/sites-enabled/site3.com-le-ssl.conf:2)
         alias www.site3.com
 port 443 namevhost aaaaa.com (/etc/apache2/sites-enabled/aaaaa.com-le-ssl.conf:2)
         alias www.aaaaa.com
 port 443 namevhost bbbbb.com (/etc/apache2/sites-enabled/bbbbb.com-le-ssl.conf:2)
         alias www.bbbbb.com
 port 443 namevhost ccccc.com (/etc/apache2/sites-enabled/ccccc.com-le-ssl.conf:2)
         alias www.ccccc.com
 port 443 namevhost ddddd.com (/etc/apache2/sites-enabled/ddddd.com-le-ssl.conf:2)
         alias www.ddddd.com
 port 443 namevhost eeeee.com (/etc/apache2/sites-enabled/eeeee.com-le-ssl.conf:2)
         alias www.eeeee.com
 port 443 namevhost ip-111-111-111-111.ec2.internal (/etc/apache2/sites-enabled/fffff.com-le-ssl.conf:2)
         alias www.fffff.com
 port 443 namevhost ggggg.com (/etc/apache2/sites-enabled/ggggg.com-le-ssl.conf:2)
         alias www.ggggg.com
 port 443 namevhost site2.com (/etc/apache2/sites-enabled/site2.com-le-ssl.conf:2)
         alias www.site2.com
*:80 is a NameVirtualHost
 default server ip-111-111-111-111.ec2.internal (/etc/apache2/sites-enabled/000-default.conf:1)
 port 80 namevhost ip-111-111-111-111.ec2.internal (/etc/apache2/sites-enabled/000-default.conf:1)
 port 80 namevhost clients.site1.com (/etc/apache2/sites-enabled/clients.site1.com.conf:1)
         alias clients.site1.com
 port 80 namevhost clients.site2.com (/etc/apache2/sites-enabled/clients.site2.com.conf:1)
         alias clients.site2.com
 port 80 namevhost site3.com (/etc/apache2/sites-enabled/site3.com.conf:1)
         alias www.site3.com
 port 80 namevhost aaaaa.com (/etc/apache2/sites-enabled/aaaaa.com.conf:1)
         alias www.aaaaa.com
 port 80 namevhost bbbbb.com (/etc/apache2/sites-enabled/bbbbb.com.conf:1)
         alias www.bbbbb.com
 port 80 namevhost ccccc.com (/etc/apache2/sites-enabled/ccccc.com.conf:1)
         alias www.ccccc.com
 port 80 namevhost ddddd.com (/etc/apache2/sites-enabled/ddddd.com.conf:1)
         alias www.ddddd.com
 port 80 namevhost eeeee.com (/etc/apache2/sites-enabled/eeeee.com.conf:1)
         alias www.eeeee.com
 port 80 namevhost ip-111-111-111-111.ec2.internal (/etc/apache2/sites-enabled/fffff.com.conf:1)
         alias www.fffff.com
 port 80 namevhost ggggg.com (/etc/apache2/sites-enabled/ggggg.com.conf:1)
         alias www.ggggg.com
 port 80 namevhost site2.com (/etc/apache2/sites-enabled/site2.com.conf:1)
         alias www.site2.com

ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex ssl-stapling: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/lock/apache2" mechanism=fcntl
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
root@ip-111-111-111-111:/etc/apache2/sites-available#

您可以做一些事情来帮助调试:

apache2ctl -S
这将向您展示Apache认为您拥有的vhost配置。在重命名配置文件之前,对其进行更改非常重要

我已禁用000-default.conf

您最好保持启用状态,并创建一个默认文件,在Apache不知道去哪里时加载该文件。它可以是一个非常简单的文件,只是说“error”,但是当Apache认为它无处可去时,您就会知道。另外,对于所有不合法的请求,有一个蜜罐是更好的安全性。最后,我有一个模糊的记忆,发现如果没有设置000默认值,它实际上可能会随机选择一个vhost,但不确定,但这可以解释Site3的行为

最后,将
ServerName
ServerAlias
设置为相同的URL。这是没有必要的,虽然我不认为这是个问题,但最好把它从混合中去掉

否则,我看不到您的vhosts文件有任何问题,应该可以正常工作

更新

您正在重定向到https URL。因此,指示Apache的是-le-ssl.com.conf文件。我也曾与Let's Encrypt进行过类似的斗争。以下是我让Apache和Let's Encrypt高兴的过程:

  • 为非安全端口80创建一个配置(website.com.conf)
  • a2ensite网站.com.conf
  • apache2ctl
    (这样Apache就知道了不安全的URL)
  • letsencrypt--apache-dwebsite.com
    (这将生成整个-le ssl文件)
  • apache2ctl优雅

如果它能帮助某人:我也有同样的问题

在Apache中配置了多个网站。他们工作正常

我把它们移到了一个新服务器上。我不知道为什么(可能是默认ApacheConf中的一个差异),但它们开始像问题中解释的那样,像“指向”默认站点

原因是我没有服务器别名行将站点的“非www”名称转发到“www前缀”名称

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

因此,Apache没有找到服务器名,并试图将请求传递到默认站点

但是,因为我删除了000-default.conf文件的内容,所以请求被传递到第一个工作网站

因此,请确保您有:

  • 正在工作的000-default.conf文件
  • www前缀站点的服务器别名,如

    ServerAlias www.yourdomainname.com


我们还需要查看
:443
虚拟主机。我更新了解决方案以显示80和443虚拟主机。我的帖子被否决了??????????这就是为什么人们使用越来越少。我的帖子怎么了?为什么要投反对票当我做了我的研究后,我找不到任何解决问题的方法,我以清晰的方式适当地详细说明了我所做的尝试。你的帖子很好,这只是一个边缘话题,也许更适合于ServerFault。无论如何,似乎你是为clients.site2.com定义的no:443 VirtualHost,这解释了这种行为。感谢你的回复。我在这里找到了很多关于虚拟主机和apache的帖子。这就是我在这里发布的原因。从现在起,我将在serverfault上发布类似的问题。凯特,谢谢你的回复。我现在要尝试一下。我更新了解决方案,以显示
apache2ctl-S
的输出。您可以做的最干净的事情就是重新开始。对所有文件进行加密,然后慢慢地对每个非安全文件进行加密,看看是否工作正常,然后运行lets encrypt,然后使用正确配置的非安全配置文件。这对我来说很有效,感觉就像是在蛋壳上用两个工具(apache和lets encrypt)(明智地使用重命名文件来保证它们的安全)祝你们好运!是的,这就是为什么我每次启动一个live站点时都会设置上述程序,这似乎是唯一的途径…您可能还想同时删除证书,只是为了真正清理并重新开始。如果你还活着,这会增加压力,那么你必须更加小心,但这就是我所做的,虽然很痛苦。。