nginx ne transmet pas à mon application rails

Je suis plutôt nouveau avec l’utilisation de nginx. Je veux l’utiliser pour servir du contenu statique afin de réduire la charge sur le serveur de rails. Cela semble être une tâche plutôt simple mais je ne peux tout simplement pas trouver une solution qui fonctionne pour moi.

Je veux que nginx serve des fichiers statiques qui existent dans le répertoire public dans le répertoire de l’application mes rails. Pour être plus précis, j’ai un index.html dans le répertoire que je veux recevoir lorsque je saisis http: / [domainname] . Au lieu de cela, je reçois juste le nginx index.html par défaut. J’ai déjà vérifié que mince est en cours d’exécution et quand je demande 127.0.0.1:3000 je reçois la page que je veux.

Donc, voici le fichier appelé [domainname] dans le répertoire des sites disponibles .

upstream rails { server 127.0.0.1:3000; #This is where thin is waiting for connections } # HTTP server server { listen 80; server_name [domainname]; set $app /home/projektor/website/app.[domainname]; root $app/public; # Set a limit to POST data client_max_body_size 8M; # Errors generated by Rails error_page 400 /400.html; error_page 422 /422.html; error_page 500 504 /500.html; # Errors generated *outside* Rails error_page 502 @502; error_page 503 @503; # If the public/system/maintenance.html file exists, # return a 503 error, that ... if (-f $document_root/system/maintenance.html) { return 503; } # ... will serve the very same file. This construct # is needed in order to stop the request before # handing it to Rails. location @503 { rewrite ^ /system/maintenance.html break; } # When a 502 error occurs - that is, Rails is not # running, serve the 502.html file location @502 { rewrite ^ /502.html break; } # Add client-side caching headers to static files # location ~ ^/(stylesheets|javascripts|images|system/avatars) { expires 720h; } # Hand over the request to Rails, setting headers # that will be interpreted by request.remote_ip, # request.ssl? and request.host # location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto http; proxy_set_header Host $http_host; proxy_redirect off; # If the file exists as a static file serve it directly if (-f $request_filename) { break; } # Oh yeah, hand over the request to Rails! Yay! :-D proxy_pass http://rails; } } 

Le fichier est basé sur celui- ci.

Merci de votre aide.

Edit: J’ai déjà échangé 127.0.0.1:3000 pour 0.0.0.0:3000 dans la partie amont. J’ai également vérifié la propriété des fichiers dans les sites disponibles et les sites activés, et les deux devraient être corrects.

Je return 503; dur return 503; dans l’instruction de localisation et il semble qu’il ne correspond jamais. Il semble que cela corresponde toujours à la configuration par défaut pré-établie.

Jetez un oeil à l’exemple Mongrel de la documentation try_files . Quelque chose comme ça devrait fonctionner:

 location / { try_files /system/maintenance.html $uri $uri/index.html $uri.html @thin; } location @thin { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto http; proxy_set_header Host $http_host; proxy_redirect off; # Oh yeah, hand over the request to Rails! Yay! :-D proxy_pass http://rails; } 

Lorsque j’ai configuré une version récente de NGINX, la solution pour le faire pointer correctement vers mon application rails était entièrement liée à sa configuration complète. Il y avait quelques étapes supplémentaires que je n’ai pas trouvées dans la documentation. Il agissait comme le vôtre. Je ne dispose pas d’une installation propre, mais supporte-moi ici.

J’ai défini un répertoire appelé sites-enabled dans l’emplacement d’installation par défaut. Ceci est une installation Debian à partir du référentiel apt, donc les loccations d’installation sont / etc / nginx et / var / nginx.

 mkdir /etc/nginx/sites-enabled /etc/nginx/sites-available 
  1. Placez le fichier conf pour le site dans les sites disponibles /

  2. Ajoutez cette ligne au bas de /etc/nginx/nginx.conf

    inclure / etc / nginx / sites-enabled / *;

  3. Recherchez et supprimez toute référence pouvant inclure la configuration DEFAULT, qui indique à nginx de charger ce fichier. C’est ce qui vous donne le nginx default index.html (/etc/nginx/conf.d/default.conf)

    grep -r “default.conf” / etc / nginx

  4. Symlink (man ln) votre fichier dans les sites disponibles pour les sites activés.

    ln -s / etc / nginx / sites-available / myfilename / etc / nginx / sites-enabled / myfilename

  5. Testez votre configuration

    /etc/init.d/nginx configtest

  6. Une fois votre configuration configurée correctement, redémarrez nginx

    /etc/init.d/nginx restart

Je ne me souviens plus si j’ai retiré cette référence ou si la ligne à l’étape 2 suffisait. Si vous mettez à jour ou commentez cette réponse et si vous me donnez les résultats, je peux essayer de trouver les autres mesures que j’ai sockets.

Je ne pense pas que le problème ici est votre configuration actuelle.