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处理的。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