วาง Collabora ไว้ด้านหลัง Nginx โดยไม่ทำให้ WebSockets เสียหาย

ติดตั้ง Collabora บนชื่อโฮสต์ HTTPS เฉพาะที่ Nginx ส่งต่อเส้นทางแก้ไขและเส้นทางการค้นหาไปยังcoolwsdและส่งส่วนหัวการอัปเกรด WebSocket อย่างชัดเจนในเส้นทางซ็อกเก็ตที่ใช้งานอยู่ สำหรับโฮสต์เดียว Nginx สามารถยุติ TLS สาธารณะและส่ง HTTP ไปยัง Collabora บนอินเทอร์เฟซส่วนตัวได้ หาก Nginx และ Collabora ทำงานในคอนเทนเนอร์ที่แตกต่างกัน ให้ใช้ชื่อบริการ Collabora บนเครือข่ายที่ใช้ร่วมกัน127.0.0.1แทน

เบราว์เซอร์ใช้ HTTPS บนพอร์ต 443 และส่งต่อไปยัง Collabora ผ่าน HTTP ส่วนตัวบนพอร์ต 9980 โดยใช้ Nginx
โครงสร้างการเชื่อมต่อสำหรับตัวอย่างนี้คือ เบราว์เซอร์ใช้ HTTPS บนพอร์ต 443 ในขณะที่ Nginx ส่งต่อทราฟฟิกไปยัง Collabora ผ่านอัปสตรีม HTTP ส่วนตัวที่พอร์ต 9980

ตัวอย่างนี้สมมติว่าผู้ใช้เปิดใช้งานhttps://office.example.comและ Nginx จัดการใบรับรองของตนเอง พอร์ตการฟังเริ่มต้นของ Collabora คือ 9980 โปรดใช้พอร์ตที่สามารถเข้าถึงได้ในการใช้งานของคุณ คำนำหน้า URL เช่นhttps://example.com/collabora/จำเป็นต้องมีการตั้งค่าเส้นทางที่ประสานงานและรูทบริการ ดังนั้นการกำหนดค่า root-host นี้จะไม่สามารถใช้งานได้โดยไม่เปลี่ยนแปลง

1. กำหนดแผนผังการเชื่อมต่ออัปสตรีมและเว็บซ็อกเก็ต

ในhttpบริบทของ Nginx ให้เพิ่มชื่ออัปสตรีมสำหรับ Collabora และแผนที่ที่ตั้งค่าส่วนหัวการเชื่อมต่อupgradeเฉพาะเมื่อไคลเอ็นต์ร้องขอ WebSocket เท่านั้น วางบล็อกนี้ไว้นอกserverบล็อกใดๆ เปลี่ยนที่อยู่หาก Nginx เข้าถึง Collabora ด้วยวิธีอื่น

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

upstream coolwsd {
    server 127.0.0.1:9980;
}

ถ้า Nginx เป็นคอนเทนเนอร์เอง127.0.0.1จะหมายถึงคอนเทนเนอร์ Nginx นั้น ไม่ใช่คอนเทนเนอร์ Collabora ในเครือข่าย Docker ที่ใช้ร่วมกัน upstream อาจเป็น โดยserver collabora:9980;ใช้ชื่อบริการที่สามารถระบุได้ในเครือข่ายนั้น

2. เพิ่มโฮสต์เสมือน HTTPS และเส้นทาง Collabora

ภายในบล็อก HTTPS serverสำหรับoffice.example.comให้ส่งต่อสินทรัพย์ของเบราว์เซอร์ จุดสิ้นสุดการค้นหา การเชื่อมต่อ WebSocket และเส้นทาง Collabora ที่เหลือ ตำแหน่งต่างๆ เป็นไปตามคำแนะนำพร็อกซีของ Collabora ควรจัดเก็บตำแหน่งซ็อกเก็ตเฉพาะไว้เหนือ เส้นทาง cool/ ที่กว้างกว่า loolเพื่อให้ Nginx ใช้ส่วนหัว WebSocket ได้อย่างถูกต้อง

