OnlyOffice跨域问题

  • Docker安装OnlyOffice
    • 拉取镜像
    • 启动容器
  • Https访问OnlyOffice
    • 443端口映射
    • 配置SSL证书
    • 重启容器

Docker安装OnlyOffice

拉取镜像

镜像地址:onlyoffice镜像
我用的onlyoffice版本是6.4版本

docker pull onlyoffice/documentserver:6.4

启动容器

如果不用https访问,运行以下命令启动onlyoffice容器

#创建挂载目录
#onlyoffice日志挂载目录
mkdir /opt/dockerfile/onlyoffice/log
#onlyoffice数据目录
mkdir /opt/dockerfile/onlyoffice/data
#onlyoffice配置文件目录
mkdir /opt/dockerfile/onlyoffice/lib
#onlyoffice数据库目录
mkdir /opt/dockerfile/onlyoffice/db
#onlyoffice nginx配置文件目录
mkdir /opt/dockerfile/onlyoffice/nginxdocker run -i -t -d -p 8013:80 --name onlyoffice --restart=always
-v /opt/dockerfile/onlyoffice/log:/var/log/onlyoffice
-v /opt/dockerfile/onlyoffice/data:/var/www/onlyoffice/Data
-v /opt/dockerfile/onlyoffice/lib:/var/lib/onlyoffice
-v /opt/dockerfile/onlyoffice/db:/var/lib/postgresql
-v /opt/dockerfile/onlyoffice/nginx:/etc/onlyoffice/documentserver/nginx
onlyoffice/documentserver:6.4

注:挂载nginx配置文件目录是为了方便后续更改nginx配置,不知道什么原因,用以上命令启动,容器内nginx配置文件会消失,或者说被宿主机空的nginx文件夹覆盖,我的做法是第一次启动容器先不挂载nginx目录,然后把容器内nginx配置文件复制到宿主机的挂载目录,然后删除容器后再次启动挂载nginx目录,具体如下

#第一次启动
docker run -i -t -d -p 8013:80 --name onlyoffice --restart=always
-v /opt/dockerfile/onlyoffice/log:/var/log/onlyoffice
-v /opt/dockerfile/onlyoffice/data:/var/www/onlyoffice/Data
-v /opt/dockerfile/onlyoffice/lib:/var/lib/onlyoffice
-v /opt/dockerfile/onlyoffice/db:/var/lib/postgresql
onlyoffice/documentserver:6.4#复制nginx配置文件到宿主机
docker cp onlyoffice:/etc/onlyoffice/documentserver/nginx /opt/dockerfile/onlyoffice#停止容器并删除
docker stop onlyoffice
docker rm onlyoffice#重新启动容器(挂载nginx)
docker run -i -t -d -p 8013:80 --name onlyoffice --restart=always
-v /opt/dockerfile/onlyoffice/log:/var/log/onlyoffice
-v /opt/dockerfile/onlyoffice/data:/var/www/onlyoffice/Data
-v /opt/dockerfile/onlyoffice/lib:/var/lib/onlyoffice
-v /opt/dockerfile/onlyoffice/db:/var/lib/postgresql
-v /opt/dockerfile/onlyoffice/nginx:/etc/onlyoffice/documentserver/nginx
onlyoffice/documentserver:6.4

至此容器启动成功,浏览器输入地址localhost:8013

按照命令可以启动演示页面

sudo docker exec f8f17ec4aa3f sudo supervisorctl start ds:example

然后点击GO TO TEST EXAMPLE进入演示页面,可以上传文件演示在线预览和编辑的效果

Https访问OnlyOffice

因为公司生产环境必须https访问,否则出现跨域问题,刚开始我是直接在宿主机nginx配置8013端口号映射的,如下

location /onlyoffice/ {proxy_pass http://192.168.0.183:8013/;
}

这种方式可以通过https://我的域名/onlyoffice访问到onlyoffice主页,但是当预览文件的时候会报unknown error,查看接口调用,发现Edit.bin接口报错,原因是该接口调用形式还是http

http://192.168.0.183:8013/cache/files/7f8268a6c914b496ea63/Editor.bin/Editor.bin?md5=zk5o68w3kpMTY_pVaEt0hQ&expires=1670380981&filename=Editor.bin

443端口映射

