
Estoy intentando enviar encabezados de respuesta HTTP desde Apache en una instancia EC2 AMI de Amazon Linux 2. Originalmente había intentado hacer esto httpd.conf
y probé algunas variaciones...
httpd.conf
Header always set X-Frame-Options "SAMEORIGIN"
Pero el encabezado no está configurado. Entonces pensé que tal vez se restablecerían en algún momento, pero al menos .htaccess
deberían poder configurarlos, así que probé un par de variaciones...
.htaccess
Header set ApacheFoo ApacheBar
Header add Strict-Transport-Security "max-age=31104000; includeSubdomains"
Pero nuevamente, ninguno de estos encabezados está establecido.
Sin embargo, si uso PHP para configurar los encabezados, funciona bien...
índice.php:
<?php
header("phpfoo: phpbar");
die(print_r(headers_list(), 1));
Tengo el phpfoo: phpbar
encabezado apareciendo en DevTools de Chrome, pero ninguno de los configurados directamente en Apache está configurado.
La .htaccess
solución funciona bien en mi propia configuración local de Windows+Apache, pero no en AWS, por lo que supongo que el problema es específico y me pregunto si hay alguna peculiaridad específica de esta plataforma que deba conocer.
Más información
El módulo de encabezados definitivamente está cargado. Si ejecuto sudo httpd -S
(tengo que usar sudo
para ejecutar este comando o hay un problema de permiso relacionado con el acceso a un .pem
archivo requerido para SSL, Apache comienza bien, así que supongo que esto no es un problema si está imbuido de sus permisos), este es el resultado (la información específica del host se reemplaza con asteriscos):
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
Respuesta1
Mi mejor y única respuesta hasta ahora es: renunciar a Amazon Linux 2.
Después de intentar y no poder configurar un proxy inverso de Nginx con la esperanza de poder configurar los encabezados y solucionar el problema (Amazon Linux 2 parece carecer de las make
utilidades necesarias para compilar mod_rpaf
; esta fue la gota que colmó el vaso), creé un nuevo Por ejemplo, usé Ubuntu y comencé un largo proceso de configuración de todo lo que había configurado en Amazon Linux 2; sin embargo, fue relativamente más fácil y menos confuso en Ubuntu y había muchos más tutoriales útiles con los que trabajar en general.
Al final, pude agregar Nginx a la pila como beneficio adicional, ya que tiene un proxy inverso para Apache, y ahora no hay ningún problema al configurar los encabezados en Apache.
Para otras personas que tienen este problema o que están considerando usar AWS para ejecutar un servidor web Apache, mi consejo a partir de esta experiencia es:¡No utilice Amazon Linux 2!
No sólo la configuración de encabezados desde Apache simplemente no parece funcionar (lo cual es clave para habilitar algunas características de seguridad modernas que no dependen del funcionamiento de PHP todo el tiempo), sino que en general todo es mucho más fácil y flexible usando una compilación de Ubuntu. No hay buenos documentos de AWS para la compilación de Ubuntu, pero el resto de Internet lo tiene cubierto y puede aplicarle las partes específicas de AWS (grupos de seguridad, IP elástica y ruta 53) del tutorial de Amazon Linux 2.