การกำหนดค่าเซิร์ฟเวอร์ Nginx โดยแยกตำแหน่งสำหรับไฟล์ที่เกี่ยวข้องกับเบราว์เซอร์ การค้นหา และฟังก์ชันต่างๆ ที่ส่งต่อไปยังเซิร์ฟเวอร์หลักของ Collabora
ส่วนหนึ่งของเส้นทาง Nginx: ทรัพยากรของเบราว์เซอร์ การค้นหา WOPI และความสามารถต่างๆ ทั้งหมดจะถูกส่งต่อไปยังเซิร์ฟเวอร์ต้นทางเดียวกันของ Collabora
server {
    listen 443 ssl;
    server_name office.example.com;

    ssl_certificate     /path/to/fullchain.pem;
    ssl_certificate_key /path/to/private-key.pem;

    location ^~ /browser {
        proxy_pass http://coolwsd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location ^~ /hosting/discovery {
        proxy_pass http://coolwsd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location ^~ /hosting/capabilities {
        proxy_pass http://coolwsd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
    }

    location ~ ^/cool/(.*)/ws$ {
        proxy_pass http://coolwsd;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 3600s;
    }

    location ^~ /cool/adminws {
        proxy_pass http://coolwsd;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 3600s;
    }

    location ~ ^/(c|l)ool {
        proxy_pass http://coolwsd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

แทนที่เส้นทางของใบรับรองด้วยไฟล์สำหรับโฮสต์ของคุณ หากการติดตั้งของคุณไม่ได้ใช้คอนโซลผู้ดูแลระบบ/cool/adminwsตำแหน่งดังกล่าวอาจไม่จำเป็นสำหรับการแก้ไขเอกสาร/cool/.../wsเส้นทางหลักมีความสำคัญproxy_read_timeoutหนึ่งชั่วโมงในที่นี้เป็นเพียงตัวอย่าง ไม่ใช่ข้อกำหนดสากล ค่าเริ่มต้นของการหมดเวลาการอ่านพร็อกซีของ Nginx คือ 60 วินาทีระหว่างการอ่านที่ต่อเนื่องกัน เลือกค่าที่นานกว่าช่วงเวลาที่ไม่ได้ใช้งานที่เซสชันของคุณต้องการ หรือใช้การรับส่งข้อมูล ping ของ WebSocket ที่เหมาะสมหากรองรับ

3. จับคู่โหมด TLS ของ Collabora กับพร็อกซีฮอป

ผู้ใช้ควรเข้าถึง Collabora ผ่าน HTTPS แม้ว่าการเชื่อมต่อส่วนตัวจาก Nginx ไปยัง Collabora จะใช้ HTTP ก็ตาม ในการตั้งค่าการยุติ TLS นั้น ให้กำหนดค่าcoolwsdให้พร็อกซีทำหน้าที่เป็นตัวยุติ TLS: ปิดใช้งาน SSL บนตัวรับฟังภายใน และเปิดใช้งานการยุติ SSL ใช้การตั้งค่าเหล่านี้ผ่านวิธีการที่รองรับโดยแพ็กเกจหรืออิมเมจคอนเทนเนอร์ของคุณ จากนั้นรีสตาร์ท/โหลด Collabora ใหม่ตามที่เอกสารกำหนด

กำหนดตำแหน่งที่ตั้งของ Nginx สำหรับเส้นทาง WebSocket ของ Collabora โดยใช้ HTTP 1.1, ส่วนหัว Upgrade และ Connection และตั้งค่าหมดเวลาสำหรับการอ่านข้อมูล
ส่วนหนึ่งของเส้นทาง WebSocket: HTTP/1.1 และส่วนหัว Upgrade/Connection ช่วยให้ Nginx สามารถส่งต่อการเชื่อมต่อแบบเรียลไทม์ของโปรแกรมแก้ไขได้ ปรับเวลาหมดอายุการอ่านให้เหมาะสมกับสภาพแวดล้อมของคุณ

ใช้ HTTP upstream เฉพาะในเครือข่ายส่วนตัวที่เชื่อถือได้ และบล็อกการเข้าถึงสาธารณะไปยังพอร์ต 9980 หากนโยบายกำหนดให้มีการเข้ารหัสระหว่าง Nginx และ Collabora ให้ใช้ HTTPS upstream และกำหนดค่าการตรวจสอบใบรับรองอย่างถูกต้อง อย่าปิดใช้งานการตรวจสอบเพื่อปกปิดความไม่ตรงกันของใบรับรองเอกสารการตั้งค่าพร็อกซี ของ Collabora แยกความแตกต่างระหว่าง SSL ที่พร็อกซีกับ SSL ระหว่างพร็อกซีและcoolwsdNginx

นอกจากนี้ ให้ตั้งค่า URL ของ Collabora ในการผสานรวมพื้นที่จัดเก็บข้อมูลเป็นชื่อโฮสต์ HTTPS สาธารณะ สำหรับ Nextcloud คู่มือการดูแลระบบระบุว่าเบราว์เซอร์และเซิร์ฟเวอร์ทั้งสองต้องสามารถเข้าถึงกันได้ผ่าน HTTP(S) โดยใช้โปรโตคอลภายนอกที่ตรงกัน จำกัดรายการอนุญาต WOPI ให้เฉพาะโฮสต์พื้นที่จัดเก็บข้อมูลและที่อยู่ Collabora ที่คาดไว้ อย่าขยายขอบเขตให้กว้างเกินไปเพื่อแก้ไขข้อผิดพลาดในการกำหนดเส้นทางพร็อกซี

4. ทดสอบการตั้งค่าจากทั้งสองด้าน

ตรวจสอบไวยากรณ์ของ Nginx ก่อนทำการรีโหลด:

sudo nginx -t
sudo systemctl reload nginx

หาก Nginx ทำงานอยู่ในคอนเทนเนอร์ ให้ใช้ขั้นตอนการตรวจสอบและรีโหลดของคอนเทนเนอร์นั้นแทน จากโฮสต์ Nextcloud ให้ทดสอบเอนด์พอยต์สาธารณะของ Collabora โดยใช้ชื่อโฮสต์จริง:

curl -fsS https://office.example.com/hosting/discovery -o /dev/null
curl -fsS https://office.example.com/hosting/capabilities -o /dev/null

ลองเปิด URL HTTPS เหล่านั้นจากเบราว์เซอร์ของผู้ใช้ด้วยเช่นกัน เบราว์เซอร์จะตรวจสอบการเข้าถึง แต่การตอบสนองการค้นหาที่สำเร็จเพียงอย่างเดียวไม่ได้พิสูจน์ว่าการแก้ไขเอกสารใช้งานได้ เปิดเอกสารและใช้แผงเครือข่ายของเบราว์เซอร์เพื่อยืนยันว่าไฟล์ต่างๆ โหลดและ/cool/.../wsการเชื่อมต่อยังคงเปิดอยู่ การเชื่อม101 Switching Protocolsต่อ WebSocket HTTP/1.1 ที่สำเร็จมักจะแสดงผลลัพธ์ดังนี้ การแสดงผลที่แน่นอนอาจขึ้นอยู่กับเบราว์เซอร์และวิธีการส่งข้อมูล หากการตั้งค่ามาตรฐานนี้ใช้งานได้ใน Firefox แต่ล้มเหลวใน Chromium ให้ตรวจสอบวิธีการร้องขอและโปรโตคอล รายงานปัญหาของ Collabora ที่เปิดไว้สำหรับเวอร์ชัน 25.04 ได้บันทึกการใช้งาน WebSocket ของ Chromium ผ่าน HTTP/2 CONNECTและได้รับรหัส 405 ซึ่งยังคงเปิดอยู่เมื่อตรวจสอบเมื่อวันที่ 9 ตุลาคม 2026 นี่เป็นรายงานเฉพาะเวอร์ชัน ไม่ใช่พฤติกรรมทั่วไป เปรียบเทียบเวอร์ชัน Collabora, Nginx และเบราว์เซอร์ของคุณก่อนที่จะเปลี่ยนการตั้งค่า HTTP/2 ดูปัญหา Collabora หมายเลข 12155

หน้าต่างเทอร์มินัลแสดงคำสั่ง curl สำหรับเอนด์พอยต์การค้นหาของ Collabora เหนือโปรแกรมแก้ไขเอกสารว่างเปล่าทั่วไป
มุมมองการตรวจสอบ: เทอร์มินัลแสดงการตรวจสอบการค้นพบที่จะดำเนินการ ในขณะที่โปรแกรมแก้ไขพร้อมสำหรับการทดสอบเอกสารจริงแยกต่างหาก ตัวอย่างนี้ไม่ได้แสดงถึงผลลัพธ์ใดๆ

หากการค้นหาล้มเหลว ให้ตรวจสอบบันทึกข้อผิดพลาดของ Nginx และตรวจสอบชื่อโฮสต์ พอร์ต และโปรโตคอลต้นทาง หากการค้นหาทำงานได้ แต่ไม่สามารถเชื่อมต่อเพื่อแก้ไขได้ ให้ตรวจสอบเส้นทาง WebSocket ส่วนหัว การหมดเวลา และบันทึกของ Collabora ข้อผิดพลาดในการอนุญาต WOPI ชี้ไปที่รายการอนุญาตของโฮสต์จัดเก็บข้อมูลคู่มือการแก้ไขปัญหา Nextcloud Officeแนะนำให้ตรวจสอบการเข้าถึงจากเบราว์เซอร์ Nextcloud และ Collabora จากนั้นตรวจสอบบันทึกของเซิร์ฟเวอร์ทั้งสอง

คู่มือการใช้งาน Nginx WebSocket proxyingอธิบายถึงเหตุผลว่าทำไมจึงต้องส่งค่า `id` Upgradeและ `id` อย่างชัดเจน และทำไมพฤติกรรมการหมดเวลาเมื่อไม่มีการใช้งานจึงมีความสำคัญ ดู ข้อมูลอ้างอิงโมดูล proxy ของ Nginxสำหรับพฤติกรรมของคำสั่ง เมื่อตรวจสอบผ่านแล้ว ให้เปิด แก้ไข บันทึก และเปิดเอกสารทดสอบอีกครั้งก่อนที่จะให้ผู้ใช้ใช้งานเส้นทางใหม่Connection

ฝากความเห็น

วาง Collabora ไว้ด้านหลัง Nginx โดยไม่ทำให้ WebSockets เสียหาย

วาง Collabora ไว้ด้านหลัง Nginx โดยไม่ทำให้ WebSockets เสียหาย

ตั้งค่าการยุติ TLS ของ Nginx, เส้นทาง Collabora และส่วนหัว WebSocket จากนั้นทดสอบปลายทางสาธารณะก่อนเปิดเอกสารจริง

หยุดการสิ้นสุดเซสชันการแก้ไขโค้ดที่ 10 นาที

หยุดการสิ้นสุดเซสชันการแก้ไขโค้ดที่ 10 นาที

ตรวจสอบหาสาเหตุของการตัดการเชื่อมต่อ CODE ที่กินเวลา 10 นาที ว่าเกิดจากพร็อกซี โหลดบาลานเซอร์ หรือเส้นทาง WebSocket จากนั้นแก้ไขค่าหมดเวลาและตรวจสอบว่าเซสชันยังคงเชื่อมต่ออยู่หรือไม่

ติดตั้ง Collabora CODE บน Kubernetes ด้วย Helm

ติดตั้ง Collabora CODE บน Kubernetes ด้วย Helm

ติดตั้ง Helm chart อย่างเป็นทางการของ Collabora กำหนดค่าการเข้าถึง WOPI และความสัมพันธ์ของ ingress และตรวจสอบการปรับใช้โดยปราศจากข้อผิดพลาดในการตั้งค่าทั่วไป

ติดตามเอกสาร Collabora ว่างเปล่าไปยังเลเยอร์ที่ล้มเหลว

ติดตามเอกสาร Collabora ว่างเปล่าไปยังเลเยอร์ที่ล้มเหลว

ใช้คำขอจากเบราว์เซอร์ บันทึก WOPI และการตรวจสอบพร็อกซีแบบเจาะจงเพื่อค้นหาสาเหตุที่ Collabora เปิดเอกสารว่างเปล่า และเลือกวิธีแก้ไขที่เหมาะสมกับหลักฐานที่พบ

เปิดใช้งานการตรวจสอบการสะกดคำหลายภาษาใน Collabora Online (โค้ด)

เปิดใช้งานการตรวจสอบการสะกดคำหลายภาษาใน Collabora Online (โค้ด)

ตั้งค่าพจนานุกรมและแท็กข้อความในเอกสารของ CODE Docker ให้ถูกต้อง เพื่อให้ภาษาอังกฤษ ภาษาฝรั่งเศส และภาษาอื่นๆ ที่รองรับ ได้รับการตรวจสอบการสะกดคำอย่างถูกต้อง

ตั้งค่าตัวจับเวลาการไม่ใช้งานของ Collabora สำหรับมุมมองเอกสารที่ใช้งานอยู่

ตั้งค่าตัวจับเวลาการไม่ใช้งานของ Collabora สำหรับมุมมองเอกสารที่ใช้งานอยู่

ปรับค่าเกณฑ์การไม่ใช้งานต่อการแสดงผลใน coolwsd และแยกความแตกต่างจากค่าการหรี่แสงแท็บพื้นหลัง การปิดเอกสาร การบันทึกอัตโนมัติ และการหมดอายุการเข้าสู่ระบบ

ปิดใช้งานการตรวจสอบการอัปเดตโค้ด Collabora และการเชื่อมต่อที่ไม่ต้องการ

ปิดใช้งานการตรวจสอบการอัปเดตโค้ด Collabora และการเชื่อมต่อที่ไม่ต้องการ

หยุดการตรวจสอบการอัปเดต CODE ตามกำหนดเวลา ตรวจสอบบริการระยะไกลเสริม และใช้การควบคุมเครือข่ายขาออกโดยไม่ทำให้การแก้ไขเอกสารหยุดชะงัก

เชื่อมต่อ Seafile และ Collabora ด้วย URL WOPI ที่ถูกต้อง

เชื่อมต่อ Seafile และ Collabora ด้วย URL WOPI ที่ถูกต้อง

เปิดใช้งานการแก้ไขเอกสารอย่างปลอดภัยใน Seafile โดยการกำหนดค่า URL การค้นหาของ Collabora, การเข้าถึง HTTPS และ WOPI สำหรับการใช้งานของคุณ

กู้คืนฟังก์ชันคัดลอกและวางระหว่าง Collabora และแอปพลิเคชันบนเดสก์ท็อป

กู้คืนฟังก์ชันคัดลอกและวางระหว่าง Collabora และแอปพลิเคชันบนเดสก์ท็อป

ทดสอบคลิปบอร์ดของระบบ ปรับสิทธิ์การเข้าถึงของเบราว์เซอร์ และระบุว่าเมื่อใดที่การผสานรวม Collabora ที่ฝังอยู่จำเป็นต้องมีการเปลี่ยนแปลงนโยบาย iframe

ทำให้สามารถใช้ฟอนต์แบบกำหนดเองได้ใน Collabora CODE Docker

ทำให้สามารถใช้ฟอนต์แบบกำหนดเองได้ใน Collabora CODE Docker

ติดตั้งไฟล์ฟอนต์ลงใน Docker และ systemplate ของ Collabora เพื่อให้แบบอักษรที่กำหนดเองปรากฏในโปรแกรมแก้ไขและแสดงผลได้อย่างถูกต้องในเอกสาร