Несколько серверов с приложением nginx/rails, обслуживающими ресурсы других серверов, не должны этого делать
У меня нагрузка на 2 сервера сбалансирована с помощью ELB. На каждом сервере есть копия одного и того же приложения rails, с nginx впереди и единорогом в качестве сервера приложений.
Там нет файла CSS, который загружается в окне браузера сейчас. Когда проверяю элемент, я вижу, что он ищет application-123123.css
который находится на другом сервере.
Таким образом, кажется, что браузер получает сервер 1, загружает его HTML, который имеет application-123123123.css
предварительно скомпилирован на нем. затем, когда фактический вызов для загрузки application-123123123.css
отправляется на сервер SERVER 2, который имеет собственную временную метку (из-за отсутствия лучшего слова) и ошибки, поскольку файл для application-123123123.css
не существует
Я в растерянности, потому что Duck duck go fodder и что искать в настройках nginx/appserver. Мысли?
1 ответ
Есть два способа исправить это. Во-первых, приложение должно работать так, чтобы независимо от того, с какого сервера поступил запрос, оно знало, о чем его запрашивают. Это предпочтительное и наиболее надежное решение, но оно сильно зависит от вашего приложения и от того, как оно собирает свои статические файлы в место, которое может видеть nginx, и делает это таким образом, чтобы это было единообразно при выполнении. Я не разработчик рельсов, поэтому не могу говорить о том, что вам нужно сделать, чтобы правильно настроить баланс нагрузки. Обычный способ борьбы с кешем - это не использовать временную метку, в которой был сгенерирован файл, а скорее своего рода хэш содержимого самого файла. Если файл не изменяется, хеш не изменится, и хеш будет сгенерирован согласованно на разных серверах, независимо от того, изменился файл или нет.
Второе - включить "липкие сессии" на вашем балансировщике нагрузки, которые будут держать пользователя направленным на один и тот же сервер до тех пор, пока липкие куки остаются в их браузере или истекают. Однако опасность этого заключается в том, что если сервер, к которому он "застрял", уходит (из-за ручного или временного / нагрузочного разрушения), то у пользователя могут возникнуть некоторые проблемы, если серверы ведут себя немного иначе, чем друг друга. Вам нужно будет изучить ваше приложение более подробно, чтобы полностью понять, что, если что-нибудь, будет затронуто здесь.