2016-09-20 1 views
1

Cela me rend fou ... J'ai ajouté une route dans la définition de mon routeur pour servir un fichier robots.txt de texte brut. Je ne pense pas que j'ai un catchall avant la route /robots.txt comme les autres routes vers/mobile et/map fonctionnent comme prévu. Sur ma machine locale, le fichier /robots.txt fonctionne correctement. Ce n'est que lorsqu'il est déployé sur le serveur que cette route ne fonctionne pas.robots.txt ne s'affiche pas via node.js routes envoyer du texte brut

router.get('/', function (req, res) { 
    res.render('index'); 
}); 

router.get('/mobile', function (req, res) { 
    res.render('mobile'); 
}); 

router.get('/map', function (req, res) { 
    res.render('map'); 
}); 

router.get('/robots.txt', function (req, res) { 
    res.type('text/plain'); 
    res.send('User-agent: *'); 
}); 

Cela fonctionne bien sur ma machine locale, mais pas lorsqu'ils sont déployés http://geolytix.co.uk/robots.txt

Error: Not Found 
    at /usr/share/geolytix/app.js:28:13 
    at Layer.handle [as handle_request] (/usr/share/geolytix/node_modules/express/lib/router/layer.js:95:5) 
    at trim_prefix (/usr/share/geolytix/node_modules/express/lib/router/index.js:312:13) 
    at /usr/share/geolytix/node_modules/express/lib/router/index.js:280:7 
    at Function.process_params (/usr/share/geolytix/node_modules/express/lib/router/index.js:330:12) 
    at next (/usr/share/geolytix/node_modules/express/lib/router/index.js:271:10) 
    at /usr/share/geolytix/node_modules/express/lib/router/index.js:618:15 
    at next (/usr/share/geolytix/node_modules/express/lib/router/index.js:256:14) 
    at Function.handle (/usr/share/geolytix/node_modules/express/lib/router/index.js:176:3) 
    at router (/usr/share/geolytix/node_modules/express/lib/router/index.js:46:12) 

Mon estimation initiale était que cela a quelque chose à voir avec le proxy de nginx à mon serveur de noeud, mais je peux accéder à le site en allant directement à l'adresse IP. Pourtant, la route robots.txt échoue.

http://139.59.161.58:3000/robots.txt

Edit:

Ceci est la ligne 28 de mes app.js enter image description here

+0

Etes-vous sûr redémarré votre serveur de nœud après avoir ajouté cette route? Essayez de demander '/ robots.txt' à Express directement (sur votre serveur) au lieu de passer par nginx. – robertklep

+0

Je suppose que c'est un problème d'interception de fichier statique. Pouvez-vous montrer nginx config, en particulier la partie 'location' dans' server'? – Nevertheless

+0

Ce n'est pas le paramètre nginx. Je peux ouvrir le site à partir de l'adresse IP mais le fichier robots.txt ne s'ouvre pas. http://139.59.161.58:3000/robots.txt –

Répondre

2

L'application s'est plantée après l'échec de 15 redémarrages dans PM2 alors qu'une version en cache était toujours en cours de traitement. La route robots.txt n'était pas dans le cache. Je suis désolé d'avoir perdu votre temps. Au moins, j'ai maintenant une meilleure compréhension de l'utilisation des PM2.

D

0

En effet, la configuration nginx est réglé sur intercepter les fichiers statiques demande.

Une partie comme ceci:

http { 
    ... 
    server { 
     ... 
     location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { 
      root /usr/local/.../public; 
      access_log off; 
      expires max; 
     } 
     ... 
    } 
} 

prend soin de gérer robots.txt même avant qu'il ne soit à express.js middleware de routage.

Vous devez exclure le fichier de la configuration de nginx pour permettre au routage de le gérer.

+0

Ce n'est pas la config nginx j'ai peur. Si je vais directement à l'adresse IP, je suis toujours incapable d'obtenir le fichier robots.txt. –

+0

Cela n'a pas non plus de sens, car le message d'erreur est celui d'Express, donc les requêtes _are_ sont envoyées par proxy. – robertklep

+0

Je pense que c'est la seule chose qui pourrait causer ce problème - comment ce chemin est géré par le serveur. Le code est parfaitement bien (et ça marche sur localhost). De toute façon, vous essayez de dire que si vous accédez au site par IP, nginx ne gère plus la requête? Cela dépend de la façon dont vous l'avez configuré. – Nevertheless