關(guān)于Nextcloud連接Onlyoffice成功后出現(xiàn)"ONLYOFFICE服務(wù)器無法連接,請(qǐng)聯(lián)系管理員"


好不容易才把onlyoffice連接成功,你竟然還給我來這個(gè)錯(cuò)誤,實(shí)在是不應(yīng)該呀,都最后一公里了,可不能放棄,必須得把它給解決。
現(xiàn)在不妨從開始說起:
在Docker容器內(nèi)部,宿主機(jī)相當(dāng)于一個(gè)網(wǎng)關(guān),宿主機(jī)根據(jù)不同的端口給每個(gè)容器分配一個(gè)獨(dú)立的IP地址。這時(shí)所有Docker上所有容器的IP都是基于DNAT和SNAT技術(shù)自動(dòng)實(shí)現(xiàn)對(duì)內(nèi)網(wǎng)的接入,本質(zhì)上都是用宿主機(jī)的內(nèi)網(wǎng)IP地址+宿主機(jī)端口,只是映射的端口號(hào)不同而以。此時(shí)宿主機(jī)與外界通信的接口是路由器,其使用的IP是內(nèi)網(wǎng)IP,還不能直接上網(wǎng),必須經(jīng)過路由器(路由器的一端連內(nèi)網(wǎng),一端連公網(wǎng))的端口映射,再次把宿主機(jī)的端口映射到路由器的獨(dú)立端口上(具體根據(jù)路由器設(shè)置),使用路由器的端口與公網(wǎng)連接,其本質(zhì)也是利用路由器的公網(wǎng)IP+路由器的端口號(hào)。
所以容器在接入公網(wǎng)之前是經(jīng)過了兩層映射(套娃的既視感),兩次端口轉(zhuǎn)換:容器----宿主機(jī)----路由器。

現(xiàn)在安裝Nextcloud和Onlyoffice容器,它們是兩個(gè)不同的服務(wù)器,要連接成功,必須是兩邊都是互通的,是可以互訪的。前幾天都是把NC和OO都部署在NAS服務(wù)器上,妄想基于Docker容器來實(shí)現(xiàn)兩服務(wù)器的互訪,雖然內(nèi)網(wǎng)是沒有問題的,但是外網(wǎng)卻不一直連接不上,為啥呢?
這是因?yàn)槲曳噶藗€(gè)低級(jí)錯(cuò)誤:因?yàn)閷?duì)于DNS服務(wù)器來說來說,要將域名轉(zhuǎn)換為IP地址,這個(gè)IP地址必須是公網(wǎng)地址,前面提到如果以回環(huán)的方式實(shí)現(xiàn)互訪在內(nèi)網(wǎng)是沒有問題的,但是外網(wǎng)就顯然不可能了。
既然不能直連,那我們可以用其它方法來實(shí)現(xiàn),方案有三種:
方案一:能不能再增加一臺(tái)以上設(shè)備來實(shí)現(xiàn)“下一跳”,這樣就可以“欺騙”路由器了。

于是,前幾天配置的WireGuard VPN終于可以派上用場(chǎng)了,具體方法是在“ONLYOFFICE Doc地址”欄填入VPN的地址:https://10.0.xx.xx:端口號(hào),在“用于ONLYOFFFCIE Doc內(nèi)部請(qǐng)求的服務(wù)器地址”欄填入內(nèi)網(wǎng)地址:https://192.168.xx.xx:端口號(hào)。

但是,現(xiàn)實(shí)是騰訊給的公網(wǎng)帶寬只有4M,要實(shí)現(xiàn)多人在線辦公4M的帶寬還遠(yuǎn)遠(yuǎn)不夠呀,還有一個(gè)問題是每個(gè)人都直面我的NAS服務(wù)器,是有風(fēng)險(xiǎn)的,所以不推薦。
方案二:因?yàn)槲业腘AS時(shí)雙網(wǎng)口的,雙網(wǎng)口就意味著有兩個(gè)IP地址可用,讓每個(gè)容器使用一個(gè)外網(wǎng)口,這樣就實(shí)現(xiàn)了兩個(gè)容器的相互連通,但是在實(shí)驗(yàn)過程中,因?yàn)椴恢繭NLYOFFICE默認(rèn)使用的端口號(hào),最終沒有成功,所以就有了第三方案。
方案三:利用 或者

因?yàn)槲业腘C服務(wù)器時(shí)基于https訪問的,此時(shí)OO也必須以https連接。
要實(shí)現(xiàn)https安全連接,有些繁瑣,但是按照步驟一步一步來就很簡(jiǎn)單了,,在安裝好OO后,為了避免出現(xiàn)不必要的錯(cuò)誤,還應(yīng)該修改NEXTCLOUD容器配置文件‘conf.php’,步驟如下:
首先通過以下命令一步一步進(jìn)入:
在段落中插入以下內(nèi)容:
保存好后在瀏覽器中打開“https://騰訊云公網(wǎng)IP:OO的端口”,會(huì)出現(xiàn)如下頁(yè)面,這個(gè)頁(yè)面主要是為了測(cè)試OO是否正常工作的。

按照提示的步驟一步一步做,最后再點(diǎn)開“GO TO EXAMPLE”出現(xiàn)創(chuàng)建文檔的頁(yè)面,試著創(chuàng)建一個(gè)文檔:

