Назад | Перейти на главную страницу

Войти в Drupal с Nginx и proxy_pass не удается, но работает при прямом доступе к Drupal

Нам нужно прокси передать URL-адрес, по которому my.domain.com должен получить drupal.apps.server.com. Мы настроили перезапись и работает нормально.

Затем мы настроили proxypass, и при доступе к 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;
                }
       }

Может ли кто-нибудь помочь нам в этом.

Спасибо, Гео

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