====== Apache server configuration ====== ===== Packages ===== To install Apache and PHP on Ubuntu: sudo apt install apache2 sudo apt install php libapache2-mod-php ===== Process control and status check ===== sudo systemctl start apache2 sudo systemctl stop apache2 sudo systemctl restart apache2 sudo systemctl status apache2 ===== Configuration ===== * the configuration file is: ''/etc/apache2/sites-available/000-default.conf'' * Directory listing * To disable directory listing * add ''Options -Indexes'' in the global configuration file ''/etc/apache2/sites-available/000-default.conf'' * To enable directory listing in a specific directory * add a ''.htaccess'' file inside the directory * Within the ''.htaccess'' file, specify ''Options +Indexes'' * Sample configuration: # 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 www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www Options -Indexes +FollowSymLinks AllowOverride all Options -Indexes +FollowSymLinks +MultiViews AllowOverride all Order allow,deny allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all # 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 ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/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 Alias /webdav /var/www/webdav/web DAV On AuthType Basic AuthName "webdav" AuthUserFile /var/www/webdav/passwd.dav Require valid-user # vim: syntax=apache ts=4 sw=4 sts=4 sr noet ===== Update ===== # for Ubuntu 20.04.5 LTS; 2022/11/02 # to update beyond Apache/2.4.41 $ apache2 -v Server version: Apache/2.4.41 (Ubuntu) Server built: 2022-06-14T13:30:55 $ sudo add-apt-repository ppa:ondrej/apache2 $ sudo apt update $ sudo apt install apache2 $ apache2 -v Server version: Apache/2.4.54 (Ubuntu) Server built: 2022-06-08T15:59:07 $ systemctl status apache2 $ sudo systemctl start apache2 $ sudo systemctl enable apache2 ===== Password protection ===== Inside the directory to be protected, add a ''.htaccess'' file AuthType Basic AuthName "Password Protected Area" AuthUserFile /PATH/.htpasswd require valid-user ''/PATH/.htpasswd'' should not be readable through a URL for safety. to generate ''/PATH/.htpasswd'': htpasswd –c /PATH/.htpasswd USER the ''-c'' option is for creating the file (1st time use). Too add more users, remove the ''-c'' option ===== HTTPS/SSL ===== * Use [[https://letsencrypt.org/|Let's Encrypt]] with [[https://certbot.eff.org/|certbot]] * install: # require snapd; pre-installed on Ubuntu 20.04 # remove the pre-installed cerbot (if present) $ sudo apt remove certbot # install certbot using snap $ sudo snap install --classic certbot # get a certificate; two options # (1) get a certificate without changing the Apache configuration $ sudo certbot certonly --apache # (2) get a certificate and have certbot edit the Apache configuration $ sudo certbot --apache # # check status $ sudo systemctl status certbot.timer # test renewal $ sudo certbot renew --dry-run # manual renewal; not recommended # better to put '/usr/bin/certbot renew --quiet' in crontab $ sudo certbot renew # enable ssl $ sudo a2enmod ssl * modify ''/etc/apache2/sites-available/000-default.conf'' accordingly ServerName example.com ServerAdmin admin@example.com * SSL test: [[https://www.ssllabs.com/ssltest/]] ===== PHP ===== ==== Info ==== To find out the ''uid'' and ''gid'', execute the following script: Under a standard installation, both the ''uid'' and the ''gid'' are ''www-data'' ==== Problems and solutions==== If the browser asks to download the php files (instead of parsing them), comment all lines from to the next in ''/etc/apache2/mods-available/php5.conf'' and restart apache2. ===== Dokuwiki Installation ===== ==== Permissions ==== Make the permissions more restrictive for security reasons. Assuming that the wiki is installed in ''/var/www/wiki'' # change the ownership sudo chown -R www-data:adm /var/www/wiki # restrict access by other sudo chmod -R o-rwx /var/www/wiki ===== WebDAV ===== ==== Enable the WebDAV modules ==== # Enable the WebDAV modules sudo a2enmod dav_fs sudo a2enmod dav # Restart Apache: sudo /etc/init.d/apache2 restart ==== Creating a virtual host ==== The following example uses the directory ''/var/www/webdav/web'' for the virtual host. # create the directory sudo mkdir -p /var/www/webdav/web # change ownership sudo chown -R www-data:adm /var/www/webdav # configure the virtual host For WebDAV # create the WebDAV password file with the user test # the -c switch creates the file if it does not exist sudo htpasswd -c /var/www/webdav/passwd.dav test # change the ownership and permissions sudo chown www-data:adm /var/www/webdav/passwd.dav sudo chmod 640 /var/www/webdav/passwd.dav # backup the vhost configuration sudo cp -p /etc/apache2/sites-available/default /etc/apache2/sites-available/default.bak # modify the vhost configuration sudo emacs /etc/apache2/sites-available/default Add the following part: Alias /webdav /var/www/webdav/web DAV On AuthType Basic AuthName "webdav" AuthUserFile /var/www/webdav/passwd.dav Require valid-user The Alias directive makes (together with ) that when you call /webdav, WebDAV is invoked, but you can still access the whole document root of the vhost. All other URLs of that vhost are still "normal" HTTP. # Reload apache afterwards: sudo /etc/init.d/apache2 reload ==== Testing WebDAV ==== # install cadaver, a command-line WebDAV client sudo aptitude install cadaver # To test if WebDAV works, type cadaver http://localhost/webdav/ ==== References ==== * [[https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04]] * [[https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-18-04]]