两个 VirtualHost 网站在 Apache 2.4 下无法协同工作

两个 VirtualHost 网站在 Apache 2.4 下无法协同工作

我在 Ubuntu 18.04 下运行 Apache 2.4

我遇到了这个问题,我在浏览器栏上输入的所有地址都会被重定向到我已经配置了两个网站(在这种情况下,每当我输入应该重定向到的地址时other-site,我只会显示下面的网站jekyll。)

例如:

  • 在浏览器上输入内容jekyll,正如预期的那样,显示了 jekyll 网站
  • other-site在浏览器上打字还向我展示了 jekyll 网站,即使有另一个 VirtualHost 正在监听该名称

我有这些两个独立的站点配置为 VHost /etc/apache2/sites-available(两者均已启用通过a2ensite

  • jekyll.conf

    <VirtualHost *:80>
          DirectoryIndex index.html
          DocumentRoot /var/www/jekyll/_site
          LimitRequestFieldSize 48000
           <Directory />
                  Options FollowSymLinks
                  AllowOverride None
          </Directory>
          <Directory /var/www/jekyll/_site>
                  AllowOverride All
                  Order allow,deny
                  allow from all
          </Directory>
          <Directory /var/www/jekyll/_site/>
                  Order allow,deny
                  allow from all
          </Directory>
    
          ServerName jekyll
          ServerName http://jekyll
          ServerName http://localhost/jekyll
    
          ServerAdmin webmaster@localhost
    </VirtualHost>
    
  • 其他站点配置文件

    <VirtualHost *:80>
          DirectoryIndex index.html
          DocumentRoot /var/www/other-site/_site
          LimitRequestFieldSize 48000
           <Directory />
                  Options FollowSymLinks
                  AllowOverride None
          </Directory>
          <Directory /var/www/other-site/_site>
                  AllowOverride All
                  Order allow,deny
                  allow from all
          </Directory>
          <Directory /var/www/other-site/_site/>
                  Order allow,deny
                  allow from all
          </Directory>
    
          ServerName other-site
          ServerName http://other-site
          ServerName http://localhost/other-site
    
          ServerAdmin webmaster@localhost
    
    </VirtualHost>
    

我还添加了这些条目,/etc/hosts以便本地主机重定向到每个站点:

127.0.0.1       localhost
127.0.0.1       localhost/jekyll
127.0.0.1       localhost/other-site
127.0.0.1       jekyll
127.0.0.1       other-site
127.0.1.1       felipe-Inspiron-7559

答案1

Apache 配置文件中的属性ServerName不需要重复,因为每个后续行都会替换前面的行。

相反,你可以ServerNameServerAlias这样使用:

ServerName jekyll
ServerAlias jekyll.local *.jekyll *.jekyll.local

请注意,这是不合逻辑的:

127.0.0.1       localhost/jekyll
127.0.0.1       localhost/other-site

这些不是域(或子域),而是 下的路径localhost。因此,只会localhost观察到 。这就是为什么我没有将其包含在 Apache 配置中(如上所述)。

因此,考虑到这一点,你可以Apache 配置文件:

000-jekyll.conf

<VirtualHost *:80>
      ServerAdmin webmaster@localhost
      ServerName jekyll
      ServerAlias jekyll.local *.jekyll *.jekyll.local

      DirectoryIndex index.html
      DocumentRoot /var/www/jekyll/_site
      LimitRequestFieldSize 48000

      <Directory /var/www/jekyll/_site>
          Options FollowSymLinks
          AllowOverride All
          Order allow,deny
          Allow from all
      </Directory>

      ErrorLog ${APACHE_LOG_DIR}/jekyll-error.log
      CustomLog ${APACHE_LOG_DIR}/jekyll-access.log combined
</VirtualHost>

001-other.conf

<VirtualHost *:80>
      ServerAdmin webmaster@localhost
      ServerName other-site
      ServerAlias other-site.local *.other-site *.other-site.local

      DirectoryIndex index.html
      DocumentRoot /var/www/other-site/_site
      LimitRequestFieldSize 48000

      <Directory /var/www/other-site/_site>
          Options FollowSymLinks
          AllowOverride All
          Order allow,deny
          Allow from all
      </Directory>

      ErrorLog ${APACHE_LOG_DIR}/other-error.log
      CustomLog ${APACHE_LOG_DIR}/other-access.log combined
</VirtualHost>

999-default.conf

<VirtualHost *:80>
      ServerAdmin webmaster@localhost
      ServerName localhost
      ServerAlias *.localhost * *.*

      DirectoryIndex index.html
      DocumentRoot /var/www
      LimitRequestFieldSize 48000

      <Directory /var/www>
          Options FollowSymLinks
          AllowOverride All
          Order allow,deny
          Allow from all
      </Directory>

      ErrorLog ${APACHE_LOG_DIR}/local-error.log
      CustomLog ${APACHE_LOG_DIR}/local-access.log combined
</VirtualHost>

Apache 根据配置文件的顺序处理流量。因此,任何与 中指定的域匹配的域000-jekyll.conf都将由该文件处理。如果未找到匹配项,则将001-other.conf检查。如果未找到匹配项,则将999-default.conf使用。请注意文件ServerAlias中的999-default.conf以及它如何依赖于开放通配符。这意味着它将被视为与定义的配置文件不匹配的流量的捕获器。

笔记:Apache 配置文件经过简化,消除了不相关的Directory块,并让每个主机使用自己的错误日志。

相关内容