\documentclass{article}
\usepackage{ulem}
\usepackage{graphicx}
\usepackage{hyperref}
\pagestyle{headings}
\begin{document}
\part{Web Server}
Users need a Web Server to interact with Horde Groupware.

\section{Apache Web Server}
\begin{itemize}
\item Version 2.4 is supported


\item Use SSL certificates to enable HTTPS for anything but local test installations. You can get free SSL certificates via letsencrypt.org


\item Use mod\_php to run PHP on the web server or fastcgi and PHP-FPM for larger installations.


\item Enable mod\_rewrite for URL rewriting


\end{itemize}
\subsection{Configuration Highlights}
\begin{itemize}
\item Horde 6 webroot is a sub directory inside the Horde 6 root directory ("/srv/www/horde/")


\item Default Horde configuration depends on <a href="https://wiki.horde.org/AllowOverride">AllowOverride</a> to enable htaccess files. You can migrate the rewrite rules from the htaccess files into your web server config instead. This is less flexible but enables better performance.


\item Some directories need write access for the PHP or web server user:
\begin{itemize}
\item ./web/static


\item ./web/horde/config


\item ./vendor/horde/horde/config


\item ./web/kronolith/config


\item ./vendor/horde/kronolith/config


\item ./web/imp/config


\item ./vendor/horde/imp/config


\item ./var/vfs


\item ./var/tmp


\item ./var/log


\item ./var/cache


\end{itemize}

\end{itemize}
\subsection{Ubuntu and Debian mod\_php Example Virtual Host Config}
cat /etc/apache2/sites-enabled/web.horde.localhost.conf

<pre><code>
<VirtualHost 127.0.0.2:80>
        \# The ServerName directive sets the request scheme, hostname and port that
        \# the server uses to identify itself. This is used when creating
        \# redirection URLs. In the context of virtual hosts, the ServerName
        \# specifies what hostname must appear in the request's Host: header to
        \# match this virtual host. For the default virtual host (this file) this
        \# value is not decisive as it is used as a last resort host regardless.
        \# However, you must set it for any further virtual host explicitly.
        ServerName web.horde.localhost

        ServerAdmin webmaster@localhost
        DocumentRoot /srv/www/horde/web
<Directory /srv/www/horde/web>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

        \# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        \# error, crit, alert, emerg.
        \# It is also possible to configure the loglevel for particular
        \# modules, e.g.
        \#LogLevel info ssl:warn

        ErrorLog /var/www/horde-deployment/var/log/error.log
        CustomLog /var/www/horde-deployment/var/log/access.log combined

        \# For most configuration files from conf-available/, which are
        \# enabled or disabled at a global level, it is possible to
        \# include a line for only one particular virtual host. For example the
        \# following line enables the CGI configuration for this host only
        \# after it has been globally disabled with "a2disconf".
        \#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
</code></pre>
\subsection{<a href="https://wiki.horde.org/OpenSUSE">OpenSUSE</a> mod\_php and HTTPS Vhost config example}
<pre><code>
<VirtualHost \_default\_:443>

        \#  General setup for the virtual host
        DocumentRoot /srv/www/horde/web
        ServerName dev.maintaina.com
        ServerAdmin admin@maintaina.com
        ErrorLog /srv/www/horde/var/log/apache2/error\_log
        TransferLog /srv/www/horde/var/log/apache2/access\_log

        \#   SSL Engine Switch:
        \#   Enable/Disable SSL for this virtual host.
        SSLEngine on

        \#   You can use per vhost certificates if SNI is supported.
        SSLCertificateFile /etc/letsencrypt/live/dev.maintaina.com/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/dev.maintaina.com/privkey.pem

        \# modern configuration, tweak to your needs
        SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
        SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
        SSLHonorCipherOrder     on
        SSLCompression          off
        SSLSessionTickets       off


        \#   Per-Server Logging:
        \#   The home of a custom SSL log file. Use this when you want a
        \#   compact non-error SSL logfile on a virtual host basis.
        CustomLog /var/log/apache2/ssl\_request\_log   ssl\_combined

        \#\# Configure mod\_rewrite for permalink
        <Directory /srv/www/horde/web>
          AllowOverride All
          <FilesMatch "\textbackslash\{\}.php[345]?s\$">
              SetHandler application/x-httpd-php-source
          </FilesMatch>

          DirectoryIndex index.php
          AllowOverride All
          Require all granted
          Options +FollowSymlinks

        </Directory>

</VirtualHost>
</code></pre>
\section{nginx}
Horde works with PHP-FPM and nginx 1.16-22<br />
Detailed instructions TBD

\end{document}
<html>
<head>
<title>Horde :: Fatal Error</title>
<meta charset="utf-8">
</head>
<body style="background:#fff; color:#000">
<h1>A fatal error has occurred</h1>
    <h3>MySQL server has gone away</h3>
    <h3>Details have been logged for the administrator.</h3>
</body>
</html>