1 votes

Comment établir un proxy inverse d'un sous-domaine vers un autre ordinateur de mon réseau local, sous OS X Server ?

Visualisez ce résultat :

  1. site1.example.com -> mon unique IP publique -> Transfert de port 80 et 443 vers le LAN 192.168.1.10 Mac en marche Serveur OS X 4.1 sur OS X 10.10 Yosemite
  2. site2.example.com -> mon unique IP publique -> LAN 192.168.1.10 -> proxy inverse ? -> :80 et :443 sur le réseau local 192.168.1.15

Je me trouve sur un réseau où je n'ai pas la possibilité d'ajouter une autre IP publique.

#1 est déjà en place et fonctionne bien.

#2 est la partie la plus difficile, principalement parce que je suis en train de courir Serveur OS X sur le #1, et la configuration du proxy ne semble pas être la un Apache relativement simple par exemple :

<VirtualHost *:80 *:443>
     ServerName site2.example.com

     ProxyRequests off
     ProxyPass / http://192.168.1.15/
     ProxyPassReverse / http://192.168.1.15/
</VirtualHost>

En d'autres termes, le serveur OS X a placé les fichiers de configuration d'Apache à des endroits bizarres et, d'après ce que j'ai compris, il aime les écraser lorsque de nouvelles modifications sont apportées dans l'interface graphique. J'essaie donc de trouver la "bonne" façon de procéder sous OS X Server.

Un de mes amis a suggéré qu'il pourrait y avoir un moyen de le faire avec OS X Server. webappctl et l'écriture d'une commande webapp.plist bien que le Travailler avec des applications web de la documentation du serveur OS X ne contient pratiquement aucun détail. En regardant le man pages qu'Apple suggère et leur exemple de fichier .plist, il me semble que leur idée d'une "application web" vraiment veut être rattaché à un répertoire (c'est-à-dire site1.example.com/webapp), et non pas à un sous-domaine (comme dans #2 ci-dessus). Peut-être n'ai-je pas encore bien compris le formatage du fichier .plist ?

Quelle est la "bonne" façon de procéder sous OS X Server ?

0 votes

Je ne connais pas la réponse à votre question, car je n'utilise pas OS X Server. Très peu de personnes ici l'utilisent, donc malheureusement, il est peu probable que vous obteniez une réponse. Je suis désolé. Mais en attendant, nous avons des normes sur la façon dont les questions doivent être écrites et cela aide le site dans son ensemble de les maintenir.

0 votes

De même, les questions relatives aux réseaux domestiques sont hors sujet hier.

0 votes

Modifier votre question n'est pas "vous distinguer". C'est améliorer la question, et c'est une fonctionnalité de base de tous les sites Stack Exchange.

0voto

Dana the Sane Points 7976

Je pense que votre ami pourrait être sur quelque chose avec la webappctl chemin. Mais commençons par Apache : lorsqu'il utilise le serveur OS X, Apache extrait sa configuration de l'emplacement suivant /Library/Server/Web/Config/apache2 . Ce répertoire contient un fichier ReadMe.txt qui dit en partie :

sites/

Ce répertoire contient un fichier pour chaque hôte virtuel activé configuré pour le Service des sites Web par l'application Serveur. Son contenu contenu est lu par Apache grâce à plusieurs directives "Include" dans le fichier httpd_server_app.conf.

...

Ces fichiers sont modifiés par la partie résidant sur le serveur du Serveur et par webappctl(8). Les administrateurs peuvent apporter des modifications directement dans ce fichier, ainsi que dans les fichiers d'hôte virtuel personnalisés, mais il est fortement recommandé que l'administrateur place les modifications dans des fichiers "séparés et d'utiliser le mécanisme webapp.plist(8) en conjonction avec le mécanisme webappctl(8). avec l'outil de ligne de commande webappctl(8) pour les gérer. Voir les directives d'édition en haut de ces fichiers.

OK, ça semble raisonnable. En regardant plus loin dans le répertoire de configuration d'Apache, on trouve la référence suivante sites ainsi que le sous-répertoire webapps . Ce dernier contient une série de plists décrivant les services Web d'OS X Server, ainsi qu'une plist nommée com.example.mywebapp.plist . En haut de ce fichier, il y a quelques éléments intéressants :

  • El includeFiles qui semble contenir un tableau de chemins vers des inclusions personnalisées. .conf les fichiers que la webapp veut
  • El proxies qui correspond à la clé Apache ProxyPass / ProxyPassReverse des directives pour une autre application

Bien que je ne l'aie pas testé moi-même, je vous suggère d'essayer d'ajouter vous-même un plist dans ce répertoire en utilisant le même schéma de nom de reverse-DNS : copy com.example.mywebapp.plist a com.example.site2.plist . Une fois que vous avez votre propre copie, vous pouvez supprimer la plupart des éléments inutiles, puis modifier le texte. proxies pour faire référence à votre propre URL au lieu de l'exemple de chemin qu'ils proposent.

Si cela ne fonctionne pas, vous pouvez appliquer un marteau légèrement plus gros et créer un inclusif. .conf qui contient les directives Apache de la question, en le plaçant dans le répertoire de configuration Apache du serveur. Une fois que c'est fait, laissez tomber le fichier proxies de votre plist webapp, et utilisez à la place la clé includeFiles pour tirer dans ce .conf archivo.

D'une manière ou d'une autre, une fois que le plist webapp est en place, utilisez webappctl (en tant que root) pour lancer l'application nouvellement créée :

$ sudo webappctl start com.example.site2

Cela devrait soit réussir (en retournant le code de sortie 0), soit - avec un peu de chance - échouer avec des informations qui vous permettront d'affiner la plist de la webapp. (Encore une fois, tout ceci n'est pas testé, et n'est qu'un point de départ).

