Currently there is one major disadvantage of running SOGo behind
relayd(8) and httpd(8), it is documented at 

https://sogo.nu/bugs/view.php?id=4252

For me the problem is seen with thunderbird when saving a changed
calendar entry. The change is done by SOGo but the response is wrong,
RFC-wise, so relayd(8) makes it an 500 (Internal Server error) and
Thunderbird throws an error to the user.

Anyways, this works for me:

Index: README
===================================================================
RCS file: /cvs/ports/www/sogo/pkg/README,v
retrieving revision 1.21
diff -u -p -u -r1.21 README
--- README      5 Jul 2017 21:11:50 -0000       1.21
+++ README      10 Oct 2017 11:15:18 -0000
@@ -51,6 +51,95 @@ The SOPE PostgreSQL database adaptor is 
 If you want to use a MySQL database as backend, you have to install
 the sope-mysql package on the host where SOPE and SOGo are installed.
 
+SOGo with base relayd(8) and httpd(8)
+===============
+Edit /etc/relayd.conf
+
+table <httpd> { 127.0.0.1 }
+table <sogo_app> { 127.0.0.1 }
+table <sogo_static> { 127.0.0.1 }
+
+http protocol httpproto {
+        return error
+        block
+
+        match request path "/SOGo/" forward to <sogo_app> tag dav
+        match request path "/SOGo/*" forward to <sogo_app> tag dav
+        match request path "/sogo/" forward to <sogo_app> tag dav
+        match request path "/sogo/*" forward to <sogo_app> tag dav
+        match request path "/SOGo.woa/*" forward to <sogo_static> tag davstat
+
+        match response header remove "Server"
+        match response header set "Connection" value "close"
+
+        match request header set "Keep-Alive" value "$TIMEOUT"
+
+        match request tagged dav header set "X-Real-IP" \
+          value "https://$REMOTE_ADDR";
+        match request tagged dav header set "X-Forwarded-By" \
+          value "$SERVER_ADDR:$SERVER_PORT"
+        match request tagged dav header set "X-Forwarded-For" \
+          value "$REMOTE_ADDR"
+        match request tagged dav header set "Host" value "davhost.dmn.tld"
+        match request tagged dav header set "x-webobjects-server-protocol" \
+          value "HTTP/1.0"
+        match request tagged dav header set "x-webobjects-remote-host" \
+          value "127.0.0.1"
+        match request tagged dav header set "x-webobjects-server-name" \
+          value "davhost.dmn.tld"
+        match request tagged dav header set "x-webobjects-server-url" \
+          value "https://davhost.dmn.tld/";
+        match request tagged dav header set "x-webobjects-server-port" \
+          value "$SERVER_PORT"
+
+        match request url log
+
+        pass request method HEAD
+        pass request method GET
+        pass request method POST
+
+        pass request tagged dav method PUT
+        pass request tagged dav method DELETE
+        pass request tagged dav method MKCOL
+        pass request tagged dav method MOVE
+        pass request tagged dav method OPTIONS
+        pass request tagged dav method PROPFIND
+        pass request tagged dav method REPORT
+
+        tcp { nodelay, sack }
+}
+relay httpredir {
+        listen on 127.0.0.1 port http
+        listen on 127.0.0.1 port http tls
+        protocol httpproto
+        forward to <httpd> port 19000
+        forward to <sogo_app> port 20000
+        forward to <sogo_static> port 18000
+}
+
+# mkdir -p ${VARBASE}/www/htdocs/sogo/SOGo.woa/WebServerResources
+# cp -R ${TRUEPREFIX}/lib/GNUstep/SOGo/WebServerResources \
+    ${VARBASE}/www/htdocs/sogo/SOGo.woa/WebServerResources
+
+Edit /etc/httpd.conf
+
+# redirect from http to https
+server davhost.dmn.tld {
+        listen on 127.0.0.1 port 19000
+        block return 301 "https://davhost.dmn.tld/SOGo/";
+}
+# serve other websites like this
+server some.website.tld {
+        listen on 127.0.0.1 port 19000
+        root "/htdocs/somewebsite"
+}
+# serve sogo static content
+server sogo {
+        listen on 127.0.0.1 port 18000
+        root "/htdocs/sogo"
+        directory no auto index
+}
+
 SOGo with nginx
 ===============
 Since nginx configuration is not explained in the SOGo Manual, here is an 
example.

Reply via email to