Erro 500 ao usar Header set Access-Control-Allow-Origin “*” no Apache

Se você tentou liberar o CORS com:

Header set Access-Control-Allow-Origin "*"

e recebeu um erro 500 Internal Server Error, esta é a explicação técnica e como resolver.


Causa do erro

O Apache retorna erro 500 quando:

  1. O módulo mod_headers não está ativado.
  2. A diretiva Header é usada em um contexto onde não é permitida (como <Directory> sem configuração adequada).

Correção

1. Ativar o módulo mod_headers

Execute:

a2enmod headers
systemctl restart apache2

2. Usar a diretiva Header no local apropriado

Locais permitidos para Header set:

  • Dentro de .htaccess
  • Dentro de <VirtualHost>
  • Dentro de <Location>
  • Dentro de <Files>

Evite usar diretamente dentro de <Directory> a menos que esteja com AllowOverride adequado.

Exemplo correto dentro de um VirtualHost:

<VirtualHost *:80>
    ServerName exemplo.com
    DocumentRoot /var/www/html

    Header set Access-Control-Allow-Origin "*"

    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Exemplo usando .htaccess:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

3. Garantir que AllowOverride está habilitado (caso use .htaccess)

<Directory /var/www/html>
    AllowOverride All
</Directory>

4. Reiniciar o Apache

systemctl restart apache2

Como investigar o erro 500

Para descobrir a causa exata:

tail -f /var/log/apache2/error.log

O log de erro geralmente entrega a razão precisa da falha.

Rolar para cima