10

Quiero proteger mi aplicación Rails 3 recién implementada con la autenticación HTTP básica. Se ejecuta en la última Nginx/pasajero y estoy usando la siguiente directiva Nginx para proteger el directorio raíz web:Protección de contraseña Sitio de Rails ejecutándose en Nginx y Phusion Passenger

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

archivo htpasswd se generó usando Apache utililty htpasswd. Sin embargo, después de ingresar el nombre de usuario y la contraseña correctos, me transfieren a la página de error 403 Forbidden. El análisis de registro de errores Nginx reveló lo siguiente:

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" 

Obviamente, yo no quiero enumerar los contenidos del directorio mysite/pública. ¿Cómo puedo configurar esto correctamente para que la aplicación Rails se inicie después de que ingrese mi información de inicio de sesión?

Respuesta

17

Debe volver a especificar passenger_enabled en el bloque de ubicación.

+4

Agregar "passenger_enabled on"; dentro del bloque de ubicación. –

+0

Asegúrate de reiniciar NginX en lugar de volver a cargarlo: 'sudo /etc/init.d/nginx restart' – Hengjie

2

Revise su registro de errores de Nginx. 403 significa que la ruta de acceso al archivo de contraseña es incorrecta.

+0

Lo comprobé, cuando la ruta era incorrecta tuve [error] 19756 # 0: * 1 abierto() "/ opt/nginx/conf/htpasswd" fallido (2: No existe ese archivo o directorio) ... Así que Estoy bastante seguro de que ahora mi camino es correcto. – Vincent

+0

¿Hay algún otro error en su registro? ¿Creó sus contraseñas en formato crypt() (y no en MD5, ya que Nginx no las admite)? – icanhasserver

6

Puede 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 

también debe establecer config.serve_static_assets = true en su environment.rb (o applicaion.rb en Rails 3) de manera que los activos estáticos en public pasan por el mismo filtro.

Cuestiones relacionadas