AWS não pode definir cabeçalhos via Apache

AWS não pode definir cabeçalhos via Apache

Estou tentando enviar cabeçalhos de resposta HTTP do Apache em uma instância Amazon Linux 2 AMI EC2. Eu originalmente tentei fazer isso httpd.confe tentei algumas variações ...

httpd.conf

Header always set X-Frame-Options "SAMEORIGIN"

Mas o cabeçalho não está definido. Então imaginei que talvez eles fossem redefinidos em algum momento, mas pelo menos .htaccessdeveriam ser capazes de configurá-los, então tentei algumas variações...

.htaccess

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

Mas, novamente, nenhum desses cabeçalhos está definido.

No entanto, se eu usar PHP para definir os cabeçalhos, funciona bem...

index.php:

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

O phpfoo: phpbarcabeçalho aparece no DevTools do Chrome, mas nenhum dos definidos diretamente no Apache foi definido.

A .htaccesssolução funciona bem em minha própria configuração local do Windows + Apache, mas não na AWS, então presumo que o problema seja específico dela e estou me perguntando se há alguma peculiaridade específica desta plataforma que eu preciso saber.

Mais informações

O módulo Headers está definitivamente carregado. Se eu executar sudo httpd -S(tenho que usar sudopara executar este comando ou há um problema de permissão relacionado ao acesso a um .pemarquivo necessário para SSL, o Apache inicia bem, então presumo que isso não seja um problema se estiver imbuído de suas permissões), esta é a saída (informações específicas do host substituídas por 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

Responder1

Minha melhor e única resposta até agora é: desista do Amazon Linux 2.

Depois de tentar e não conseguir configurar um proxy reverso Nginx nele, na esperança de que pudesse definir os cabeçalhos e solucionar o problema (o Amazon Linux 2 parece não ter os makeutilitários necessários para construir mod_rpaf- esta foi a gota d'água), criei um novo Por exemplo, usando o Ubuntu e iniciei um longo processo de configuração de tudo o que havia configurado no Amazon Linux 2, no entanto, foi relativamente mais fácil e menos confuso no Ubuntu e havia muito mais tutoriais úteis para trabalhar em geral.

No final, acabei conseguindo adicionar o Nginx à pilha como um bônus, tendo-o como proxy reverso para o Apache, e agora não há nenhum problema ao definir cabeçalhos no Apache.

Para outras pessoas que estão tendo esse problema ou que estão considerando usar a AWS para executar um servidor web Apache, meu conselho com esta experiência é:não use Amazon Linux 2!

A configuração de cabeçalhos do Apache não apenas parece não funcionar (o que é fundamental para ativar alguns recursos de segurança modernos que não dependem do funcionamento do PHP o tempo todo), mas em geral tudo é muito mais fácil e flexível usando uma versão do Ubuntu. Não existem bons documentos da AWS para a construção do Ubuntu, mas o resto da Internet tem tudo para você e você pode aplicar as partes específicas da AWS (grupos de segurança, IP elástico e rota 53) do tutorial do Amazon Linux 2 a ele.

informação relacionada