Si vous décidez d'utiliser un produit personnalisé inclus .conf que vous référencez à partir du plist webapp, ce n'est pas non plus une mauvaise idée de conserver une sauvegarde de ce fichier quelque part, afin que les futures mises à jour d'OS X ou de Server.app ne l'effacent pas. Alors que l'Apache de Server ReadMe.txt ne dit pas explicitement qu'ils sera effacer les configurations générées par les utilisateurs, il n'est pas dit qu'ils ne le fera pas non plus. Mieux vaut prévenir que guérir.

Bonne chance !

0 votes

J'ai essayé d'ajouter la .plist, mais rien n'y fait, et cela semble également avoir fait flipper OS X Server, me donnant des erreurs 503 sur tous les services web. Lorsque j'ai supprimé la .plist et redémarré les services, il me donnait toujours des 503, alors je suis revenu à la configuration initiale avec une sauvegarde Time Machine. J'essaierai à nouveau la semaine prochaine.

0voto

swizzlevixen Points 111

Cette question a été posée à l'origine à propos de Mac OS X Server 4.1, mais comme les numéros de version des logiciels ont évolué et que je viens juste de réussir à faire fonctionner ce système, cette réponse est écrite à partir de macOS Server 5.2. Server 5 change apparemment un peu les choses en ce sens que chaque dans le serveur est maintenant derrière un proxy inverse maître, donc ces instructions ne fonctionneront pas avec le serveur 4.1.

Fichiers de configuration

Créez le fichier de configuration de la web app sur la machine macOS Server, dans /Library/Server/Web/Config/apache2/httpd_site2webapp.conf pointant vers l'adresse IP de la site2 serveur.

ProxyPreserveHost On
ProxyPassReverse / http://192.168.1.15:80/
ProxyPass / http://192.168.1.15:80/
ServerName site2.example.com

Ensuite, dans /Library/Server/Web/Config/apache2/webapps/com.example.site2webapp.plist ajoutez ce qui suit, en faisant référence à l'emplacement de l'interface utilisateur. .conf fichier ci-dessus :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<!-- See man pages for webapp.plist(5) and webappctl(8) for information about this example webapp.plist -->

<plist version="1.0">
    <dict>
        <key>includeFiles</key>
            <array> <!-- Include files are activated in virtual host when webapp is started -->
                <string>/Library/Server/Web/Config/apache2/httpd_site2webapp.conf</string>
            </array>
        <key>name</key>
            <string>com.example.site2webapp</string>
        <key>displayName</key> <!-- Name shown in Server app -->
            <string>site2WebApp</string>
        <key>installationIndicatorFilePath</key> <!-- The presence of this file indicates web app is installed -->
            <string>/Library/Server/Web/Config/apache2/httpd_site2webapp.conf</string>
        <key>sslPolicy</key><!-- Determines webapp SSL behavior -->
            <integer>0</integer> <!-- 0: default, UseSSLWhenEnabled -->
                                 <!-- 1: UseSSLAlways -->
                                 <!-- 2: UseSSLOnlyWhenCertificateIsTrustable -->
                                 <!-- 3: UseSSLNever -->
                                 <!-- 4: UseSSLAndNonSSL -->
    </dict>
