AWS не может устанавливать заголовки через Apache

AWS не может устанавливать заголовки через Apache

Я пытаюсь отправить заголовки ответа HTTP из Apache на экземпляре Amazon Linux 2 AMI EC2. Первоначально я пытался сделать это httpd.confи пробовал несколько вариантов...

httpd.conf

Header always set X-Frame-Options "SAMEORIGIN"

Но заголовок не установлен. Поэтому я подумал, что, возможно, они сбрасываются где-то в конце строки, но, по крайней мере, .htaccessдолжна быть возможность их установить, поэтому я попробовал пару вариантов...

.htaccess

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

Но опять же, ни один из этих заголовков не установлен.

Однако если я использую PHP для установки заголовков, то все работает нормально...

index.php:

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

У меня phpfoo: phpbarзаголовок отображается в DevTools Chrome, но ни один из тех, что установлены непосредственно в Apache, не был установлен.

Решение .htaccessотлично работает на моей локальной установке Windows+Apache, но не на AWS, поэтому я предполагаю, что проблема специфична для этой платформы, и мне интересно, есть ли какие-то особенности, характерные для этой платформы, о которых мне нужно знать?

Больше информации

Модуль заголовков определенно загружен. Если я запускаю sudo httpd -S(мне нужно использовать sudoдля запуска этой команды или есть проблема с разрешением на доступ к .pemфайлу, необходимому для SSL, 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, мой совет на основе этого опыта:не используйте Amazon Linux 2!

Не только настройка заголовков из Apache, похоже, просто не работает (что является ключом к включению некоторых современных функций безопасности, которые не зависят от постоянной работы PHP), но в целом все гораздо проще и гибче, используя сборку Ubuntu. Для сборки Ubuntu нет хорошей документации AWS, но остальная часть интернета вам поможет, и вы можете применить к ней специфичные для AWS части (группы безопасности, эластичный IP и маршрут 53) руководства Amazon Linux 2.

Связанный контент