Apache重定向到错误的虚拟主机

avwztpqn  于 2023-08-07  发布在  Apache
关注(0)|答案(2)|浏览(137)

我正在尝试设置两个虚拟主机,一个用于我的网站,另一个用于我的NextCloud示例。这就是我的配置文件的样子:
第一个月

<IfModule mod_ssl.c>
  <VirtualHost _default_:80>
    ServerName domain.com
    ServerAlias www.domain.com
    DocumentRoot "/var/www/html"
    CustomLog /var/log/apache2/nc-access.log combined
    ErrorLog  /var/log/apache2/nc-error.log
    SSLEngine on
    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
  </VirtualHost>
  <Directory /var/www/html/>
    Options +FollowSymlinks
    AllowOverride All
    <IfModule mod_dav.c>
      Dav off
    </IfModule>
    LimitRequestBody 0
    SSLRenegBufferSize 10486000
  </Directory>
</IfModule>

字符串
/etc/apache2/site-available/nextcloud.conf

<IfModule mod_ssl.c>
  <VirtualHost _default_:443>
    ServerName nextcloud.domain.com
    DocumentRoot "/var/www/nextcloud"
    CustomLog /var/log/apache2/nc-access.log combined
    ErrorLog  /var/log/apache2/nc-error.log
    SSLEngine on
    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
  </VirtualHost>
  <Directory /var/www/nextcloud/>
    Options +FollowSymlinks
    AllowOverride All
    <IfModule mod_dav.c>
      Dav off
    </IfModule>
    LimitRequestBody 0
    SSLRenegBufferSize 10486000
  </Directory>
</IfModule>


apache2ctl -S的输出,显示激活的主机:

VirtualHost configuration:
*:80                   domain.com (/etc/apache2/sites-enabled/000-default.conf:2)
*:443                  nextcloud.domain.com (/etc/apache2/sites-enabled/nextcloud.conf:2)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default 
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: 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


当我domain.com在浏览器中输入www.example.com时,我希望它加载/var/www/html,我的网站。但是,它加载了我的nextcloud(/var/www/nextcloud)示例。如何让domain.com重定向到我的网站而不是我的nextcloud示例?

6tr1vspr

6tr1vspr1#

您应该像这样修改您的配置(解释如下):

/etc/apache2/site-available/000-default.conf

<VirtualHost _default_:80>
    ServerName domain.com
    ServerAlias www.domain.com

    DocumentRoot "/var/www/html"

    CustomLog /var/log/apache2/80_nc-access.log combined
    ErrorLog  /var/log/apache2/80_nc-error.log

    <Directory /var/www/html/>
        Options +FollowSymlinks
        AllowOverride All
        <IfModule mod_dav.c>
            Dav off
        </IfModule>
        LimitRequestBody 0
    </Directory>
</VirtualHost>

字符串

/etc/apache2/site-available/nextcloud.conf

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerName nextcloud.domain.com

        DocumentRoot "/var/www/nextcloud"

        CustomLog /var/log/apache2/443_nc-access.log combined   
        ErrorLog  /var/log/apache2/443_nc-error.log

        SSLEngine on
        SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

        <Directory /var/www/nextcloud/>
            Options +FollowSymlinks
            AllowOverride All
            <IfModule mod_dav.c>
                Dav off
            </IfModule>
            LimitRequestBody 0
            SSLRenegBufferSize 10486000
        </Directory>

    </VirtualHost>
</IfModule>


变更

  • 在您的:80 VirtualHost中,您不应该有任何SSL指令。端口80用于http://连接。所以我删除了所有与SSL有关的内容。
  • 在你的:443 VirtualHost中,你想要有你的SSL指令。那就留着吧
  • <Directory>指令应包含在<VirtualHost>部分中。无论如何,这些只有在<VirtualHost>的上下文中才有意义。在httpd.conf中应该有一个通用的<Directory>,它无论如何都会阻止对所有目录的直接访问。
  • 我建议您为每个<VirtualHost>使用单独的日志文件。这是一个好习惯,相信我,我有一个Apache服务器,有20个主机,不可能弄清楚哪个日志条目是哪个。此外,您可能希望将SSL放在Debug日志中以解决某些问题...
  • 要到达第一个<VirtualHost>,请输入http://example.com
  • 要到达第二个<VirtualHost>,请输入https://example.com

这里没有重定向。只有<Virtualhost>名称和端口分配。Apache会查看您请求的内容(浏览器地址栏中的站点),并使用最符合您请求的<VirtualHost>。如果它找不到特定的一个,它将默认使用第一个。
这就解释了为什么如果你尝试https://example.com,Apache会根据端口选择<VirtualHost>。这里是端口443(https://)。所以Apache会用你的云<VirtualHost>来响应。这里的决定因素是端口,不是域名。

mkh04yzy

mkh04yzy2#

显然,Apache不喜欢从记事本上剪切和粘贴我清除了配置文件中的所有空白,然后一切都开始正常工作。
可能是空格之类的东西。也许是我的notepad
设置的编码。

相关问题