10

Desidero proteggere la mia app Rails 3 appena implementata con l'autenticazione HTTP di base. E 'in esecuzione sulle ultime Nginx/passeggeri e sto usando la seguente direttiva Nginx per proteggere la directory principale web:Password che protegge il sito Rails in esecuzione su Nginx e Phusion Passenger

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

di file htpasswd è stato generato usando Apache htpasswd utililty. Tuttavia, dopo aver inserito nome utente e password corretti, vengo trasferito alla pagina di errore Proibito 403. Analizzando log degli errori Nginx ha rivelato questo:

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" 

Ovviamente, non voglio elencare il contenuto della directory mysite/pubblico. Come posso configurarlo correttamente in modo che l'app Rails si avvii dopo aver inserito le mie informazioni di accesso?

risposta

17

È necessario specificare nuovamente passenger_enabled nel blocco di posizione.

+4

Aggiungi "passenger_enabled on;" all'interno del blocco di posizione. –

+0

Assicurati di riavviare NginX invece di ricaricarlo: 'sudo /etc/init.d/nginx restart' – Hengjie

2

Controlla il log degli errori di Nginx. 403 significa che hai sbagliato il percorso del tuo file di password.

+0

Ho controllato, quando il percorso era sbagliato, avevo [errore] 19756 # 0: * 1 aperto() "/ opt/nginx/conf/htpasswd" non riuscito (2: Nessun file o directory) ... Quindi Sono abbastanza sicuro che ora il mio percorso sia corretto. – Vincent

+0

Ci sono altri errori nel registro? Hai creato le tue password in formato crypt() (e non MD5, dato che Nginx non le supporta)? – icanhasserver

6

È possibile 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 

anche si dovrebbe impostare config.serve_static_assets = true nel vostro environment.rb (o applicaion.rb in Rails 3) in modo che le attività statiche in public passare attraverso lo stesso filtro.

Problemi correlati