gpt4 book ai didi

Docker PHP 访问控制允许来源 CORS

转载 作者:行者123 更新时间:2023-12-02 20:35:49 25 4
gpt4 key购买 nike

我想在默认的 PHP Docker 容器 ( https://hub.docker.com/_/php ) 上永久启用 CORS。 docker-compose.yaml 或 docker-compose.yaml 中的配置是什么?

这是来自 ReactJS 的 axios 请求

  class App extends React.Component {
... getUsers() {

axios.get(`http://127.0.0.1:8000/index.php/api`).then(res => {

this.setState({ users: res.data });

console.log(state.users);

// this.setState({ users });

});

}

错误:从来源“http://127.0.0.1:8080”访问位于“http://127.0.0.1:8000/index.php/api”的 XMLHttpRequest 已被 CORS 策略阻止:无“Access-Control-” Allow-Origin' header 出现在请求的资源上。

docker-compose.yaml

version: '3.3'
services:
web:
build:
context: ./php
dockerfile: Dockerfile
container_name: php74
depends_on:
- db
volumes:
- ./php:/var/www/html/
ports:
- 8000:80
db:
container_name: mysql8
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_db
MYSQL_USER: devuser
MYSQL_PASSWORD: devpass
ports:
- 3306:3306

docker 文件:

FROM php:7.4-apache
RUN apt-get update && apt-get upgrade -y
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
EXPOSE 80

最佳答案

需要在图中的apache配置中添加相关的header。您还需要启用 mod_headers,因为它在您的图像中不是默认的。我使用了与 php docker image documentation 中描述的技术类似的技术。 (在页面上搜索“更改 DocumentRoot(或其他 Apache 配置)”)。

这是一个可能的 Dockerfile。我还添加了一些好的做法来在运行 apt 后限制层的大小。

FROM php:7.4-apache

RUN apt-get update && apt-get upgrade -y \
&& apt-get clean && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli \
&& a2enmod headers
&& sed -ri -e 's/^([ \t]*)(<\/VirtualHost>)/\1\tHeader set Access-Control-Allow-Origin "*"\n\1\2/g' /etc/apache2/sites-available/*.conf

EXPOSE 80

引用资料:

关于Docker PHP 访问控制允许来源 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59689856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com