Examples

Below are few examples for use in DSL based configuration format and older properties based format.

HTTPS on port 8443 with SSL certificate for example.com

In configuration file httpServer related configuration should look like this:

httpServer {
    connections {
        8443 () {
            socket = ssl
            domain = 'example.com'
        }
    }
}

Changing port from 8080 to 8081

httpServer {
    connections {
        8080 (active: false) {}
        8081 () {}
    }
}

Redirections from HTTP to HTTPS

It’s beneficial to use HTTPS as much as possible, however often it requires adding redirection from http to https. While it’s possible to have it done using external solutions (additional http servers like nginx or apache or some sort of load balancer with such feature) it’s convenient to have it build-in.

Feature implemented in Tigase XMPP Server allows specifying redirectUri which consists of destination hostname and optionally port and path. Specifying any query parameters IS NOT supported. redirectUri has support for {host} variable which can be used to keep original server name in the redirection from the original request, ie. redirectUri = 'https://{host}:8089' to redirect request to the same server but on port 8089 (original path URI and query string will be automatically appended to the redirection URL).

It’s also possible, that Tigase XMPP server handles on it’s plain socket port regular http request as well as https handled by load balancer/proxy that terminates HTTPS traffic and forwards the request using http protocol. In that case unconditional request would result in infinite redirection. Fortunately it’s possible to specify condition under which redirection should happen using redirectCondition option. It has to be set for the redirection to wrok. Currently following values are supported (they should be self-explanatory):

  • never,
  • http,
  • https,
  • always
httpServer {
    connections {
        8080 () {
            redirectCondition = 'http'
            redirectUri = 'https://{host}:443'
        }
    }
}

Usage of Jetty HTTP server as HTTP server

As mentioned before it is possible to use Jetty as HTTP server for improved performance. Jetty API can be used in one of two forms: Standalone and OSGi.

Standalone

In this case the Jetty instance is created and configured internally by Tigase HTTP API. This allows for the same configuration properties used as for default HTTP server configuration.

Configuration with use of standalone Jetty HTTP Server. 

httpServer (class: tigase.http.jetty.JettyStandaloneHttpServer) {
    ...
}

HTTP/2 and Jetty HTTP Server

If Jetty HTTP server is used in standalone mode, JDK which Tigase is using is newer then JDK 8 and HTTP server is configured to serve data over encrypted (ssl or tls) connections then HTTP/2 will be enabled by default.

However it is possible to disable HTTP/2 by setting use-http2 property of encrypted port to false, ie. for port 8443:

httpServer (class: tigase.http.jetty.JettyStandaloneHttpServer) {
    ...
    '8443' () {
        socket = ssl
        'use-http2' = false
    }
}

OSGi

This can only be used when Tigase is running inside OSGi container. If this is used Tigase HTTP API will try to retrieve Jetty HTTP server from OSGi container and use it.

Note

Jetty HTTP server instance is not configured by Tigase. We would only use this instance for deployment.

Configuration in OSGi mode with use of Jetty HTTP Server. 

httpServer (class: tigase.http.jetty.JettyOSGiHttpServer) {
    ...
}