3 votes

try_files à l'intérieur de nginx si cela casse la logique

Je veux faire nginx.conf que : - on post proxy_pass sur un port différent - on get renvoie les fichiers statiques avec index.html (sert SPA)

Comment je fais ça, actuellement j'ai :

nginx.conf :

worker_processes 1;

events {

    worker_connections 1024;
}

http {

    include mime.types;
    error_log /var/log/nginx/error.log debug;
    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    upstream nodejs {

        server 127.0.0.1:3001;
    }

    server {

        listen 3000;

        charset utf-8;
        client_max_body_size 5M;

        location / {

            if ($request_method = POST ) {

                proxy_pass http://nodejs;
            }

            if ($request_method = GET ) {

                root /usr/src/app;
                try_files $uri /index.html;
            }
        }

    }

}

nginx : [emerg] La directive "try_files" n'est pas autorisée ici dans /etc/nginx/nginx.conf:41

0 votes

Vous n'avez probablement pas besoin des deux if il suffit de supprimer le deuxième bloc if et placez le root y try_files les déclarations dans location le contexte.

3voto

Tommiie Points 5467

Je cite Serveur HTTP nginx , quatrième édition (Packt publishing) :

Vous pourriez vous demander : Quels sont les avantages de l'utilisation d'un location sur un bloc if bloc ? (...) [L]a principale différence réside dans les directives qui peuvent être employées à l'intérieur de l'un ou l'autre bloc. Certaines peuvent être insérées dans un if et d'autres ne le peuvent pas ; au contraire, presque toutes les directives sont autorisées dans le cadre d'une location bloc.

J'ai donc peur try_files est l'une des directives qui est autorisée dans une directive location mais pas dans un bloc if bloc.

Quant à savoir comment contourner ce problème et faire ce que vous voulez faire, je n'ai pas (encore) de réponse pour cela.

2 votes

Puis-je utiliser este réponse ? Je n'ai pas trouvé de moyen d'éjecter les try_files en amont.

0 votes

Wow ! Cette réponse a fait preuve de créativité pour résoudre le problème ! Merci de l'avoir partagée, @deathangel908 !

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