Docker PHP访问控制允许原始CORS
我想在默认的PHP Docker容器上永久启用CORS。docker-compose.yaml或docker-compose.yaml中的配置是什么 这是来自ReactJS和axios的请求Docker PHP访问控制允许原始CORS,docker,docker-compose,cors,dockerfile,Docker,Docker Compose,Cors,Dockerfile,我想在默认的PHP Docker容器上永久启用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({ u
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 });
});
}
错误:
访问位于“”的XMLHttpRequesthttp://127.0.0.1:8000/index.php/api“起源”http://127.0.0.1:8080'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头
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
Dockerfile:
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配置中添加相关的头。您还需要启用mod_头,因为默认情况下它不会出现在您的图像中。我使用了与页面上搜索更改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
参考资料:
您需要在映像中的apache配置中添加相关的头。您还需要启用mod_头,因为默认情况下它不会出现在您的图像中。我使用了与页面上搜索更改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
参考资料:
感谢@Zeitounator的帮助,它正在工作 这是已安装但不需要的Dockerfile nano版本:
FROM php:7.4-apache
RUN apt-get update && apt-get upgrade -y && apt-get install -y nano
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
ENV TERM xterm
EXPOSE 80
感谢@Zeitounator的帮助,它正在工作 这是已安装但不需要的Dockerfile nano版本:
FROM php:7.4-apache
RUN apt-get update && apt-get upgrade -y && apt-get install -y nano
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
ENV TERM xterm
EXPOSE 80
尝试写入一个文件。htaccess Header set Access Control Allow Origin*@Aleksandr我在那里添加了这一行,但它给了我500个错误。然后,寻找一个真正的.htaccess。最后,它解决了。试着在一个文件中写入。htaccess Header set Access Control Allow Origin*@Aleksandr我在那里添加了这一行,但它给了我500个错误。然后,寻找一个真正的.htaccess。最后,它通过解决了。谢谢,我用docker rm php74删除了容器,并将该行添加到我的Dockerfile文件中。它还不起作用。您知道如何确保它正常工作吗?当我使用docker exec-it php74 bash进入docker时,是否应该在docker容器中可用的路径/etc/apache2/sites中的.config文件中找到Access Control Allow Origin?谢谢,我使用docker rm php74删除了容器,并将该行添加到我的文件docker文件中。它还不起作用。您知道如何确保它正常工作吗?当我使用docker exec-it php74 bash进入docker时,我是否应该在docker容器中可用的路径/etc/apache2/sites中的.config文件中找到Access Control Allow Origin?