温馨提示×

centos apache怎么跨域

小樊
34
2026-10-26 11:38:59
栏目: 智能运维

在 CentOS 上的 Apache 实现跨域(CORS),本质上是在 Apache 配置中设置正确的 HTTP 响应头。下面按常见场景给你说明。


一、最常用方式(推荐):修改 Apache 配置

1️⃣ 开启 headers 模块

sudo httpd -M | grep headers

如果没有 headers_module,开启它:

sudo vi /etc/httpd/conf/httpd.conf

取消注释:

LoadModule headers_module modules/mod_headers.so

2️⃣ 在虚拟主机或目录中设置 CORS

示例 1:允许所有域名跨域(开发环境)

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

    Header set Access-Control-Allow-Origin "*"
</VirtualHost>

示例 2:只允许指定域名

Header set Access-Control-Allow-Origin "https://www.example.com"

3️⃣ 支持带 Cookie / 认证请求

Header set Access-Control-Allow-Origin "https://www.example.com"
Header set Access-Control-Allow-Credentials "true"

⚠️ 注意:
Allow-Origin 不能为 *,必须是具体域名。


4️⃣ 支持复杂请求(PUT / DELETE / JSON)

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 预检请求(非常重要)

浏览器在复杂请求前会先发 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>

三、使用 .htaccess(不想改主配置时)

确保 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"

四、重启 Apache

sudo systemctl restart httpd

五、验证是否成功

curl -I https://your-domain.com/api

应看到:

Access-Control-Allow-Origin: *

六、常见坑

❌ 前端报错 CORS policy → Apache 没返回头
❌ 带 Cookie 还用 * → 浏览器直接拒绝
❌ OPTIONS 返回 403 → 没处理预检请求


如果你愿意,可以告诉我:

  • Apache 版本
  • 是 API 还是静态资源
  • 是否带登录态 / Token

我可以给你完全贴合你场景的配置。

0 踩