- 我对 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 服务器生效。VirtualHost
ServerName myweb
VirtualHost