# This is a sample file demonstrating how to set up reverse-proxy for matrix.DOMAIN <VirtualHost *:80> ServerName matrix.DOMAIN ProxyVia On # Map /.well-known/acme-challenge to the certbot server # If you manage SSL certificates by yourself, this will differ. <Location /.well-known/acme-challenge> ProxyPreserveHost On ProxyPass http://127.0.0.1:2402/.well-known/acme-challenge </Location> Redirect permanent / https://matrix.DOMAIN/ </VirtualHost> # Client-Server API <VirtualHost *:443> ServerName matrix.DOMAIN SSLEngine On # If you manage SSL certificates by yourself, these paths will differ. SSLCertificateFile /matrix/ssl/config/live/matrix.DOMAIN/fullchain.pem SSLCertificateKeyFile /matrix/ssl/config/live/matrix.DOMAIN/privkey.pem SSLProxyEngine on SSLProxyProtocol +TLSv1.2 +TLSv1.3 SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH ProxyPreserveHost On ProxyRequests Off ProxyVia On RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} # Keep some URIs free for different proxy/location ProxyPassMatch ^/.well-known/matrix/client ! ProxyPassMatch ^/.well-known/matrix/server ! ProxyPassMatch ^/_matrix/identity ! ProxyPassMatch ^/_matrix/client/r0/user_directory/search ! # Proxy all remaining traffic to Synapse AllowEncodedSlashes NoDecode ProxyPass /_matrix http://127.0.0.1:8008/_matrix retry=0 nocanon ProxyPassReverse /_matrix http://127.0.0.1:8008/_matrix ProxyPass /_synapse/client http://127.0.0.1:8008/_synapse/client retry=0 nocanon ProxyPassReverse /_synapse/client http://127.0.0.1:8008/_synapse/client # Proxy Admin API (necessary for Synapse-Admin) # ProxyPass /_synapse/admin http://127.0.0.1:8008/_synapse/admin retry=0 nocanon # ProxyPassReverse /_synapse/admin http://127.0.0.1:8008/_synapse/admin # Proxy Synapse-Admin # ProxyPass /synapse-admin http://127.0.0.1:8766 retry=0 nocanon # ProxyPassReverse /synapse-admin http://127.0.0.1:8766 # Map /.well-known/matrix/client for client discovery Alias /.well-known/matrix/client /matrix/static-files/.well-known/matrix/client <Files "/matrix/static-files/.well-known/matrix/client"> Require all granted </Files> <Location "/.well-known/matrix/client"> Header always set Content-Type "application/json" Header always set Access-Control-Allow-Origin "*" </Location> # Map /.well-known/matrix/server for server discovery Alias /.well-known/matrix/server /matrix/static-files/.well-known/matrix/server <Files "/matrix/static-files/.well-known/matrix/server"> Require all granted </Files> <Location "/.well-known/matrix/server"> Header always set Content-Type "application/json" </Location> <Directory /matrix/static-files/.well-known/matrix/> AllowOverride All # Apache 2.4: Require all granted # Or for Apache 2.2: #order allow,deny </Directory> # Map /_matrix/identity to the identity server <Location /_matrix/identity> ProxyPass http://127.0.0.1:8090/_matrix/identity nocanon </Location> # Map /_matrix/client/r0/user_directory/search to the identity server <Location /_matrix/client/r0/user_directory/search> ProxyPass http://127.0.0.1:8090/_matrix/client/r0/user_directory/search nocanon </Location> ErrorLog ${APACHE_LOG_DIR}/matrix.DOMAIN-error.log CustomLog ${APACHE_LOG_DIR}/matrix.DOMAIN-access.log combined </VirtualHost> # Server-Server (federation) API # Use this apache reverse proxy template to enable matrix server-to-server federation traffic # Be sure that network traffic on port 8448 is possible # # You can check your federation config at https://federationtester.matrix.org/ # Enter there your base DOMAIN address, NOT your matrix.DOMAIN address, ex. https://DOMAIN # # In this example we use all services on the same machine (127.0.0.1) but you can do this with different machines. # If you do so be sure to reach the destinated IPADRESS and the correspondending port. Check this with netstat, nmap or your favourite tool. Listen 8448 <VirtualHost *:8448> ServerName matrix.DOMAIN SSLEngine On # If you manage SSL certificates by yourself, these paths will differ. SSLCertificateFile /matrix/ssl/config/live/matrix.DOMAIN/fullchain.pem SSLCertificateKeyFile /matrix/ssl/config/live/matrix.DOMAIN/privkey.pem SSLProxyEngine on SSLProxyProtocol +TLSv1.2 +TLSv1.3 SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH ProxyPreserveHost On ProxyRequests Off ProxyVia On RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} # Proxy all remaining traffic to the Synapse port # Beware: In this example the local traffic goes to the local synapse server at 127.0.0.1 # Of course you can use another IPADRESS in case of using other synapse servers in your network AllowEncodedSlashes NoDecode ProxyPass /_matrix http://127.0.0.1:8048/_matrix retry=0 nocanon ProxyPassReverse /_matrix http://127.0.0.1:8048/_matrix ErrorLog ${APACHE_LOG_DIR}/matrix.DOMAIN-error.log CustomLog ${APACHE_LOG_DIR}/matrix.DOMAIN-access.log combined </VirtualHost>