10

Je veux protéger mon application Rails 3 nouvellement déployée avec l'authentification http de base. Il est en cours d'exécution sur le dernier Nginx/passager et j'utilise la directive Nginx suivantes pour protéger le répertoire racine web:Mot de passe protégeant le site Rails s'exécutant sur Nginx et Phusion Passenger

location =/{ 
    auth_basic "Restricted"; 
    auth_basic_user_file htpasswd; 
} 

htpasswd a été généré en utilisant Apache htpasswd Utililty. Cependant, après avoir entré le nom d'utilisateur et le mot de passe corrects, je suis transféré à la page d'erreur 403 Interdit. L'analyse de journal des erreurs Nginx a révélé ceci:

directory index of "/var/www/mysite/public/" is forbidden, client: 108.14.212.10, server: mysite.com, request: "GET/HTTP/1.1", host: "mysite.com" 

De toute évidence, je ne veux pas énumérer le contenu du monsite/répertoire public. Comment puis-je le configurer correctement pour que l'application Rails démarre après avoir entré mes informations de connexion?

Répondre

17

Vous devez spécifier à nouveau passenger_enabled dans le bloc d'emplacement.

+4

Ajouter "passenger_enabled on;" à l'intérieur du bloc d'emplacement. –

+0

Assurez-vous de redémarrer NginX au lieu de le recharger: 'sudo /etc/init.d/nginx restart' – Hengjie

2

Vérifiez votre journal des erreurs Nginx. 403 signifie que le chemin de votre fichier de mot de passe est erroné.

+0

J'ai vérifié, quand le chemin était erroné j'avais [erreur] 19756 # 0: * 1 open() "/ opt/nginx/conf/htpasswd" a échoué (2: pas un tel fichier ou répertoire) ... Donc je Suis assez sûr que maintenant mon chemin est correct. – Vincent

+0

Y a-t-il d'autres erreurs dans votre journal? Avez-vous créé vos mots de passe au format crypt() (et pas MD5, car Nginx ne les supporte pas)? – icanhasserver

6

Vous pouvez let Rails handle the authentication

# application_controller.rb 
before_filter :authenticate 

protected 

def authenticate 
    authenticate_or_request_with_http_basic do |username, password| 
    username == "foo" && password == "bar" 
    end 
end 

aussi vous devez définir config.serve_static_assets = true dans votre environment.rb (ou applicaion.rb dans Rails 3) de telle sorte que les actifs statiques dans public passent par le même filtre.