如何配置指令特定于 Apache 服务器上的位置/目录而不是服务器级别?

如何配置指令特定于 Apache 服务器上的位置/目录而不是服务器级别?
  • 我对 Apache 服务器配置还不熟悉。
  • 我阅读了 Apache 文档并尝试了解基础知识和指令。
  • 但我仍然无法找出当前场景所需的配置。
  • 我的 Apache 服务器版本是 2.4.6,运行于 Cent OS 7.5 上。

我当前的“httpd.conf”文件。(仅包含重要部分)

ServerRoot "/etc/httpd"
Listen 80
ServerAdmin root@localhost
ServerName 127.0.0.1

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/var/www/html"

<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>


<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<Location />
    AuthType shibboleth
    ShibRequireSession On
    Require valid-user
</Location>

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/html/mywebsitecontent/"
    ServerName myweb
</VirtualHost>

问题:

  • 根据上述配置,输入“http://我的网站/“浏览器 URL 中的”将按照<Location>指令中的配置调用 Shibboleth 身份验证。
  • 但同时,如果我在"/var/www/html/"文件夹中托管任何其他网站,例如"demo"网站。
  • 现在如果尝试demo使用http://127.0.0.1/demo/index.html,它还会因为<Location />配置而调用 Shibboleth 身份验证。我不想这样。
  • 我希望<Location>仅适用于"/var/www/html/myweb/"

我尝试过的:

  • <Location /myweb>- 不工作
  • 嵌套<Location>-<VirtualHost>不工作

  • 我不知道我做错了什么。
  • 任何想法/建议/解决方案/正确的方向都将不胜感激。

答案1

根据https://httpd.apache.org/docs/2.4/mod/core.html#location

<Location> sections operate completely outside the filesystem. This
has several consequences. Most importantly, <Location> directives
should not be used to control access to filesystem locations. Since
several different URLs may map to the same filesystem location, such
access controls may by circumvented.

我认为你想要更接近这个的东西:

<Directory "/var/www/html/myweb/">
    AuthType shibboleth
    ShibRequireSession On
    Require valid-user
</Directory>
<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/html/mywebsitecontent/"
    ServerName myweb
</VirtualHost>

编辑:我认为您想为演示站点添加另一个特定的 VirtualHost。

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/html/demo/"
    ServerName demo
</VirtualHost>
<VirtualHost *:80>
    <Directory "/var/www/html/myweb/">
        AuthType shibboleth
        ShibRequireSession On
        Require valid-user
    </Directory>
    ServerAdmin [email protected]
    DocumentRoot "/var/www/html/mywebsitecontent/"
    ServerName myweb
</VirtualHost>

请注意,默认 VirtualHost 位于顶部。因此,如果您使用http://127.0.0.1/(请注意,ServerName 将是 127.0.0.1,而不是 demo,也不是 myweb)您将获得第一个。

答案2

http://myweb/demo/是的子文件夹,http://myweb/因此您的<Location />封面是那样。

您需要将位放入带有 的块<Location />内。放在任何块之外意味着它将对您的整个 Apache 服务器生效。VirtualHostServerName mywebVirtualHost

相关内容