程序通过域名访问onlyoffice跨域问题解决
nginx反向代理onlyoffice访问的坑
1、环境介绍
onlyoffice: 安装在kubernetes中,使用nodePort类型的service,nodePort:30338
nginx: 在集群外一台服务器上安装nginx;
dns解析:在阿里云上做dns解析,解析到nginx服务器网卡地址(私网地址);
文件存储: minio;onlyoffice操作的所有文档都存放在minIo服务器中,minio也部署在k8s中。
2、程序访问介绍
k8s中前端微服务调用onlyoffice打开word文档;
3、各应用的配置
3.1 nginx上配置
最开始的配置:
listen 80;
server_name onlyoffice-uat.xxx.com; #此处"xxx"换成你自己的域名
location / {
proxy_pass http://192.168.1.1:30038; #192.168.1.1为k8s节点地址,30038为onlyuoffice的nodePort端口
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#websocket配置,不配置的话,浏览器会报关于websocket的错误,很容易排查
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
使用这个配置onlyoffice不能打开文档,无法浏览;浏览器console里边会报一个跨域错误,内容大致如下“http://192.168.1.1:30038/cache/file/…/Editer.bin…… from http://onlyoffice-uat.xxx.com 跨域”;
然而192.168.1.1:30038就是指向Onlyoffice这个pod,就相当于自己访问自己跨域(因为host和port不同)。
修改后的配置:注意upsteam名字
upstream onlyoffice-uat.xxx.com { #此处是一个巨坑,这里的名字必须和server_name一致
server 192.168.1.1:30038 max_fails=1 fail_timeout=10s weight=1;
}
server {
listen 80;
server_name onlyoffice-uat.xxx.com;
location / {
proxy_pass http://onlyoffice-uat.xxx.com; #此处引用upstream的名字
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
3.2 阿里云上dns解析
主机记录如下:
onlyoffice-uat.xxx.com 192.168.2.2(nginx所在服务器)
192.168.2.2和192.168.1.1是路由互通。
4、总结
在配置onlyoffice反向代理时,要用upstream,并且upstream的名字要和server块中的server_name名字一样,否在就会提示跨域,如果upstream的名字不是server_name名字,比如upstream配置如下:
upstream onlyoffice {
server 192.168.1.1:30038;
}
server {
...
location / {
proxy_pass http://onlyoffice;
...
}
}
浏览器就是提示onlyoffice无法解析。至于为什么会将proxy_pass后面部分拼接到Onlyoffice的访问地址中,暂时还不知道,等待有缘人进一步解析,但是我猜测应该是onlyoffice镜像中的nginx处理的。
更多推荐
所有评论(0)