這時(shí)有可能還會(huì)出現(xiàn)一個(gè)錯(cuò)誤---類似于“實(shí)驗(yàn)文本無法保存或無法下載”的情況:

查閱多方資料后發(fā)現(xiàn)這是因?yàn)?span id="s0sssss00s" class="color-green-03">docker node js無法對(duì)客戶端自簽名證書進(jìn)行認(rèn)證:
解決辦法:關(guān)閉客戶端證書認(rèn)證。
進(jìn)入ONLYOFFICE容器并修改default.json文件。
找到如下代碼:
把“true”值改成“false”后,保存并退出。
再次回到容器,輸入‘exit’退出容器,輸入以下命令重啟ONLYOFFICE:
?好了,現(xiàn)在就可以在onlyoffice配置頁(yè)面(依次點(diǎn)開“頭像”--“設(shè)置”---"ONLYOFFICE")進(jìn)行如下配置:
在“ONLYOFFICE Doc地址”欄填入“https://騰訊云地址:OO端口”,在“用于ONLYOFFICE Doc內(nèi)部請(qǐng)求的服務(wù)器的地址”欄填入NEXTCLOUD的公網(wǎng)地址或域名,格式為“https://mydomain:NC端口”,保存,此時(shí)會(huì)出現(xiàn)“設(shè)置更改成功”的提示。

連接成功現(xiàn)在我們有要直面開頭提到的錯(cuò)誤了:
當(dāng)我用Chrome瀏覽器z在NC打開office文件時(shí),我以為會(huì)很順利的打開,但是結(jié)果呢,無法連接,前面的工作可不能白做。
好吧,那我去GitHub看看有沒有類似的問題,結(jié)果所有的問題源頭都指向了OO服務(wù)器目錄下的一個(gè)名為api.js文件,我自己到開瀏覽器的控制臺(tái)查看也確實(shí)是那么回事,但是看著這個(gè)js文檔,還是有些茫然,要不現(xiàn)換一個(gè)瀏覽器再試試吧,當(dāng)我用Edge瀏覽器在NC上打開OO時(shí),神奇的事發(fā)生了。

原來真的是瀏覽器問題,可能是瀏覽器的安全設(shè)置把OO給攔截了,那就一個(gè)一個(gè)的實(shí)驗(yàn)吧。
但是無論怎么設(shè)置瀏覽器,OO都是無動(dòng)于衷,再次用快捷鍵“F12”進(jìn)入控制臺(tái),點(diǎn)開錯(cuò)誤提示欄,找到有“api.js“文件,點(diǎn)開“api.js”文件,直接跳轉(zhuǎn)到“https://ONLYOFFICED的地址/web-apps/apps/api/documents/api.js“,再次刷新NC,重新打開office文件,奇跡發(fā)生了,竟然正常打開。按照這個(gè)方法在firefox瀏覽器上見打開“api.js“這個(gè)文件后,同樣也可以打開office文件。
所以還真不是安全問題,我琢磨這估計(jì)是Chrome和Firefox瀏覽器無法抓取這個(gè)api.js文件,而Edge瀏覽器可以正常抓取這個(gè)文件,所以那兩個(gè)瀏覽器才會(huì)出現(xiàn)服務(wù)器無法訪問的錯(cuò)誤,點(diǎn)擊api.js這個(gè)文件打開后,瀏覽器就相應(yīng)保存了這個(gè)Cookie,所以還有一點(diǎn)就是在瀏覽器上設(shè)置Cookie時(shí),一定不要選擇“退出時(shí)清理Cookie”這個(gè)選項(xiàng)。

若是下次打開瀏覽器還跳這個(gè)錯(cuò)誤,還得再次打開這個(gè)文件,最簡(jiǎn)單的方法是把‘a(chǎn)pi.js’這個(gè)文件路徑保存為書簽吧。還有要注意的是,應(yīng)該在“隱私設(shè)置和安全性”的點(diǎn)擊“Cookie及其他網(wǎng)站數(shù)據(jù)”分別選擇“允許所有Cookie”

最近發(fā)現(xiàn):當(dāng)ONLYOFFICE經(jīng)過多次重裝,按以上步驟設(shè)置好后,Nextcloud連接Onlyoffice還會(huì)出現(xiàn)一個(gè)“INVALID TOKEN”的錯(cuò)誤提示,或者是在打開文檔時(shí)出現(xiàn)“秘鑰沒有正確生成”類似的錯(cuò)誤提示,大家可以進(jìn)入ONLYOFFICE容器內(nèi)部查看‘‘local.json’’這個(gè)文件,內(nèi)部路徑為:‘‘/etc/onlyoffice/documentserver”,或者直接輸入“cat? /etc/onlyoffice/documentserver/local.json”,找到如下相關(guān)的內(nèi)容:
復(fù)制秘鑰,然后再回到Nextcloud的Onlyoffice的設(shè)置界面,把復(fù)制好的秘鑰粘貼到“秘鑰”欄,點(diǎn)擊‘‘保存”按鈕即可。

寫在最后:NEXTCLOUD的BUG還是有點(diǎn)多哈,我還走了很多彎路,花了不少的時(shí)間來學(xué)習(xí),不過它確實(shí)很好用,而且是開源,用的人越多BUG就越少?。。?!
