Mon objectif est de fournir un service de messagerie sécurisé à partir d'un nouveau serveur Ubuntu 16.04. Pour ce faire, je souhaite configurer Apache2 avec nginx sous son proxy inverse.
Mon problème immédiat est qu’Apache ne démarre pas, affirmant qu’aucun certificat SSL n’a été attribué (voir la sortie de Terminal à la fin de cette question), même si je n’essaie pas (encore) d’utiliser HTTPS.
Mes questions:
Voici ma compréhension de ce que je dois faire. Je vous serais reconnaissant de bien vouloir indiquer en quoi ma compréhension est erronée.
J'aime traiter un problème à la fois. Je laisse donc de côté la question des certificats SSL et tente de faire fonctionner Apache avec nginx en tant que proxy inverse sur le port 80 uniquement.
Voici les fichiers de configuration que j'ai en place:
nginx
$ Sudo nano /etc/nginx/sites-available/webmail
server {
listen 80;
root /var/www/webmail/web;
index index.php index.html index.htm;
server_name webmail.mydomain.com;
# Look for...
# * the exact path
# * a default (index.*) file, considering the path to be a directory
# ... and if that fails:
# * get the index.php script at the root to deal with the request
location / {
try_files $uri $uri/ /index.php;
}
# If the chosen path leads to a PHP fie:
# * forward the request to Apache running at 127.0.0.1:8080
# * after having modified certain headers
location ~ \.php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $Host;
proxy_pass http://127.0.0.1:8080;
}
# If there are any Apache HT files in the chosen directory
# ignore any direct requests for them
location ~ /\.ht {
deny all;
}
}
Apache2
$ Sudo nano /etc/Apache2/sites-available/webmail.conf
<VirtualHost 127.0.0.1:8080>
ServerName webmail.mydomain.com
ServerAdmin [email protected]
DocumentRoot /var/www/webmail/web
<Directory "/var/www/webmail/web">
Options FollowSymLinks
AllowOverride All
</Directory>
ErrorLog ${Apache_LOG_DIR}/error.log
LogLevel warn
CustomLog ${Apache_LOG_DIR}/access.log combined
</VirtualHost>
ports Apache2
$ Sudo nano /etc/Apache2/ports.conf
Listen 127.0.0.1:8080
#<IfModule ssl_module>
# Listen 443
#</IfModule>
#<IfModule mod_gnutls.c>
# Listen 443
#</IfModule>
Notez que je ne demande pas explicitement à Apache d’écouter sur le port 443. Y at-il un autre emplacement dans un autre fichier de configuration qui indique à Apache d’écouter sur le port 443?
Voici mes fichiers d'espace réservé PHP et HTML, aux emplacements prévus:
index.php
$ Sudo nano /var/www/webmail/web/index.php
<?php
echo "PHP from /var/www/webmail/web/index.php\n";
?>
index.html
$ Sudo nano /var/www/webmail/web/index.html
<html>
HTML from /var/www/webmail/web/index.html
</html>
Dans le navigateur, une demande à http://webmail.mydomain.com/index.html réussit comme prévu, mais une demande à http://webmail.mydomain.com/index .php entraîne le téléchargement du fichier, mais pas son exécution.
Voici ce qui se passe lorsque j'essaie de démarrer Apache2:
$ Sudo /etc/init.d/Apache2 restart
[ ok ] Restarting Apache2 (via systemctl): Apache2.service.
$ Sudo service Apache2 status
* Apache2.service - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/Apache2; bad; vendor preset: enabled)
Drop-In: /lib/systemd/system/Apache2.service.d
`-Apache2-systemd.conf
Active: inactive (dead) since <Time>; 3s ago
Docs: man:systemd-sysv-generator(8)
Process: 16059 ExecStop=/etc/init.d/Apache2 stop (code=exited, status=0/SUCCESS)
Process: 16043 ExecStart=/etc/init.d/Apache2 start (code=exited, status=0/SUCCESS)
systemd[1]: Starting LSB: Apache2 web server...
Apache2[16043]: * Starting Apache httpd web server Apache2
Apache2[16043]: Action 'start' failed.
Apache2[16043]: The Apache error log may have more information.
Apache2[16043]: *
Apache2[16059]: * Stopping Apache httpd web server Apache2
Apache2[16059]: *
systemd[1]: Started LSB: Apache2 web server.
Voici le contenu de error.log:
$ Sudo nano /var/log/Apache2/error.log
[ssl:emerg] [pid 15943] AH02572: Failed to configure at least one certificate and key for myhostname.hostingservice.com:443
[ssl:emerg] [pid 15943] SSL Library Error: error:140A80B1:SSL routines:SSL_CTX_check_private_key:no certificate assigned
[ssl:emerg] [pid 15943] AH02311: Fatal error initialising mod_ssl, exiting. See /var/log/Apache2/error.log for more information
(Ceci est dans var/log/Apache2/error.log, et il n'y a pas plus d'informations.)
Qu'est-ce que j'ai manqué?
REMARQUE: L'objectif principal de ce serveur est de fournir une application Meteor. J'ai choisi de le faire avec Phusion Passenger et Nginx. En plus du service de messagerie, Apache sera également utilisé pour livrer un site WordPress.
Je le travaille maintenant. J'avais négligé de supprimer /etc/Apache2/sites-disabled/default-ssl.conf
, Apache essayait donc de faire fonctionner un site sécurisé inutile.
J'ai par la suite utilisé Sudo certbot --nginx
pour obtenir un certificat pour Nginx, et maintenant tout fonctionne correctement.