web-dev-qa-db-ja.com

Apacheディレクトリのインデックス作成がサブディレクトリで機能しない

私はシンプルなファイルサーバー(centos 7上のApache 2.4)を使用しています。/index.html-ここにディレクトリリストがないことを確認するページ/ upload-アップロード用のphpスクリプト/ storage-ファイルのベースディレクトリ/ storage/upload-php/storage/publicによってアップロードされたファイル-パスワードで保護されていないファイル

ディレクトリ一覧を機能させることができません。たとえば、/ storage/publicには/index.htmlページがあります。/storage/publicにindex.htmlはありません。このページを削除すると、デフォルトのApache "testing 123"ページが/ページに表示され、ディレクトリリストは/ storage/public(および+ Indexesを持つ他のすべての場所)で機能します。 /index.htmlが/ storage/public /に表示される理由

<IfModule mod_ssl.c>
<VirtualHost *:443>
  DocumentRoot "/home/webroot/www"
  ServerName subdomain.example.com

  ErrorLog "/home/rootdir/log/subdomain.error.log"
  CustomLog "/home/rootdir/log/subdomain.access.log" common

  SuexecUserGroup user Apache

#Set caching on image files for 11 months
<filesMatch "\.(ico|gif|jpg|png|js|css)$">
  #ExpiresActive On
  #ExpiresDefault "access plus 11 month"
  Header append Cache-Control "public"
</filesMatch>

  <Directory "/home/webroot/www" >
    AllowOverride None
    Options -ExecCGI -Indexes +Includes +SymLinksIfOwnerMatch +MultiViews

    Require all granted
  </Directory>
  <Directory "/home/webroot/www/storage/upload" >
    AllowOverride None
    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /home/rootdir/.htpasswd
    Require valid-user
    <FilesMatch "\.php$">
      SetHandler "proxy:unix:/usr/local/php73/var/run/php-fpm.sock|fcgi://localhost/"
    </FilesMatch>

  </Directory>
  <Directory "/home/webroot/www/storage/" >
    AllowOverride None
    Options +Indexes +SymLinksIfOwnerMatch +MultiViews

    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /home/rootdir/.htpasswd
    Require valid-user
    #Require all granted
    RemoveType .php

    Order allow,deny
    Allow from all
  </Directory>

  <Directory "/home/webroot/www/storage/public" >
    Options +Indexes +SymLinksIfOwnerMatch +MultiViews
    AuthType None
    Require all granted
    Satisfy Any
  </Directory>

  <Directory "/home/webroot/www/.well-known" >
    AuthType None
    Require all granted
    Satisfy Any
    Allow from all
  </Directory>

  <Directory "/home/webroot/www/storage/upload" >
    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /home/rootdir/.htpasswd
    Require valid-user
  </Directory>

  <IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript
  </IfModule>


Include /etc/letsencrypt/options-ssl-Apache.conf
SSLCertificateFile /etc/letsencrypt/live/subdomain.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/subdomain.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/subdomain.example.com/chain.pem

</VirtualHost>
</IfModule>

更新:

# apachectl -M|grep autoindex
 autoindex_module (shared)

別の仮想ホストには次の問題があります:私が使用する仮想ホストのルートフォルダーにindex.htmlがあります

Options -ExecCGI -Indexes

したがって、サブディレクトリ/ testがあり、別のindex.htmlを配置しましたが、ブラウザで/ test /を開くと、/ test/index.htmlではなく/index.htmlが表示されます

このvhostにはPHPはありません。

1
NickSoft

問題は私がからグローバル設定を変更したことでした

DirectoryIndex index.php index.html

to

DirectoryIndex /index.php index.php /index.html index.html

別の問題を修正するために-次のようなProxyPassMatchディレクティブでphp fpmサーバーを使用します。

ProxyPassMatch ^/(.*.php(/.*)?)$ unix:/path/to/php-fpm.sock|fcgi://localhost/home/userdir/www/$1

Apache.orgで読んだとおり。 ProxyPassMatchとindex.phpを使用すると、Apacheがindex.htmlをロードしないという問題( 別の同様の問題

グローバルディレクティブを復元します。

DirectoryIndex index.php index.html

問題を修正しましたが、vhostにProxyPassMatchがあり、index.phpがない場合にApacheがindex.htmlにフォールバックしない場合にも問題が発生します。

今私は誰かに賞金を授与しなければなりません。 2つの答えに分けられない場合は、少し問題に近いと思うのでlittle_dogに与えます。

1
NickSoft

リストされた問題は、関係するフォルダーのアクセス許可に問題があるという印象を与えます。

チェックする権限にはいくつかの種類があります。

  • httpdのユーザー/グループを処理する:

    • ps axo pid,user,group,commを使用
  • ファイルシステムの権限:

    • ユーザー、グループ、読み取り、書き込み、実行フラグ(ls -lおよびls -lRls -ldを使用)
  • SELinux権限:

    • centOSで可能性の高いアクティブな場合(sestatusを使用してステータスとモードを確認)
    • ファイル許可コンテキスト(ls -lZおよびls -lRZls -ldZを使用)
    • httpd SELinuxコンテキスト(ps -axZ | grep httpdを使用)
    • SELinuxブール値(getsebool -a | grep httpdを使用)
    • ディレクトリリストを生成しようとしているときに監査ログを確認します(tail -f /var/log/audit/audit.logを使用)
1
hargut

有効化されたautoindexモジュールがあるかどうかを確認するには、次のようにします。apachectl -Mは、

Loaded Modules:
...
autoindex_module (shared)
...

そうでない場合は、有効にする必要があります。Centosで次を参照してください。 https://unix.stackexchange.com/questions/258854/disable-and-enable-modules-in-Apache-centos7

アップデート#1

ディレクトリリストが機能する場合、ディレクトリにindex.htmlを含めることはできません。次のことを確認してください https://cwiki.Apache.org/confluence/display/httpd/DirectoryListings

DirectoryIndexディレクティブのファイルをディレクトリに配置できない場合、mod_autoindexはディレクトリの内容のリストを生成できます。

0
little_dog