AWS は Apache 経由でヘッダーを設定できません

AWS は Apache 経由でヘッダーを設定できません

Amazon Linux 2 AMI EC2 インスタンス上の Apache から HTTP 応答ヘッダーを送信しようとしています。 最初はこれを実行しようとしてhttpd.conf、いくつかのバリエーションを試しました...

confファイル

Header always set X-Frame-Options "SAMEORIGIN"

しかし、ヘッダーは設定されていません。そのため、おそらくどこかでリセットされるだろうと考えましたが、少なくとも.htaccess設定はできるはずなので、いくつかのバリエーションを試してみました...

.htaccess

Header set ApacheFoo ApacheBar
Header add Strict-Transport-Security "max-age=31104000; includeSubdomains"

しかし、どちらのヘッダーも設定されていません。

ただし、PHP を使用してヘッダーを設定すると、正常に動作します...

インデックス.php:

<?php
header("phpfoo: phpbar");
die(print_r(headers_list(), 1));

Chrome の DevTools にヘッダーが表示されていますphpfoo: phpbarが、Apache で直接設定されたヘッダーは何も設定されていません。

この.htaccessソリューションは、私のローカル Windows+Apache セットアップでは問題なく動作しますが、AWS では動作しません。そのため、この問題は AWS に固有のものであると想定しており、このプラットフォームに固有の、知っておく必要のある癖があるかどうか疑問に思っています。

より詳しい情報

ヘッダー モジュールは確実にロードされます。 を実行するとsudo httpd -S(このコマンドを実行するには を使用する必要があります。sudoまたは、SSL に必要なファイルへのアクセスに関する権限の問題があります.pem。Apache は正常に起動するので、権限が付与されていれば問題ないと思われます)、出力は次のようになります (ホスト固有の情報はアスタリスクに置き換えられています)。

VirtualHost configuration:
*:80                   *.com (/etc/httpd/conf/httpd.conf:44)
*:443                  is a NameVirtualHost
         default server ip-*-*-*-*.us-east-2.compute.internal (/etc/httpd/conf.d/ssl.conf:56)
         port 443 namevhost ip-*-*-*-*.us-east-2.compute.internal (/etc/httpd/conf.d/ssl.conf:56)
         port 443 namevhost *.com (/etc/httpd/conf/httpd-le-ssl.conf:2)
                 alias www.*.com
ServerRoot: "/etc/httpd"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/etc/httpd/logs/error_log"
Mutex authdigest-opaque: using_defaults
Mutex watchdog-callback: using_defaults
Mutex proxy-balancer-shm: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex authdigest-client: using_defaults
Mutex lua-ivm-shm: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex authn-socache: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/run/httpd/" mechanism=default
Mutex mpm-accept: using_defaults
Mutex cache-socache: using_defaults
PidFile: "/run/httpd/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="apache" id=48
Group: name="apache" id=48

答え1

これまでのところ、私の最善かつ唯一の答えは、「Amazon Linux 2 をあきらめる」です。

ヘッダーを設定して問題を回避できるのではないかと期待して、Nginx リバース プロキシを設定しようとして失敗した後 (Amazon Linux 2 にはmakeビルドに必要なユーティリティが不足しているようでmod_rpaf、これが最後の手段でした)、Ubuntu を使用して新しいインスタンスを作成し、Amazon Linux 2 で設定したすべての設定という長いプロセスを開始しました。ただし、Ubuntu では比較的簡単で混乱が少なく、全体的に作業に役立つチュートリアルが多数ありました。

最終的には、ボーナスとして Nginx をスタックに追加して、Apache へのリバース プロキシを設定することができ、Apache でヘッダーを設定する際に問題がまったくなくなりました。

この問題を抱えている人、または AWS を使用して Apache Web サーバーを実行することを検討している人に対して、私の経験からのアドバイスは次のとおりです。Amazon Linux 2 を使用しないでください。

Apache からのヘッダーの設定が単純に機能しないように見えるだけでなく (これは、PHP が常に動作している必要のない最新のセキュリティ機能を有効にする鍵です)、一般的に、Ubuntu ビルドを使用するとすべてがはるかに簡単で柔軟になります。Ubuntu ビルド用の優れた AWS ドキュメントはありませんが、インターネットの他の場所ではカバーされており、Amazon Linux 2 チュートリアルの AWS 固有の部分 (セキュリティ グループ、Elastic IP、および Route 53) を適用できます。

関連情報