2.4に必要なファイルを更新しましたが、Web経由のファイルへのリモートアクセスがApache 2.2では機能しますが、2.4では機能しません。

2.4に必要なファイルを更新しましたが、Web経由のファイルへのリモートアクセスがApache 2.2では機能しますが、2.4では機能しません。

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

関連情報