
Я пытаюсь отправить заголовки ответа 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.