#ruby-on-rails #apache
#ruby-on-rails #apache
Вопрос:
Я немного осмотрелся и нашел некоторую информацию по этой теме, но не смог заставить ее работать. У меня есть apache / tomcat, установленный на моем веб-сервере в моей компании. Ранее на том же веб-сервере, когда я писал CGI-приложения, мне удалось успешно получить имя пользователя посетителей на моем сайте, обратившись к среде var REMOTE_USER. Теперь, когда я езжу на rails, переменная request.env[‘REMOTE_USER’] ничего не возвращает.
Пожалуйста, обратите внимание, что я не использую Mongrel, как предполагают многие онлайн-обсуждения. Кроме того, я не собираюсь создавать систему аутентификации, я просто хочу прочитать (используя REMOTE_USER) имя пользователя людей, которые заходят на мой сайт.
Я знаю, что мне нужно будет настроить мой файл .htaccess (расположенный в моей общей папке), чтобы переслать эту информацию из apache в мое приложение. Посмотрев примеры в Интернете, я изменил его на..
RewriteCond %{REMOTE_USER} (. )
RewriteRule ^.*$ - [E=RU:%1]
RequestHeader add X-Forwarded-User %{RU}e
.. но это не помогло. Спасибо.
Ответ №1:
Если вы добавляете X-Forwarded-User, вам нужно прочитать request.headers[‘X-Forwarded-User’], а не request.env[‘REMOTE_USER’] .
Поместите это в файл ниже и используйте http_remote_user вместо хэша request.env.
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
def http_remote_user
request.env['HTTP_REMOTE_USER'] || request.headers['X-Forwarded-User']
end
helper_method :http_remote_user
end
Комментарии:
1. Спасибо за ответ @squarsim. Вставил код в свой контроллер приложений и, на мой взгляд, попытался напечатать оба, <%= http_remote_user %> и <%= request.headers[‘X-Forwarded-User’] %> .. все еще выдаю пустой. Может быть, мне нужно добавить / изменить что-то в моем .htaccess?
2. Распечатайте <%= request.headers %> это будет полный набор заголовков, с которыми rails может работать, если вы его не видите, значит, на стороне apache чего-то не хватает.
3. Распечатал request.headers и получил загрузку страницы с информацией. Однако REMOTE_USER отсутствовал в выводе. Означает ли это, что мне нужно включить со стороны Apache?
4. Если apache видит REMOTE_USER=bob, а вы нигде не видите bob в request.headers, то apache ничего не пересылает, и rails ничего не может с этим поделать. Так что да, я бы поиграл с файлом .htaccess.
Ответ №2:
Я боролся с этим, но, наконец, заставил его работать.
-
Убедитесь, что вы не забыли добавить
RewriteEngine On
в файл conf (для меня это было внутриVirtualHost
раздела), я забыл, и он молча потерпел неудачу, никаких ошибок при перезапуске apache. -
В зависимости от того, используете ли вы файл .htaccess или .conf, вам необходимо изменить правило RewriteCond . Эзотерические подробности — примечание 5 означает, что нам нужно использовать
RewriteCond %{LA-U:REMOTE_USER} (. )
, если мы находимся внутри файла conf. -
Чтобы помочь в отладке, вы всегда можете начать с использования
RequestHeader add X-Forwarded-User 'FixedValue'
, чтобы убедиться, что проблемы связаны с apache, а не с rails или другими промежуточными продуктами.