删除容器,映射443端口重新启动容器,命令如下

#重新启动容器(挂载nginx)
docker run -i -t -d -p 8013:80 -p 8443:443 --name onlyoffice --restart=always
-v /opt/dockerfile/onlyoffice/log:/var/log/onlyoffice
-v /opt/dockerfile/onlyoffice/data:/var/www/onlyoffice/Data
-v /opt/dockerfile/onlyoffice/lib:/var/lib/onlyoffice
-v /opt/dockerfile/onlyoffice/db:/var/lib/postgresql
-v /opt/dockerfile/onlyoffice/nginx:/etc/onlyoffice/documentserver/nginx
onlyoffice/documentserver:6.4

因为我宿主机的443端口被占用,所以用宿主机8443端口映射容器443端口,然后防火墙开放端口

#开放8443端口
firewall-cmd --zone=public --add-port=8443/tcp --permanent
#刷新
firewall-cmd --reload

配置SSL证书

首先进入数据挂载目录/opt/dockerfile/onlyoffice/data,创建certs目录mkdir certs,然后将我们的SSL文件pem和key文件放到该目录下,使用openssl命令把pem转为crt文件

openssl x509 -in onlyoffice.pem -out onlyoffice.crt


onlyoffice容器内已经把nginx配置文件挂载出来,所以进入nginx挂载目录,找到ds.conf文件,修改ssl配置

