Мой Rails page_cache присоединяет чужой домен к ссылкам, как я могу это остановить? - PullRequest
1 голос
/ 08 декабря 2010

Позвольте мне попытаться объяснить ситуацию так подробно, как я ее вижу.

У меня есть приложение Rails, использующее кэширование страниц для определенной части сайта.Просматривая Google Analytics, я заметил свой собственный домен в качестве реферера, который мне показался странным.После дальнейшего расследования я обнаружил, что когда я перехожу на одну из этих страниц с моим доменом в качестве реферера, ссылки указывают на другое доменное имя, но отрисовывают страницу нормально.Например:

Я на domain.com.Я захожу на domain.com/someones_profile, и когда я наводю указатель мыши на любую ссылку, мне будет сказано anotherdomain.com/someones_profile/about.Теперь, если я нажму на ссылку, я перейду на anotherdomain.com/someones_profile/about, но на моем сервере осуществляется доступ к моей странице (логи подтверждают это.)

Я проверил это, взяв одно измои неиспользуемые доменные имена и изменение записи A на IP моего сервера.Затем я очистил каталог кэша страниц и посетил кэшируемую страницу, используя только что настроенный домен domain2.com/someones_profile, и он кэшировал ссылки как domain2.com/someones_profile.

Надеюсь, это объяснение имело смысл.Домен, который «проникает» в мой кеш, принадлежит кому-то, кого я не знаю, и намерение не кажется каким-либо вредоносным, но мне было интересно, есть ли в Rails какие-либо встроенные методы, чтобы обойти что-то подобное.Что-то вроде принуждения ссылок page_cache к использованию определенного домена, а не того, каким доменом реферера является.

Любая помощь приветствуется, я бы предпочел использовать встроенный метод Rails, чем писать что-то сам, может быть, а может и нетпотому что я ленивый.

Ответы [ 2 ]

1 голос
/ 08 декабря 2010

Хорошо, я думаю, я понял вашу проблему.Как насчет создания ссылок на страницах с xxx_path вместо xxx_url?Это должно привести к созданию только относительных путей.Доменные имена не будут записаны в HTML-документ.Я бы сделал поиск и заменил в представлениях _url и изменил бы их на _path.

Так, например, если у вас есть это в вашем представлении:

<%= link_to "View all posts", posts_url %>

Вы бы изменили егоto:

<%= link_to "View all posts", posts_path %>

Кстати, этот ответ предполагает, что вы создаете свои ссылки, используя маршруты, а не вставляя URL-адрес прямо в представление!

0 голосов
/ 08 декабря 2010

Попробуйте использовать гем преломления для перенаправления всех обращений, не идущих к одному определенному хосту, на этот определенный хост. Это также повысит рейтинг страницы, так как удалит дублирующийся контент:

# config/initializers/refraction_rules.rb
Refraction.configure do |req|
  if req.host == "www.you-like-this-host.com"
    # configure other redirects here
    # eg. I'm using this to migrate URLs from the legacy application
    # to this new application (eg when migrated from PHP to Rails)
  else
    # this is not your hostname, redirect!
    req.permanent! :host => "www.you-like-this-host.com"
  end
end

Рефракция запускается рано в стеке стойки, поэтому она довольно легкая. Например, Apache mod_rewrite не будет надежно работать с пассажиром, поэтому я предпочитаю рефракцию.

Обязательно загрузите в качестве промежуточного программного плагина:

# config/environments/production.rb
config.middleware.insert_before ::Rack::Lock, ::Refraction, {}

Ссылки с именем хоста никогда не должны появляться в кеше страницы. Вы уверены, что генерируете свои внутренние URL-адреса без имени хоста? Возможно, вы попытались создать уникальные ссылки таким образом (передав текущее имя хоста в link_to или url_for), лучше используйте для этого рефракцию и очистите код.

...