web-dev-qa-db-fra.com

Comment configurer l'URI dans Nginx pour servir une application Web différente de celle du domaine principal?

J'ai un CMS fonctionnant sur domain.tld.

Maintenant, je voudrais configurer Nginx pour servir une autre application de domain.tld/app.

Le CMS dans le domaine principal ne devrait pas gérer les demandes faites à domain.tld/app.

Cela peut-il être réalisé dans le bloc serveur de l'application principale:

server {
   server_name domain.tld;
   root /var/www/html/domain.tld;
   ...
   location /app {
       root /var/www/html/app;
       ...
       location .php {
           ...
       }
   }
}

Et la question est de savoir quoi mettre en place de ...

Actuellement, j'ai seulement atteint l'erreur "Aucun fichier d'entrée spécifié" et elle n'a pas été trouvée car elle essaie de trouver index.php à partir de /var/www/html/app/app/index.php.

1
user1271930

Afin de servir une application avec une racine de document différente à partir d'un sous-répertoire, vous devez utiliser le modificateur ^~ sur l'emplacement du préfixe afin que les autres blocs d'emplacement d'expressions régulières ne provoquent pas de conflit. Voir ce document pour plus de détails.

Si l'application utilise PHP, vous pouvez utiliser un bloc d'emplacement imbriqué pour hériter des différents root.

Par exemple (et ce n'est qu'un point de départ):

location ^~ /app {
    root /var/www/html;

    index index.php;
    try_files $uri $uri/ /app/index.php;

    location ~ \.php$ {
        try_files $uri =404;

        include       ...; # this is your system's fastcgi_params file
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass  ...; # this is a socket or IP:port for php-fpm
    }
}

J'ai laissé quelques ...s car ils dépendent de votre installation spécifique. Notez que root est ajouté à l'URI pour localiser le fichier physique. Ainsi, /app/index.php sera situé à /var/www/html/app/index.php.

Enfin, l'application doit savoir qu'elle s'exécute dans un sous-dossier. Lorsqu'il demande des fichiers de ressources (tels que .js et .css), il doit préfixer l'URI avec /app/, sinon les ressources principales de l'application seront chargées.

0
Richard Smith