These examples assume that Kavita is running on host 192.168.0.152 port 5000, and that apache is being used for SSL termination (Kavita is running http).

If you intend for apache to serve http alone, rather than https with a redirect for http, you will need to make your virtualhost definitions use port 80, and remove all of the config lines starting with SSL. If upstream is running serving https, you’ll need to modify the proxy lines to reference https and the websocket lines to reference wss instead of ws.

Basic Apache2 Example

<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerName example.com
        SSLEngine on
        SSLProxyEngine on
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off
        SSLCertificateFile /etc/univention/letsencrypt/signed_chain.crt
        SSLCertificateKeyFile /etc/letsencrypt/domain.key
        SSLCACertificateFile /etc/ssl/ucsCA/CAcert.pem
        SSLCertificateChainFile /etc/letsencrypt/intermediate.pem
        ErrorLog ${APACHE_LOG_DIR}/proxy-error.log
        CustomLog ${APACHE_LOG_DIR}/proxy-access.log combined
        ProxyPass / http://192.168.0.152:5000/
        ProxyPassReverse / http://192.168.0.152:5000/
        ProxyPreserveHost On
        ProxyRequests Off
        RewriteEngine On
        RewriteCond %{HTTP:UPGRADE} ^.*WebSocket.*$ [NC]
        RewriteCond %{HTTP:CONNECTION} ^.*Upgrade.*$ [NC]
        RewriteRule .* ws://192.168.0.152:5000%{REQUEST_URI} [P]
        RequestHeader set X-Forwarded-Proto "https"
        RequestHeader set X-Forwarded-Port "443"
        RequestHeader set X-Forwarded-For "%{REMOTE_ADDR}e"
</VirtualHost>
</IfModule>

Kavita on a new domain/subdomain

<VirtualHost *:80>
# Since, We are using HTTPS, we redirect all HTTP queries to HTTPS.
# If you want to use HTTP only, then copy the 4 lines that start with Proxy and 3 lines that start with Rewrite below and paste them here. Also delete/comment out the redirect line, and the entire second virtualhost block.
        ServerName subdomain.example.com
# ServerName is the name of the domain/subdomain Kavita is being hosted on.
        Redirect permanent / https://subdomain.example.com
</VirtualHost>
<VirtualHost *:443>
    ServerName subdomain.example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
# This specifies the location where your logs are stored. By default, it is stored in a combined log with all other apache configs.

    SSLEngine on
    SSLProxyEngine on
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off
# All of these are for the SSL and Reverse Proxy. If you need more info, refer here https://httpd.apache.org/docs/2.4/mod/mod_ssl.html

    SSLCertificateFile /etc/univention/letsencrypt/signed_chain.crt
    SSLCertificateKeyFile /etc/letsencrypt/domain.key
    SSLCACertificateFile /etc/ssl/ucsCA/CAcert.pem
    SSLCertificateChainFile /etc/letsencrypt/intermediate.pem
# Since we are using SSL, we will have to give locations for all the SSL Certificates. Note - Apache must be able to go into the directories you mention in the path above. (This means that the directory needs to have o+x or have apache as user or group of the directory.)

    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / http://192.168.0.152:5000/
    ProxyPassReverse / http://192.168.0.152:5000/
    RewriteCond %{HTTP:UPGRADE} ^.*WebSocket.*$ [NC]
    RewriteCond %{HTTP:CONNECTION} ^.*Upgrade.*$ [NC]
    RewriteRule .* ws://192.168.0.152:5000%{REQUEST_URI} [P]
# For more info on Apache Proxy Config, see here https://httpd.apache.org/docs/2.4/mod/mod_proxy.html
# These lines tell Apache to send all requests to the root of the domain (/) to (http://192.168.0.152:5000/)
# The example assumes that Kavita is hosted on the IP 192.168.0.152. Use localhost if Kavita is on the same machine as Apache.
    
</VirtualHost>

Kavita on an existing domain with subpath

When using this, make sure you set the Base URL field in Kavita Settings.

<VirtualHost *:80>
# Since, We are using HTTPS, we redirect all HTTP queries to HTTPS.
# If you want to use HTTP only, then copy the 9 lines below and paste them here
      <...Your existing config lines go here...>
</VirtualHost>
<VirtualHost *:443>
<...Your existing config lines go here ...>
ProxyPreserveHost On
ProxyRequests Off
<Location /kavita>
        ProxyPass http://192.168.0.152:5000
        ProxyPassReverse http://192.168.0.152:5000
        RewriteCond %{HTTP:UPGRADE} ^.*WebSocket.*$ [NC]
        RewriteCond %{HTTP:CONNECTION} ^.*Upgrade.*$ [NC]
        RewriteRule .* ws://192.168.0.152:5000%{REQUEST_URI} [P]
</Location>
# For HTTP config, the above 9 lines need to be copied and pasted.
# These lines tell Apache to send all requests from the subpath of the domain (/kavita) to (http://192.168.0.152:5000/)
# The example assumes that Kavita is hosted on the IP 192.168.0.152. Use localhost if Kavita is on the same machine as Apache.
    <... Your existing config lines go here...>
</VirtualHost>