apache 默认虚拟主机不起作用

apache 默认虚拟主机不起作用

我在我的vps上建立了两个网站,一个是http网站example2.com,另一个是https网站example1.com:

Listen 80
Listen 443

<virtualhost *:443>
ServerName example1.com
DocumentRoot "/var/www/example1.com"
</virtualhost>

<virtualhost *:80>
ServerName example2.com
DocumentRoot "/var/www/example2.com"
</virtualhost>

现在如果我访问http://example1.com,我实际上打开http://example2.com。如何阻止这种情况?我想http://example1.com无法访问。我尝试添加默认虚拟主机,希望http://example1.com将打开文件 /var/www/default/index.html,但这没有帮助。http://example1.com总是重定向到http://example2.com

Listen 80
Listen 443

<virtualhost *>
DocumentRoot "/var/www/default"
</virtualhost>

<virtualhost *:443>
ServerName example1.com
DocumentRoot "/var/www/example1.com"
</virtualhost>

<virtualhost *:80>
ServerName example2.com
DocumentRoot "/var/www/example2.com"
</virtualhost>

答案1

现在如果我访问http://example1.com,我实际上打开http://example2.com

这是因为端口 80 和端口 443 不能自动互换。一般来说,没有机制可以自动将请求从一个端口重定向到另一个端口,除非您在服务器本身上指定此行为(请注意,这不包括强制 HTTPS 连接的某些浏览器插件或功能)。

我想http://example1.com不可访问[。]

这是正确的。除非您在该域的端口 80 上定义 HTTP 虚拟主机,否则它不存在,因此无法访问(忘记“默认”主机)。我假设您已定义示例1.com在您的“hosts”文件或DNS中也是如此。

我尝试添加一个默认虚拟主机 [...] 但没有帮助。

您的配置可能存在其他问题。但是,您最可能需要(至少开始时)的是与http://example1.com

Listen 80
Listen 443

# Virtual Hosts For Basic HTTP Services

<VirtualHost *:80>

  ServerName example1.com

  # We can use * to catch all sub-domains other than e.g. www
  # ServerAlias www.example1.com *.example1.com

  ServerAlias www.example1.com

  # DocumentRoot "/var/www/example1.com"
  # DocumentRoot "/var/www/default"

  # If we get any requests on port 80 for example1.com 
  # redirect them to e.g. http://www.example1.com:443/

  Redirect permanent / http://www.example1.com:443/

</VirtualHost>

# This is not an SSL (HTTPS) virtual host

<VirtualHost *:443>
  ServerName example1.com
  DocumentRoot "/var/www/example1.com"
</VirtualHost>

# Our other domain

<VirtualHost *:80>
  ServerName example2.com
  DocumentRoot "/var/www/example2.com"
</VirtualHost>

答案2

当您使用 http:// 时,您将连接到端口 80。在端口 80 上只有 example2.com,它处理对端口 80 的所有请求。尝试使用:

https://example1.com

https 默认连接到端口 443。您可以通过指定端口来覆盖默认值。

http://example1.com:443/

相关内容