web-dev-qa-db-fra.com

Apache + Node.js + mod_proxy. Comment router un domaine vers: 3000 et un autre vers: 80

Problème: je dois héberger une application Node et une application php sur le même serveur, dans différents domaines. 

example.com doit utiliser le port 80 normalement, mais node-example.com doit être routé vers le port 3000.

Le routage de tout le trafic du port 80 au port 3000 fonctionne bien avec mod_proxy, ainsi:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName  node-example.com
    ServerAlias www.node-example.com

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:3000/
            ProxyPassReverse http://localhost:3000/
    </Location>

</VirtualHost>

Ceci fait cependant que example.com et node-example.com pointent vers localhost: 3000 et exécutent l'application Node.

Existe-t-il un moyen de laisser example.com pointer vers le port 80?

Par exemple, par exemple.com/old-admin, vous pouvez également pointer vers le port 80.

24
olke

Il suffit de faire deux balises <VirtualHost *:80>

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName www.node-example.com

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:3000/
            ProxyPassReverse http://localhost:3000/
    </Location>

</VirtualHost>
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName  node-example.com    

    ProxyRequests off

    <Proxy *>
            Order deny,allow
            Allow from all
    </Proxy>

    <Location />
            ProxyPass http://localhost:80/
            ProxyPassReverse http://localhost:80/
    </Location>

</VirtualHost>

Cela devrait fonctionner ainsi;)

Ou, si votre application localhost:80 n'est pas un noeud, vous pouvez supprimer les balises <Proxy *> & <Location /> pour cette cible et la remplacer par DocumentRoot /var/www/node-example.com - votre chemin statique vers index.html

31
drinchev

Je vous suggère de créer deux fichiers de configuration d'hôte virtuels différents pour deux domaines. Cela vous permettra de les configurer indépendamment, en plus de les déplacer vers des serveurs différents lorsque la mise à l'échelle est différente. 

Pour Apache2 avec l'emplacement d'installation par défaut,

créer un fichier dans /etc/Apache2/sites-available/www.example1.com.conf

<VirtualHost *:80>
        ServerName  www.example1.com
        ServerAdmin [email protected]

        <Directory /home/example1/api/admin/docs>
                Options -Indexes +FollowSymLinks
                AllowOverride All
                Require all granted
                DirectoryIndex index.html
        </Directory>

        <Directory /home/example1/api/mobile/docs>
                Options -Indexes +FollowSymLinks
                AllowOverride All
                Require all granted
                DirectoryIndex index.html
        </Directory>

        ProxyRequests Off
        ProxyPreserveHost On

        ProxyPass /api/         "http://localhost:30007/"
        ProxyPassReverse /      "http://localhost:30007/"

        ErrorLog ${Apache_LOG_DIR}/example1/example1.log
        CustomLog ${Apache_LOG_DIR}/example1/example1.log combined

</VirtualHost>

Créez un autre fichier www.example2.com.conf dans sites-available et copiez la configuration ci-dessus en remplaçant exemple1 par exemple2. 

Pour les sous-domaines, remplacez www dans le nom du fichier et dans la configuration par votre sous-domaine, par exemple: api.

Une fois que vous avez créé les fichiers de configuration, vous devez les activer avec la commande 

a2ensite www.example1.com.conf 

puis rechargez Apache2 avec la commande 

Sudo systemctl reload Apache2

Assurez-vous que les répertoires example1 et example2 ont été créés dans Apache_LOG_DIR avant de recharger Apache.

C'est tout. configurez l'enregistrement A de votre domaine avec l'adresse IP du serveur dans votre registraire de domaine ou votre CDN, peu importe ce que vous utilisez et vous devriez être prêt à partir.

0
Amruta-Pani