</plist>

Si vous avez également besoin de SSL, mettez également ce qui suit dans le fichier /Library/Server/Web/Config/apache2/httpd_site2SSLwebapp.conf . La configuration diffère en ce que le trafic LAN entre les serveurs sera non crypté par défaut (cette configuration indique essentiellement au serveur de ne pas vérifier s'il existe un certificat valide), mais le trafic WAN sera crypté. Je crois que vous pouvez installer un certificat auto-signé sur le serveur de la site2 pour le trafic local crypté, mais cette configuration permet d'activer le reverse proxy sans avoir à disposer de certificats correspondants. (Je concède qu'il y a probablement une manière plus correcte de sécuriser le trafic local, mais cela a fonctionné pour moi).

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyPreserveHost On
ProxyPassReverse / http://192.168.1.15:80/
ProxyPass / http://192.168.1.15:80/
ServerName site2.example.com

Et le plist de l'application web SSL correspondant, /Library/Server/Web/Config/apache2/webapps/com.example.site2SSLwebapp.plist la même chose que ci-dessus :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<!-- See man pages for webapp.plist(5) and webappctl(8) for information about this example webapp.plist -->

<plist version="1.0">
    <dict>
        <key>includeFiles</key>
            <array> <!-- Include files are activated in virtual host when webapp is started -->
                <string>/Library/Server/Web/Config/apache2/httpd_site2SSLwebapp.conf</string>
            </array>
        <key>name</key>
            <string>com.example.site2SSLwebapp</string>
        <key>displayName</key> <!-- Name shown in Server app -->
            <string>site2SSLWebApp</string>
        <key>installationIndicatorFilePath</key> <!-- The presence of this file indicates web app is installed -->
            <string>/Library/Server/Web/Config/apache2/httpd_site2SSLwebapp.conf</string>
        <key>sslPolicy</key><!-- Determines webapp SSL behavior -->
            <integer>0</integer> <!-- 0: default, UseSSLWhenEnabled -->
                                 <!-- 1: UseSSLAlways -->
                                 <!-- 2: UseSSLOnlyWhenCertificateIsTrustable -->
                                 <!-- 3: UseSSLNever -->
                                 <!-- 4: UseSSLAndNonSSL -->
    </dict>
</plist>

Pour chacun de ces quatre fichiers, les permissions doivent être owner : root et group : wheel, 644 :

$ sudo chown -R root:wheel /path/to/file
$ sudo chmod -R 644 /path/to/file

Configuration de Server.app

Ajouter l'application web aux sites web

  • Dans le Sites web de l'interface Server.app, cliquez sur l'onglet + sous la liste des sites web pour ajouter un nouveau site
  • Entrez site2.example.com pour le nom de domaine
  • Laissez tout le reste aux paramètres par défaut
  • Cliquez sur Modifier les paramètres avancés
  • Sous la section "Rendre ces applications web disponibles sur ce site web :", cochez Activer pour site2WebApp
  • Cliquez sur OK
  • Cliquez sur Créer

SSL

Si vous avez besoin de SSL sur le WAN, installez un certificat dans Server qui couvre le nouveau domaine. J'ai utilisé Let's Encrypt pour créer un certificat unique qui soit valable pour mes deux site1 y site2 domaines.

  • Dans le Certificats de Server.app, cliquez sur l'onglet + en bas de la fenêtre, puis Importer une identité de certificat
  • Faites glisser et déposez le .pem que vous avez reçu de Let's Encrypt (ou tout autre fichier de certificat que vous avez), et cliquez sur Importation
  • Dans le Sites web créez le nouveau site presque de la même manière qu'avant, sauf que vous changez le port en 443 et sous Certificat SSL, choisissez le certificat que vous venez d'importer.
  • Sous Modifier les paramètres avancés à la place, cochez Activer pour site2SSLWebApp

Ma réponse ci-dessus est adaptée des instructions trouvées à l'adresse suivante https://www.precursor.ca/precursor/resources/rais/landing/ReverseProxyTutorial.html . Avertissement : ce lien permet de télécharger un fichier zip contenant des fichiers PDF et des exemples de fichiers de configuration de l'application web Server. Leur zip comprend également des instructions historiques pour faire cela avec Server 4.1.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X