2015-09-02 1 views
0

URL spécifique J'ai ce groupe d'URL sur mon siteNginx règle de

mywebsite.com.br/ 

mywebsite.com.br/sao-paulo/sp 

mywebsite.com.br/rio-de-janeiro/rj 

mywebsite.com.br/natal/rn 

mywebsite.com.br/aparecida-do-rio-doce/go 

...

Au total, sont 5561 différentes urls. Il existe un moyen d'envoyer le même fichier html pour toutes ces URLs? Mais, il y a une URL d'autres qui doivent parvenir à mon serveur nodejs, comme ce ceux:

mywebsite.com.br/update-password/1234 

    mywebsite.com.br/update-password/ 

    mywebsite.com.br/user/confirm 

    mywebsite.com.br/user/confirm/123 

    mywebsite.com.br/api/v1/auth/facebook 

    mywebsite.com.br/api/v1/auth/local 

    mywebsite.com.br/api/v1/user/new 

    mywebsite.com.br/api/v1/user/statistics 

Comment puis-je définir un modèle Nginx pour servir le même fichier html pour le premier groupe de urls (5561 différents urls) , et transmettre à mon serveur nodejs le deuxième groupe?

Répondre

0

est ici un moyen utilisant une carte:

map $uri $forward2nodejs { 
    ~^/update-password/ 1; 
    ~^/user/confirm 1; 
    ~^/api/v1/auth/ 1; 
    ~^/api/v1/user/ 1; 
} 

server { 
    server_name mywebsite.com.br; 

    # default location for the 5561 different urls 
    location/{ 
     try_files /default.html =404; 
    } 

    if ($forward2nodejs) { 
     return 301 http://nodejs;  
    } 
} 

Voici un autre en utilisant proxy_pass dans des endroits préfixe:

server { 
    server_name mywebsite.com.br; 

    # default location for the 5561 different urls 
    location/{ 
     try_files /default.html =404; 
    } 

    location /update-password/ { 
     include nodejs_proxy_pass;  
    } 

    location /user/confirm { 
     include nodejs_proxy_pass;  
    } 

    location /api/v1/auth/ { 
     include nodejs_proxy_pass;  
    } 

    location /api/v1/user/ { 
     include nodejs_proxy_pass;  
    } 
} 
+0

putnamhill Merci pour votre réponse, il est presque ce que je dois. Je dois faire un proxy_pass à mon serveur nodejs fonctionnant localement, aux urls qui correspondent au modèle $ forward2nodejs de la carte, pas une redirection 301. est-ce possible? – user3111903

+0

Étant donné que proxy_pass n'est pas autorisé dans une instruction if, vous devez essayer quelque chose de différent. Je suggérerais des emplacements de préfixes avec un fichier inclus avec vos directives de noeuds proxy_pass. Je vais l'ajouter à ma réponse pour que vous puissiez voir à quoi cela ressemblerait. –