Сбой входа в Drupal с помощью Nginx и proxy_pass, но работает при непосредственном доступе к Drupal
Нам нужно прокси передать URL, по которому my.domain.com нужно получить drupal.apps.server.com. Мы настроили переписать и работает нормально.
Затем мы настроили proxy pass и при доступе к my.domain.com мы получаем содержимое, но не можем войти в приложение (страница администратора Drupal). Если вы обращаетесь напрямую через drupal.apps.server.com, мы можем войти и получить доступ к странице администратора.
Пожалуйста, посмотрите нашу конфигурацию:
server {
listen 80;
server_name my.domain.com;
location /{
proxy_pass http://drupal.get apps.server.com/;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Может кто-нибудь, пожалуйста, помогите нам в этом.
Спасибо гео
2 ответа
Ваш синтаксис выглядит правильным для доступа к вашему сайту Drupal через http://my.domain.com/ Я использую тот же синтаксис для проксирования с Nginx. Я подозреваю, что проблема в другом месте.
Это может быть проблема с cookie. Убедитесь, что ваша конфигурация Drupal обновлена, так что он считает my.domain.com адресом установки Drupal.
Если это не проблема, вы должны уточнить следующее:
- Когда вы говорите "не можете войти", как точно вы продвигаетесь и что возвращается на экран?
- Что вы найдете в журналах доступа и ошибок, когда вы не можете войти
Кроме того, используйте инструмент, чтобы проверить HTTP-запрос и заголовки ответа, что они в порядке. (Например, вы можете дважды проверить домены cookie). Моими любимыми являются инструменты 'HEAD', 'POST' и 'GET' из дистрибутива Perl LWP::UserAgent. (libwww-perl в некоторых дистрибутивах Linux). Например:
POST -sSe http://my.domain.com/drupal/login/form
ОБНОВЛЕНИЕ Вы уточнили, что ссылки с домашней страницы показывают внутренние URL-адреса. Убедитесь, что ваши URL-адреса являются либо относительными, либо абсолютными URL-адресами для " http://my.domain.com/". Если URL-адреса указывают непосредственно на внутренний сервер, они не будут работать.
У меня была такая же установка на Fedora 14 с использованием этой конфигурации nginx:
location / {
proxy_pass http://internal-server.example.com:8064;
proxy_set_header HTTP_USING_HTTPS 1;
proxy_set_header X_FORWARDED_HOST example.com;
}
Затем я обновился до Fedora 17 и начал видеть то же поведение. Имя пользователя / пароль были приняты, но я получил сообщение от Drupal, сообщающее, что у меня нет доступа.
Я посмотрел на это с помощью Firebug и увидел этот HTTP-заголовок при входе в систему:
Set-Cookie SESSb13(skipped)706445be1=dg_xv(skipped)ZI; expires=Fri, 21-Sep-2012 21:40:17 GMT; path=/; domain=.internal-server.example.com; HttpOnly
Это привело меня к мысли, что существует проблема с доменом cookie.
Я не совсем уверен, что это вызвано запуском обновленной версии Nginx, но добавление следующей строки "proxy_set_header" в конфигурацию Nginx решило проблему для меня:
location / {
# The next line solved the problem for me:
proxy_set_header Host $http_host;
proxy_pass http://internal-server.example.com:8064;
proxy_set_header HTTP_USING_HTTPS 1;
proxy_set_header X_FORWARDED_HOST example.com;
}
Так что, возможно, изменилось поведение по умолчанию для proxy_pass. Во всяком случае, я надеюсь, что это может помочь другим.