如何在Ubuntu上配置PHP的跨域资源共享
在Ubuntu上配置PHP的跨域资源共享有两种方法:修改php.ini全局配置(适合整个站点),或在PHP脚本中设置头信息(适合特定接口)。需注意生产环境应指定具体域名而非通配符*,并正确处理预检OPTIONS请求。
在Ubuntu上配置PHP的跨域资源共享(CORS),说白了就是告诉浏览器:“嘿,这个请求可以放行。”这事儿听着简单,但实际操作中,很多开发者会卡在配置路径或预检请求上。今天咱们就聊两种最常见的做法,你可以根据项目场景灵活选。

方法一:修改PHP配置文件
第一种思路是从全局层面搞定CORS,适合整个站点都需要跨域支持的情况。具体步骤不复杂:
先找到PHP的配置文件。通常叫
php.ini,但具体路径取决于PHP版本和Web服务器。比如用Apache和PHP 7.4,可以这样打开:sudo nano /etc/php/7.4/apache2/php.ini如果是Nginx或者不同PHP版本,路径会略有差异,别硬套。
在文件里找到
header("Access-Control-Allow-Origin: *");这一行,把前面的分号去掉,就启用了。当然,*意味着允许所有域名访问,生产环境最好改成具体的域名,比如:header("Access-Control-Allow-Origin: https://example.com");如果还需要控制允许的HTTP方法或请求头,可以一并加上:
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS"); header("Access-Control-Allow-Headers: Content-Type, Authorization");保存退出(
Ctrl+X,然后Y确认,Enter确认)。最后别忘了重启Web服务器,让配置生效。Apache用:
sudo systemctl restart apache2Nginx同理:
sudo systemctl restart nginx
方法二:在PHP脚本中设置CORS头
如果只想让特定API端点开放跨域,或者需要更灵活的控制,直接在PHP脚本里设置头信息会更方便。比如在一个控制器或入口文件里写:
注意这里有个细节:对于复杂请求(比如带自定义头或非简单HTTP方法),浏览器会先发一个OPTIONS预检请求。如果脚本里不处理这个请求,直接返回业务逻辑,那跨域就会失败。所以上面代码里专门用了一个if判断,收到OPTIONS就直接退出,让浏览器知道“服务器支持这个跨域配置”。
注意事项
- 安全第一:别图省事直接用
*,尤其是生产环境。指定具体的域名能有效防止恶意站点盗用你的接口。 - 预检请求别忽略:很多新手踩坑就是因为没处理OPTIONS请求。如果你的API有自定义头或者PUT/DELETE等方法,务必在代码里加上预检请求的处理逻辑。
两种方法各有适用场景:全局配置省心,适合整个站点;脚本内设置灵活,适合微服务或特定接口。根据项目需求选一个就行,别纠结。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













