在 CentOS 上的 Apache 实现跨域(CORS),本质上是在 Apache 配置中设置正确的 HTTP 响应头。下面按常见场景给你说明。
sudo httpd -M | grep headers
如果没有 headers_module,开启它:
sudo vi /etc/httpd/conf/httpd.conf
取消注释:
LoadModule headers_module modules/mod_headers.so
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
Header set Access-Control-Allow-Origin "*"
</VirtualHost>
Header set Access-Control-Allow-Origin "https://www.example.com"
Header set Access-Control-Allow-Origin "https://www.example.com"
Header set Access-Control-Allow-Credentials "true"
⚠️ 注意:
Allow-Origin 不能为 *,必须是具体域名。
Header set Access-Control-Allow-Origin "https://www.example.com"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"
浏览器在复杂请求前会先发 OPTIONS,Apache 必须正确响应:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
</IfModule>
或者直接:
Header always set Access-Control-Allow-Origin "*"
<LimitExcept GET POST>
Require all granted
</LimitExcept>
确保 AllowOverride All:
<Directory "/var/www/html">
AllowOverride All
</Directory>
.htaccess 内容:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type"
sudo systemctl restart httpd
curl -I https://your-domain.com/api
应看到:
Access-Control-Allow-Origin: *
❌ 前端报错 CORS policy → Apache 没返回头
❌ 带 Cookie 还用 * → 浏览器直接拒绝
❌ OPTIONS 返回 403 → 没处理预检请求
如果你愿意,可以告诉我:
我可以给你完全贴合你场景的配置。