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。
