如何为Docker Apache httpd服务器启用CORS?

4

我需要创建一个Apache服务器来托管我的文件,并通过ajax获取它们。因此,我使用Docker部署我的服务器。

我的Docker镜像是httpd:2.4。

我使用以下命令部署了服务器:

docker run -p 80:80 -dit --name file-server \
  -v /sources/docker/apache-server/www/:/usr/local/apache2/htdocs/ httpd:2.4

但是,当我想要发起ajax请求时,结果是这样的:

XMLHttpRequest无法加载http://server/kml/example.kml。所请求的资源没有“Access-Control-Allow-Origin”头。因此,“null”源不允许访问。

因此,我想按照以下步骤进行操作:如何为Apache httpd服务器启用CORS?(逐步过程) 。但我不知道如何在该组件的httpd.conf中添加该命令。而且我也没有httpd.conf模板来替换它。
v /sources/docker/apache-server/my-httpd.conf:/usr/local/apache2/conf/httpd.conf

请帮我解答这个问题。


1
进入容器并获取默认的 httpd.conf 文件,然后根据您的需求进行修改。 - Ayushya
2个回答

0

您需要在shell终端中输入以下命令:docker exec -it nameContainer sh。在终端中输入su,现在您已经是Docker中的root用户。

现在,在终端中,您需要输入a2enmod headers并重新启动Docker。

最后一个命令是为了激活mod_header,现在您需要在项目根文件夹中创建一个.htaccess文件,并在其中编写内容:

Header add Access-Control-Allow-Origin "*"

对我来说这个可以用,而且不需要在我的机器上安装apache


-1

这个问题肯定已经在其他地方得到了解决,并且有许多不同的解决方案,但它是“cors apache docker”的第一个搜索结果,所以我想提供我的意见:

最好的解决方案(因为它是可审计的和可重复的)是使用apache docker镜像作为您自己的镜像的基础,使用docker build命令和Dockerfile。我不会详细介绍这个过程,因为这不是直接的问题,但基本部分是相同的。

创建一个“额外”的apache配置文件,其中包含CORS头部信息:

me@mymachine:~$ docker exec file-server bash -c 'printf "<Directory \"/var/www/html\">\n        Header set Access-Control-Allow-Origin \"*\"\n</Directory>\n" >> /usr/local/apache2/conf/httpd.conf'

me@mymachine:~$ docker exec file-server bash -c 'tail /usr/local/apache2/conf/extra/cors.conf'
<Directory "/var/www/html">
        Header set Access-Control-Allow-Origin "*"
</Directory> 

重新启动Apache以使用这个新的配置文件:
me@mymachine:~$ docker exec file-server bash -c 'apachectl -k restart'

注意:如果您没有配置ServerName,则可能会看到与CORS配置无关的警告: AH00558: httpd: 无法可靠地确定服务器的完全限定域名,正在使用172.17.0.3。全局设置'ServerName'指令以抑制此消息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接