.. _installation apache: ====== Apache ====== .. _Apache: https://httpd.apache.org/ .. _Apache Debian: https://cwiki.apache.org/confluence/display/HTTPD/DistrosDefaultLayout#DistrosDefaultLayout-Debian,Ubuntu(Apachehttpd2.x): .. _apache2.README.Debian: https://salsa.debian.org/apache-team/apache2/raw/master/debian/apache2.README.Debian .. _Apache Arch Linux: https://wiki.archlinux.org/index.php/Apache_HTTP_Server .. _Apache Fedora: https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-apache-http-server/index.html .. _Apache directives: https://httpd.apache.org/docs/trunk/mod/directives.html .. _Getting Started: https://httpd.apache.org/docs/current/en/getting-started.html .. _Terms Used to Describe Directives: https://httpd.apache.org/docs/current/en/mod/directive-dict.html .. _Configuration Files: https://httpd.apache.org/docs/current/en/configuring.html .. _ProxyPreserveHost: https://httpd.apache.org/docs/trunk/mod/mod_proxy.html#proxypreservehost .. _LoadModule: https://httpd.apache.org/docs/mod/mod_so.html#loadmodule .. _IncludeOptional: https://httpd.apache.org/docs/mod/core.html#includeoptional .. _DocumentRoot: https://httpd.apache.org/docs/trunk/mod/core.html#documentroot .. _Location: https://httpd.apache.org/docs/trunk/mod/core.html#location .. _uWSGI Apache support: https://uwsgi-docs.readthedocs.io/en/latest/Apache.html .. _mod_proxy_uwsgi: https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-proxy-uwsgi .. _mod_proxy_http: https://httpd.apache.org/docs/current/mod/mod_proxy_http.html .. _mod_proxy: https://httpd.apache.org/docs/current/mod/mod_proxy.html This section explains how to set up a SearXNG instance using the HTTP server Apache_. If you did use the :ref:`installation scripts` and do not have any special preferences you can install the :ref:`SearXNG site ` using :ref:`searxng.sh `: .. code:: bash $ sudo -H ./utils/searxng.sh install apache If you have special interests or problems with setting up Apache, the following section might give you some guidance. .. sidebar:: further read - `Apache Arch Linux`_ - `Apache Debian`_ - `apache2.README.Debian`_ - `Apache Fedora`_ - `Apache directives`_ .. contents:: :depth: 2 :local: :backlinks: entry The Apache HTTP server ====================== If Apache_ is not installed, install it now. If apache_ is new to you, the `Getting Started`_, `Configuration Files`_ and `Terms Used to Describe Directives`_ documentation gives first orientation. There is also a list of `Apache directives`_ *to keep in the pocket*. .. tabs:: .. group-tab:: Ubuntu / debian .. code:: bash sudo -H apt-get install apache2 .. group-tab:: Arch Linux .. code:: bash sudo -H pacman -S apache sudo -H systemctl enable httpd sudo -H systemctl start http .. group-tab:: Fedora / RHEL .. code:: bash sudo -H dnf install httpd sudo -H systemctl enable httpd sudo -H systemctl start httpd Now at http://localhost you should see some kind of *Welcome* or *Test* page. How this default site is configured, depends on the linux distribution (compare `Apache directives`_). .. tabs:: .. group-tab:: Ubuntu / debian .. code:: bash less /etc/apache2/sites-enabled/000-default.conf In this file, there is a line setting the `DocumentRoot`_ directive: .. code:: apache DocumentRoot /var/www/html And the *welcome* page is the HTML file at ``/var/www/html/index.html``. .. group-tab:: Arch Linux .. code:: bash less /etc/httpd/conf/httpd.conf In this file, there is a line setting the `DocumentRoot`_ directive: .. code:: apache DocumentRoot "/srv/http" Options Indexes FollowSymLinks AllowOverride None Require all granted The *welcome* page of Arch Linux is a page showing the directory located at ``DocumentRoot``. This *directory* page is generated by the Module `mod_autoindex `_: .. code:: apache LoadModule autoindex_module modules/mod_autoindex.so ... Include conf/extra/httpd-autoindex.conf .. group-tab:: Fedora / RHEL .. code:: bash less /etc/httpd/conf/httpd.conf In this file, there is a line setting the ``DocumentRoot`` directive: .. code:: apache DocumentRoot "/var/www/html" ... AllowOverride None # Allow open access: Require all granted On fresh installations, the ``/var/www`` is empty and the *default welcome page* is shown, the configuration is located at:: less /etc/httpd/conf.d/welcome.conf .. _Debian's Apache layout: Debian's Apache layout ---------------------- Be aware, Debian's Apache layout is quite different from the standard Apache configuration. For details look at the apache2.README.Debian_ (``/usr/share/doc/apache2/README.Debian.gz``). Some commands you should know on Debian: * :man:`apache2ctl`: Apache HTTP server control interface * :man:`a2enmod`, :man:`a2dismod`: switch on/off modules * :man:`a2enconf`, :man:`a2disconf`: switch on/off configurations * :man:`a2ensite`, :man:`a2dissite`: switch on/off sites .. _apache modules: Apache modules -------------- To load additional modules, in most distributions you have to uncomment the lines with the corresponding LoadModule_ directive, except in :ref:`Debian's Apache layout`. .. tabs:: .. group-tab:: Ubuntu / debian :ref:`Debian's Apache layout` uses :man:`a2enmod` and :man:`a2dismod` to activate or disable modules: .. code:: bash sudo -H a2enmod ssl sudo -H a2enmod headers sudo -H a2enmod proxy sudo -H a2enmod proxy_http sudo -H a2enmod proxy_uwsgi .. group-tab:: Arch Linux In the ``/etc/httpd/conf/httpd.conf`` file, activate LoadModule_ directives: .. code:: apache LoadModule ssl_module modules/mod_ssl.so LoadModule headers_module modules/mod_headers.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so .. group-tab:: Fedora / RHEL In the ``/etc/httpd/conf/httpd.conf`` file, activate LoadModule_ directives: .. code:: apache LoadModule ssl_module modules/mod_ssl.so LoadModule headers_module modules/mod_headers.so LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so .. _apache sites: Apache sites ------------ .. tabs:: .. group-tab:: Ubuntu / debian In :ref:`Debian's Apache layout` you create a ``searxng.conf`` with the ```` directive and save this file in the *sites available* folder at ``/etc/apache2/sites-available``. To enable the ``searxng.conf`` use :man:`a2ensite`: .. code:: bash sudo -H a2ensite searxng.conf .. group-tab:: Arch Linux In the ``/etc/httpd/conf/httpd.conf`` file add a IncludeOptional_ directive: .. code:: apache IncludeOptional sites-enabled/*.conf Create two folders, one for the *available sites* and one for the *enabled sites*: .. code:: bash mkdir -p /etc/httpd/sites-available mkdir -p /etc/httpd/sites-enabled Create configuration at ``/etc/httpd/sites-available`` and place a symlink to ``sites-enabled``: .. code:: bash sudo -H ln -s /etc/httpd/sites-available/searxng.conf \ /etc/httpd/sites-enabled/searxng.conf .. group-tab:: Fedora / RHEL In the ``/etc/httpd/conf/httpd.conf`` file add a IncludeOptional_ directive: .. code:: apache IncludeOptional sites-enabled/*.conf Create two folders, one for the *available sites* and one for the *enabled sites*: .. code:: bash mkdir -p /etc/httpd/sites-available mkdir -p /etc/httpd/sites-enabled Create configuration at ``/etc/httpd/sites-available`` and place a symlink to ``sites-enabled``: .. code:: bash sudo -H ln -s /etc/httpd/sites-available/searxng.conf \ /etc/httpd/sites-enabled/searxng.conf .. _apache searxng site: Apache's SearXNG site ===================== .. _mod_uwsgi: https://uwsgi-docs.readthedocs.io/en/latest/Apache.html#mod-uwsgi .. sidebar:: uWSGI Use mod_proxy_uwsgi_ / don't use the old mod_uwsgi_ anymore. To proxy the incoming requests to the SearXNG instance Apache needs the mod_proxy_ module (:ref:`apache modules`). .. sidebar:: HTTP headers With ProxyPreserveHost_ the incoming ``Host`` header is passed to the proxied host. Depending on what your SearXNG installation is listening on, you need a http mod_proxy_http_) or socket (mod_proxy_uwsgi_) communication to upstream. The :ref:`installation scripts` installs the :ref:`reference setup ` and a :ref:`uwsgi setup` that listens on a socket by default. You can install and activate your own ``searxng.conf`` like shown in :ref:`apache sites`. .. tabs:: .. group-tab:: socket .. kernel-include:: $DOCS_BUILD/includes/searxng.rst :start-after: START apache socket :end-before: END apache socket .. group-tab:: http .. kernel-include:: $DOCS_BUILD/includes/searxng.rst :start-after: START apache http :end-before: END apache http .. _restart apache: Restart service: .. tabs:: .. group-tab:: Ubuntu / debian .. code:: bash sudo -H systemctl restart apache2 sudo -H service uwsgi restart searxng .. group-tab:: Arch Linux .. code:: bash sudo -H systemctl restart httpd sudo -H systemctl restart uwsgi@searxng .. group-tab:: Fedora / RHEL .. code:: bash sudo -H systemctl restart httpd sudo -H touch /etc/uwsgi.d/searxng.ini disable logs ============ For better privacy you can disable Apache logs. In the examples above activate one of the lines and `restart apache`_: .. code:: apache SetEnvIf Request_URI "/searxng" dontlog # CustomLog /dev/null combined env=dontlog The ``CustomLog`` directive disables logs for the entire (virtual) server, use it when the URL of the service does not have a path component (``/searxng``), so when SearXNG is located at root (``/``).