Сбой входа в 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. Во всяком случае, я надеюсь, что это может помочь другим.

Другие вопросы по тегам