3 votes

Configuration de Nginx : deux applications sous le même domaine

J'ai deux applications : Une application frontale HTML+JS et une application dorsale PHP. Je voudrais configurer Nginx pour que les deux soient servies à partir du même domaine. Les requêtes vers le backend sont faites en utilisant des URLs commençant par /api .

Ma tentative était la suivante :

server {
    root /path/to/frontend;
    index index.html;
    server_name example.com;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /api {
        alias /path/to/backend;
        index index.php;
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

Cependant, pour toutes les requêtes vers le backend, je me retrouve avec un 404 : primaire script inconnu.

Y a-t-il un moyen de réaliser ce que j'essaie de faire ici ? Comment ?

3voto

Bernard Rosset Points 1303

Vous avez fait l'erreur habituelle des gens qui ne comprennent pas vraiment comment fonctionne nginx. Rappelez-vous ce qui suit :

nginx sert toujours une requête avec un simple location bloc seulement .

Je vous suggère de (re)lire ce qui suit : Comment nginx traite une requête

Maintenant, en regardant votre configuration, les requêtes du backend devraient être servies par 2 sites :

  1. location /api
  2. location ~\.php$

Suivant location le premier on est appelé un préfixe tandis que le second est un expression régulière (regex). nginx vérifiera les deux mais n'en sélectionnera finalement qu'un seul, qui dans votre cas est celui de la regex.

Maintenant, lors de son traitement, nginx transmettra une demande de /path/to/frontend/<yourFile>.php en PHP, en construisant le chemin à partir de root /path/to/frontend puisque c'est le seul défini. Le backend échoue alors, incapable de trouver le fichier spécifié.

Vous pouvez essayer ce qui suit :

location /api {
    alias /path/to/backend;
    index index.php;
    try_files $uri $uri/ /index.php;

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;

        # Useless? Request always ending up with '.php' here...
        fastcgi_index index.php;

        include fastcgi_params;

        # Try to secure this block, which might lead to arbitrary code execution.
    }
}

Quant au manque de sécurité, j'ai animé une conférence sur nginx et PHP-FPM à nginx.conf 2014 fin octobre. Les diapositives sont disponibles : https://rosset.net/LAMP_just_died.pptx . Vidéo bientôt disponible.

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