Защита паролем сайта Rails, работающего на Nginx и Phusion Passenger

Я хочу защитить свое недавно развернутое приложение Rails 3 с базовой HTTP-аутентификацией. Он работает на последнем Nginx/Passenger, и я использую следующую директиву Nginx для защиты корневого каталога в Интернете:

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

Файл htpasswd был сгенерирован с использованием Apache htpasswd utililty. Однако, после ввода правильного имени пользователя и пароля, я получаю перевод на страницу 403 Forbidden error. Анализ журнала ошибок Nginx показал следующее:

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"

Очевидно, что я не хочу перечислять содержимое каталога mysite/public. Как я могу настроить это правильно, чтобы приложение Rails запускалось после ввода моей информации для входа?

Ответ 1

В блоке местоположения вам необходимо повторно указать имя_папки.

Ответ 2

Вы можете позволить Rails обрабатывать аутентификацию

# application_controller.rb
before_filter :authenticate

protected

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

также вы должны установить config.serve_static_assets = true в environment.rb (или applicaion.rb в Rails 3), чтобы статические активы в public проходили через один и тот же фильтр.

Ответ 3

Проверьте журнал ошибок Nginx. 403 означает, что вы неправильно указали путь к файлу паролей.