## HTTPS host
server {listen 0.0.0.0:443 ssl http2;listen [::]:443 ssl http2 default_server;server_tokens off;root /usr/share/nginx/html;## Strong SSL Security## https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.htmlssl on;ssl_certificate /var/www/onlyoffice/Data/certs/onlyoffice.crt;ssl_certificate_key /var/www/onlyoffice/Data/certs/onlyoffice.key;# Uncomment string below and specify the path to the file with the password if you use encrypted certificate key# ssl_password_file {{SSL_PASSWORD_PATH}};ssl_verify_client off;ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;ssl_session_cache  builtin:1000  shared:SSL:10m;ssl_prefer_server_ciphers   on;add_header Strict-Transport-Security max-age=31536000;# add_header X-Frame-Options SAMEORIGIN;add_header X-Content-Type-Options nosniff;## [Optional] If your certficate has OCSP, enable OCSP stapling to reduce the overhead and latency of running SSL.## Replace with your ssl_trusted_certificate. For more info see:## - https://medium.com/devops-programming/4445f4862461## - https://www.ruby-forum.com/topic/4419319## - https://www.digitalocean.com/community/tutorials/how-to-configure-ocsp-stapling-on-apache-and-nginx# ssl_stapling on;# ssl_stapling_verify on;# ssl_trusted_certificate /etc/nginx/ssl/stapling.trusted.crt;# resolver 208.67.222.222 208.67.222.220 valid=300s; # Can change to your DNS resolver if desired# resolver_timeout 10s;## [Optional] Generate a stronger DHE parameter:##   cd /etc/ssl/certs##   sudo openssl dhparam -out dhparam.pem 4096##include /etc/nginx/includes/ds-*.conf;}

注:ssl_certificate证书配置的路径是/var/www/onlyoffice/Data/certs(挂载至宿主机了)

重启容器

重启容器访问https://我的域名:8443/可以访问到onlyoffice主页,进入演示页面上传文件进行预览会报Download failed Press “OK” return to document list,问题产生的原因是Document Server默认拒绝未认证的请求(签名认证的HTTPS请求)
解决方案:进入容器修改default.json配置

#进入容器
docker exec -it onlyoffice /bin/bash
#修改default.json配置
vim /etc/onlyoffice/documentserver/default.json

将rejectUnauthorized属性设置为false,如下

"requestDefaults": {"headers": {"User-Agent": "Node.js/6.13","Connection": "Keep-Alive"},"gzip": true,"rejectUnauthorized": false},

再次重启容器后正常预览文件,至此onlyoffice跨域问题解决

参考文章:
https://www.cnblogs.com/Magiclala/p/15497267.html

https://blog.csdn.net/weixin_44048054/article/details/126057999

记录OnlyOffice跨域问题排查过程相关推荐

  1. 还在问跨域?本文记录js跨域的多种实现实例

    前言 众所周知,受浏览器同源策略的影响,产生了跨域问题,那么我们应该如何实现跨域呢?本文记录几种跨域的简单实现 前期准备 为了方便测试,我们启动两个服务,10086(就是在这篇博客自动生成的项目,请戳 ...

  2. SSO的几种跨域方案

    在此只是记录一下自己在尝试SSO跨域实现的过程中学到的几种跨域方案,不包含任何例子和具体的实现方法. 最近在尝试SSO的跨域,看了好多资料,然后自己记录了一下可以实现的方法: ①跳转所有站点设置coo ...

  3. js跨域的理解与实现

    域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系(即Trust Relation).信任关系是连接在域与域之间的桥梁.当一个域与其他域建立了信任关系后,2个域之 ...

  4. Web应用跨域访问解决方案

    Web应用跨域访问解决方案 Web应用的跨域访问解决方案 Web跨域访问解决方案 做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与 ...

  5. CockRoachDB配置跨域集群

    这段时间老师需要我测试CRDB的性能,因而对CRDB做了些简单的了解,可以进行简单使用及测试编译,首先说明我使用的是阿里云服务器Ubuntu20.04,各位可以根据需要自行选择操作系统,centos和 ...

  6. Web应用跨域访问及单点登录解决方案汇总

    做过跨越多个网站的Ajax开发的朋友都知道,如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容,如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.Ajax的跨域访问问题是现有的Aj ...

  7. js跨域访问,No 'Access-Control-Allow-Origin' header is present on the requested resource

    js跨域访问提示错误:XMLHttpRequest cannot load http://...... No 'Access-Control-Allow-Origin' header is prese ...

  8. Ajax请求利用jsonp实现跨域

    跨域: js有一个同源限制,简单说来源不一样的话就无法相互间交互.那么怎么算来源不一样呢, 举个例子:浏览器访问-->服务器A--->得到页面A---页面A中的js脚本只能访问服务器A的资 ...

  9. 后端工程师的「跨域」之旅

    跨域,对后端工程师来说,可谓既熟悉又陌生. 这两个月我以架构师的角色参与一款教育产品的孵化,有了一段难忘的跨域之旅. 写这篇文章,我想分享我在跨域这个知识点上的经历和思考,希望对大家有所启发. 1 遇 ...

最新文章

  1. 科普丨深度神经网络与生命的意义
  2. 海量大数据大屏分析展示一步到位:DataWorks数据服务对接DataV最佳实践
  3. SpringBoot 2.0 编程方式配置,不使用默认配置方式
  4. 手持GPS坐标系统的转换与应用
  5. 【转】搭建Java版WebService
  6. CDQ 分治解决和点对有关的问题
  7. 【Elasticsearch】 Full text queries query_string 等 字符串查询
  8. pintos project (2) Project 1 Thread -Mission 1 Code
  9. 工程选择LibGdx--开发环境搭建Strut2教程-java教程
  10. 2016 Android Top 10 Library
  11. 维纳滤波及其简单实现
  12. 什么是防病毒网关 防病毒网关的功能特点
  13. 微信群控二次开发SDK
  14. 企业网络安全区域划分的原则和方法
  15. 克鲁斯卡尔算法(Kruskal Algorithm)——图的最小生成树
  16. Echarts折线图X轴Y轴图例位置调整
  17. 开放平台设计之接口签名认证
  18. 白山搜索引擎优化收费_白山SEO-白山网站优化-白山新站整站快速排名-【
  19. 嵌入式Linux 的Cramfs 根文件系统配置成可读可写
  20. 商城类小程序源码,拼团、砍价、秒杀、优惠券,客服系统一套源码全搞定!

热门文章

  1. leetcode 212. 单词搜索 II 字典树+深度优先搜索 java代码 详细解释
  2. 5G如何与物联网结合?
  3. 苹果模仿对手推商户聊天:iMessage变身企业客服中心
  4. 快速带你分清java内存结构,java内存模型,java对象模型和jvm内存结构!
  5. 建立你的3389肉鸡(菜鸟篇)
  6. 离职原因怎么写?万万不可写这些
  7. Linux 之系统日志篇
  8. suricata源码之-流表管理
  9. Vue-element 引用FileSaver xlsx 导出excel踩坑
  10. 三菱FX系列恒压供水程序和三菱触摸屏程序三台水泵,手动自动均可