Forum Linux.debian/ubuntu Apache Virtualhost et plusieurs machines

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
1
12
août
2019

Bonjour!

Chez moi, j'ai remplacé momentanément un Raspberry par un PC portable afin d'y installer Nextcloud et d'avoir plus de place de stockage. Cependant j'ai d'autres services utiles sur ce Raspberry, et j'aimerai le remettre en fonction.

Je dispose d'un nom de domaine cloud@example.com qui redirige chez moi, j'ai configuré les ports 80 et 443 pour atterrir sur le PC portable (ip 1.2.3.4). J'ai un autre nom de domaine calendar@example.com qui redirige aussi chez moi, et je m'en sers avec les mêmes ports (Apache).

J'aimerai pouvoir configurer le PC portable afin qu'il redirige les requêtes faites avec calendar@example.com vers mon Raspberry (ip 1.2.3.5).

Je crois que c'est faisable avec les Virtualhost, cf la section «Utilisation simultanée de Virtual_host et de mod_proxy». Mais je ne voudrais pas faire de bêtises… Comment dois-je faire pour configurer ça correctement?

Les machines tournent sous Debian 10 / Raspbian 9

  • # Pas de risque de bêtise, RTFM ;-)

    Posté par  . Évalué à 5. Dernière modification le 13 août 2019 à 11:02.

    Je dispose d'un nom de domaine cloud@example.com

    Non, ça c'est une adresse email.

    Je crois que c'est faisable avec les Virtualhost, cf la section «Utilisation simultanée de Virtual_host et de mod_proxy». Mais je ne voudrais pas faire de bêtises… Comment dois-je faire pour configurer ça correctement?

    Il n'y a pas vraiment de gros risque: tu ne perdras pas tes données en faisant ce genre de bêtise.
    En gros, tu vas devoir:

    1. Définir autant de VirtualHost que tu as de sous-domaine (calendar.example.com = 1 Vhost, cloud.example.com = 1 autre Vhost).
    2. Sur le VirtualHost cloud, tu fais pointer ton DocumentRoot vers ton NextCloud.
    3. Sur le VirtualHost calendar, tu utilises les directives ProxyPass et ProxyPassReverse pour aller requêter l'autre machine.

    Tout est couvert sur cette page de la doc Apache.

    • [^] # Re: Pas de risque de bêtise, RTFM ;-)

      Posté par  (site web personnel) . Évalué à 2. Dernière modification le 13 août 2019 à 13:20.

      Je crois que j'ai réussi, partiellement. Les requêtes sur les ports 80 et 443 son bien transmises à mon Raspberry. Par contre j'ai un souci en https: c'est le certificat de mon PC portable qui est présenté, je voudrais que ce soit celui de mon Raspberry (forcément ça génère une erreur). Est ce que c'est possible sans installer ce certificat sur mon PC, que les requêtes soient transmises sans être déchiffrées sur celui-ci?

      Voici ma config SSL sur le PC:

      <IfModule mod_ssl.c>
      <VirtualHost *:443>
              # 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/html
      
              # 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
      
      
      ServerName cloud.example.com
      SSLCertificateFile /etc/letsencrypt/live/cloud.example.com/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/cloud.example.com/privkey.pem
      Include /etc/letsencrypt/options-ssl-apache.conf
      </VirtualHost>
      
      <VirtualHost *:443>
              ProxyPreserveHost On
              ServerName calendar.example.org
              SSLProxyEngine On
              SSLProxyCheckPeerCN on
              SSLProxyCheckPeerExpire on
              ProxyPass        "/" "https://1.2.3.5/"
              ProxyPassReverse "/" "https://1.2.3.5/"
      </VirtualHost>
      
      </IfModule>
      

      Un LUG en Lorraine : https://enunclic-cappel.fr

      • [^] # Re: Pas de risque de bêtise, RTFM ;-)

        Posté par  . Évalué à 4.

        Réponse courte: en HTTP/1.1 c'est mort (pour le use case précis que tu décris). en HTTP/2.0 … je sais pas :-(

        HTTP/1.1

        En HTTP/1.1, cela se passe comme suit:

        1. Le client initie une connection TCP sur le port 443 du serveur.
        2. S'ensuit une négociation de la couche de crypto: le fameux SSL.
        3. Ensuite, une fois le canal de communication chiffré établit, les échanges HTTP commencent réellement.

        Et, toujours en HTTP/1.1, c'est lors de ces échanges HTTP que le serveur va avoir connaissance du FQDN ciblé par la requête via le header Host: … Tu vois, j'imagine, le problème: ton serveur sait qu'il doit faire suivre la requête au pi QUE après avoir établit le canal chiffré, pas possible donc de présenter un autre certificat.

        Tu as dès lors deux alternatives:

        • Tout configurer sur le même nom, genre "home.example.com", "portal.example.com", bref, ce que tu veux et de faire ton routage cloud VS calendar sur une base d'URI:

          • portal.example.com/nextcloud/ => servi via DocumentRoot & co /
          • portal.example.com/calendar/ => servi à coup de ProxyPass.

        A noter que tu te casses p-ê la tête pour rien: Nextcloud gère très bien les calendriers … de ce coup, ta seconde appli pourrait s'avérer inutile …

        • Utiliser un certificat wildcard (*.example.com) sur le Apache de ton laptop, et ne pas te soucier outre mesure de la connection laptop <=> raspi.

        HTTP/2.0

        J'ai cru comprendre qu'HTTP/2.0 levait cette limitation … mais je n'est aucune certitude et une lecture rapide de cette page ne me permet pas d'être fixé.

        Cependant ce lien semble dire que ça marche tout seul …

        • [^] # Re: Pas de risque de bêtise, RTFM ;-)

          Posté par  (site web personnel) . Évalué à 1.

          L'installation de NextCloud est pour un besoin provisoire, je ne vais pas la conserver, alors je souhaite conserver mon agenda habituel. Vu que ce n'est que pour un usage personnel, je vais enregistrer une exception de sécurité dans Thunderbird et ça passera. Merci pour ton aide et tes précisons!

          Un LUG en Lorraine : https://enunclic-cappel.fr

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.