Docker 安装的 Onlyoffice 的 Community Server,nginx 反向代理到了 docker 的端口,如果是 http 访问,nginx 会先做一次 301 到 https。但是使用时发现出现跨域问题,http 和 https 的 跨域 问题。
Docker 中 /etc/nginx/ 下相关的配置中已经有了 add_header Access-Control-Allow-Origin *;
,但是依然无法生效,具体体现是:
- 无法上传文件。
- Short URL 无法使用。
在查看了 https://segmentfault.com/a/1190000012550346 这篇文章之后,对跨域有了更多的了解。
application/json
的请求会在正式通信之前,增加一次预检请求,这次预检请求会带上头部信息。发送预检请求时,需要用到方法 OPTIONS
,所以服务器需要允许该方法。
if ($request_method = 'OPTIONS') { return 204; }
所以,只需要 docker exec -it DOCKER_ID /bin/bash
进入 docker,然后编辑 /etc/nginx/includes/onlyoffice-communityserver-common.conf.template
,修改add_header Access-Control-Allow-Origin *;
为
add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; if ($request_method = 'OPTIONS') { return 204; }
保存后退出 docker,然后 commit
,然后 systemctl restart docker
。