Mattermost, Inc.

IOS Only Websocket issue

Summary

I receive the “Please check connection, Mattermost unreachable.” error, but only IOS devices.

This is very similar to a few similar topics. Such as [SOLVED] Mattermost websocket error, but I’ve tried similar fixes and nothing seems to work.

I have a windows setup, using iis, arr, I have feeling it’s to do with the reverse proxy, but I can’t nail down what it is.

I’ve tried setting the cors to * and our domain ie chat.foremostgolf.com
I’ve tried setting the HTTP_SEC_WEBSOCKET_EXTENSIONS value.

I have the latest version of mattermost installed. Mattermost Version: 5.18.0.

The system works perfectly on desktop and android.

I have the following settings.

"ServiceSettings": {
    "SiteURL": "https://chat.foremostgolf.com",
    "WebsocketURL": "",
    "LicenseFileLocation": "",
    "ListenAddress": ":8065",
    "Forward80To443": true,
    "TrustedProxyIPHeader": [
        "X-Forwarded-For",
        "X-Real-IP"
    ],
    "AllowCorsFrom": "*",
}

And

                </serverVariables>
            </rule>
			
        </rules>
		
        <rewriteMaps>
            <rewriteMap name="HTTP_SEC_WEBSOCKET_EXTENSIONS">
                <add key="" value="" />
            </rewriteMap>
        </rewriteMaps>
        <outboundRules>
            <rule name="ReverseProxyOutboundRule2" preCondition="NeedsRestoringAcceptEncoding">
                <match filterByTags="A, Form, Img" pattern="^http(s)?://192.168.1.33:8065/(.*)" />
                <action type="Rewrite" value="http{R:1}://chat.foremostgolf.com/{R:2}" />
            </rule>
            <rule name="Content-Security-Policy">
                <match serverVariable="RESPONSE_Content-Security-Policy" pattern=".*" />
                <action type="Rewrite" />
            </rule>
            <rule name="X-Frame-Options">
                <match serverVariable="RESPONSE_X-Frame-Options" pattern=".*" />
                <action type="Rewrite" />
            </rule>
            <preConditions>
                <preCondition name="ResponseIsHtml1">
                    <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
                </preCondition>
				<preCondition name="NeedsRestoringAcceptEncoding">
    <tracing>
        <traceFailedRequests>
           <remove path="*" />
            <add path="*">
                <traceAreas>
                    <add provider="WWW Server" areas="Rewrite" verbosity="Verbose" />
                </traceAreas>
                <failureDefinitions timeTaken="00:00:00" statusCodes="101" verbosity="Error" />
            </add>
        </traceFailedRequests>
    </tracing>
    <security>
        <requestFiltering allowDoubleEscaping="true" />
    </security>

</system.webServer>