web-dev-qa-db-ja.com

サーバーレベルではなく、Apacheサーバー上のロケーション/ディレクトリに固有の<Location>ディレクティブを設定するにはどうすればよいですか?

  • Apacheサーバー構成は初めてです。
  • 私はApacheのドキュメントを読み、基本とディレクティブを理解しようとしました。
  • しかし、それでも、現在のシナリオに必要な構成を理解することはできません。
  • 私のApacheサーバーのバージョンは、Cent OS 7.5で実行されている2.4.6です。

私の現在の「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>

問題:

  • 上記の設定によると、ブラウザのURLに「 http:// myweb / 」と入力すると、<Location>ディレクティブで設定されているShibboleth認証が呼び出されます。
  • しかし同時に、"/var/www/html/"フォルダーで他のWebサイトをホストしている場合、たとえば"demo"websiteと言います。
  • http://127.0.0.1/demo/index.html を使用してdemo Webサイトにアクセスしようとすると、<Location />構成のため、Shibboleth認証も呼び出されます。そして、私はそれを望んでいません。
  • <Location>"/var/www/html/myweb/"に対してのみ機能させたい。

私が試したもの:

  • <Location /myweb>-機能しない
  • <Location><VirtualHost>をネストする-機能しない

  • 何が間違っているのかわかりません。
  • どんなアイデア/提案/解決策/正しい方向も大歓迎です。
1
Ankit Prajapati

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であり、デモではなく、mywebではないことに注意してください)でサイトにアクセスしている場合は、最初のサイトを取得します。

1
toppledwagon

http://myweb/demo/http://myweb/のサブフォルダであるため、<Location />はそれをカバーします。

<Location />ビットをServerName mywebを使用してVirtualHostブロック内に配置する必要があります。 VirtualHostの外にあるということは、すべてのApacheサーバーで有効になることを意味します。

0
ablackhat