首页 > 解决方案 > 为什么 Apache 忽略 :80 vhost 文件而只匹配 :443 vhost 文件中的站点?

问题描述

我有 2 个虚拟主机文件:1 个在端口 443 上包含我们所有站点的管理 URL,1 在端口 80 上包含我们所有站点的主 URL。
这两个文件都被 apache 知道,如 apachectl -S 所示。net stat 显示 Apache 在 :80 和 :443 上监听

我现在正在使用 MacBook 中的主机文件。

但是,只有与 443 vhost 文件中的 vhosts 行匹配的 URL 才有效。否则该站点将加载 443 vhost 文件中的第一个站点。(301 永久移动)

我什至尝试访问 site-name.com:80 - 但是 :80 vhost 文件中的所有站点 URL 都没有被 apache 匹配。我错过了什么?

编辑:添加代码

Listen 1xx.2xx.3xx.4xx:80在 httpd.conf 中定义

来自主站点 URL 的 vhost.conf(这个不工作)

NameVirtualHost *:80
<VirtualHost 1xx.2xx.3xx.4xx:80>
    ServerAdmin admin@site1.com
    ServerAlias www.site1.com 
    DocumentRoot /var/www/site1.com/public
    ServerName site1.com
    ErrorLog /var/log/httpd/site1.com-error_log
    CustomLog /var/log/httpd/site1.com-access_log common
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
<Directory /var/www/site1.com/public>
        Options FollowSymLinks
        AllowOverride All
        DirectoryIndex index.php
</Directory>
</VirtualHost>

来自管理站点的 sslvhost.conf(这个正在工作)

Listen 443 https

NameVirtualHost *:443

<VirtualHost *:443>
DocumentRoot "/var/www/site1.com/public"
ServerName site1.com
ServerAlias site1.com admin-site1.com

LogLevel warn

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"

SSLEngine on

SSLProtocol all -SSLv3 -SSLv2 -TLSv1 -TLSv1.1

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


<Directory /var/www/site1.com/public>
        Options FollowSymLinks
        AllowOverride All
        DirectoryIndex index.php
</Directory>
</VirtualHost>

标签: apachecentosredhatvhosts

解决方案


从配置看来,您缺少以下内容

Listen 80

您可以在下方添加它NameVirtualHost *:80


推荐阅读