Apache 2.2から2.4に移行していますが、ドキュメントルートにないファイルにアクセスできなくなりました。これは古典的なエイリアシング問題です。この問題について矛盾する記事をたくさん読んで、公式のApacheドキュメントで提案されているようにエイリアスの使用を変更しましたが、それでも機能しません。問題を解決するために、ロギングレベルを最も冗長に設定しました。つまり、/etc/apache2/sites-enabled/000-default.conf および /etc/apache2.conf でデバッグを行いました。
両方のコンピュータの/var/tmpにあるfoo.txtにアクセスしたいWebページがあります。 2.2ではうまくアクセスできますが、2.4を使用しているこのサーバーでは要求されたURLが見つかりませんでしたというエラーが発生します。フォルダにアクセスするには、2.2では/etc/apache2/sites-enabled/default.conf、2.4では000-default.confのエイリアスを使用しており、ディレクトリブロックにフォルダを定義しました。
私はこれを2.4の000-default.confで使用します:
'''<VirtualHost *:8000> ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/tmp/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
Header set Access-Control-Allow-Origin "*"
</Directory>
Alias /Dummy/ /var/tmp/
LogLevel debug
「」
私は問題が権限であるかもしれないと思いました。なぜなら、それは一般的に問題だからです。 2.2システムでは、フォルダにはルートのみがあり、うまく動作します(ls -all -d /var/tmp)。
drwxrwxrwt 6ルートルート2200 10月24日16:41 /var/tmp
そして(ls -all /var/tmp/foo.txt):
-rw-r--r-- 1ルートルート805 10月24日16時42分 foo.txt
私がアクセスしたいフォルダのファイルに移動します。
2.4システムでは動作しなかったため、フォルダに対して次のことを試しました。
drwxrwxrwt 9 www-data www-data 1440 10月24日 16:44 /var/tmp
そのフォルダからアクセスしたいファイルは次のとおりです。
-rw-r--r-- 1 www-data www-data 836 10月24日 16:45 foo.txt
最初の例は 2.2 で正しく実行されますが、2 番目の例は 2.4 で失敗し、次の結果が表示されます。
見つかりません。要求されたURLがこのサーバーに見つかりません。
/var/log/apache2/access.log から以下を取得します。
IPアドレス - - [24/Oct/2020:16:47:02 -0400] "GET /Dummy/foo.txt HTTP/1.1" 404 497 "-" "Mozilla/5.0(Windows NT 6.0) AppleWebKit/537.36(KHTML) ))、Geckoなど)Chrome / 49.0.2623.112 Safari / 537.36 "
/var/log/apache2/error.log から以下を取得します。
''' [Sat Oct 24 16:52:01.154485 2020] [authz_core:debug] [pid 32675] mod_authz_core.c(820): [クライアント IP アドレス: 34306] AH01626: フル承認が必要
[Sat Oct 24 16:52:01.155003 2020] [authz_core:debug] [pid 32675] mod_authz_core.c(820): [クライアント IP アドレス:34306] AH01626: 認証結果: 承認済み
[2020年10月24日土曜日16:52:01.155659] [core:info] [pid 32675] [クライアントIPアドレス:34306] AH00128:ファイルが存在しません:/var/tmp/foo.txt '''
私が使用するURLは次のとおりです。
http://IPアドレス:8000/Dummy/foo.txt
エイリアスに末尾/を保持しようとしましたが、見つからないという代わりに権限エラーが発生し、末尾/を復元しました。設定ファイルが変更されるたびにapache2を再起動します。
はい、ターゲットファイルが存在します。まだデフォルトの.htaccessファイルに触れていません。
この問題をどのように解決できますか? ? ?
答え1
私はあなたがapache 2.4に変更するだけでなく、apache 2.4がsystemdによって実行され、apache2.service systemdファイルに含まれている意味を含んでいると思います。これはシステムとは別に独自のものPrivateTmp=true
になります(参照/tmp
/var/tmp
システムの実行(5))。
Apacheが見るものは/var/tmp
実際に存在します/var/tmp/systemd-private-<long hash>-apache2.service-f00WPn/tmp
回避策は、ディレクティブを無効にするか、ファイルを別のフォルダに配置することです。ファイルが別のデーモンによって生成された場合は、JoinsNamespaceOf=
ディレクティブを使用して両方のデーモンに同じ/tmp
ファイルを共有させることができます。/var/tmp