Как установить REMOTE_ADDR в апаче, прежде чем php будет вызван

Мне настраивали веб-сайт с nginx, действующим как обратный прокси к апачским 2.2, который выполняет php. От апача и перспективы php IP-адрес всех запросов является nginx сервером. Я хотел бы, чтобы php видел тот же удаленный IP, который видит nginx.

Nginx устанавливает заголовок X-Real-IP, который содержит удаленный IP, который видит nginx. Я пытался делать что-то вроде этого в апачском conf:

SetEnvIf ^X-Real-IP$ "(.+)" REMOTE_ADDR=$1

Моя надежда состояла в том, что я мог установить переменную среды REMOTE_ADDR и когда php наконец вызывается, это видело бы удаленный IP, который видит nginx. Я думаю, что код php делает это:

$_SERVER['REMOTE_ADDR']

Так или иначе это не работает. Какие-либо идеи? Разве Вы не можете установить REMOTE_ADDR в апачском файле конфигурации? Спасибо.

11
задан Pascal MARTIN 24 February 2010 в 17:56
поделиться

3 ответа

Не уверен, можно ли изменить REMOTE_ADDR таким образом ...


На самом деле, вам может потребоваться установить / включить другой Apache модуль, например mod_rpaf (цитата) :

Он изменяет удаленный адрес клиента, видимого для других модулей Apache , когда выполняются два условия. { {1}}
Первое условие заключается в том, что удаленный клиент на самом деле является прокси-сервером, который определен в httpd.conf.
Во-вторых, если есть входящий заголовок X-Forwarded-For и прокси находится в его списке известных прокси, он берет последний IP-адрес из входящего заголовка X-Forwarded-For и изменяет удаленный адрес клиента в структуре запроса .
Он также принимает входящий заголовок X-Host и соответствующим образом обновляет настройки виртуального хоста .
Для Apache2 mod_proxy требуется X- Заголовок Forwared-Host и обновляет virtualhosts

Вот сообщение в блоге об этом: Прокси-сервер Nginx для Apache - доступ к IP-адресу удаленного хоста с помощью mod_praf

Обновление: исходная ссылка сейчас не работает , но он доступен также как пакет debian: apt-get install libapache2-mod-rpaf

14
ответ дан 3 December 2019 в 03:18
поделиться

Полная перезапись (первый раз взломав не то дерево).

Уровень изоляции SERIALIZABLE захватывает слот в списке заинтересованных транзакций. Если Oracle не может получить слот, он бросает ORA-8177. Количество доступных слотов ITL контролируется INITRANS и MAXTRANS. Согласно документации :

Для использования сериализуемого режима INITRANS должно быть задано значение не менее 3.

Это значение должно быть задано как для таблицы, так и для ее индексов. Итак, каковы ваши настройки INITRANS? Конечно, в примере кода используется значение по умолчанию (1 для таблиц, 2 для индексов).

-121--2564629-

Обычно для создания экземпляров любого универсального типа, параметризованного анонимным типом для аргумента типа, можно использовать (возможно, плохо пахнущий) трюк, упомянутый другими. Однако для List < T > существует несколько менее грубый способ сделать это:

var array = new[] {
  new {  
    Name="Krishna",  
    Phones = new[] {"555-555-5555", "666-666-6666"}
  }
};
var list = array.ToList();

Ваш эскиз предлагаемого синтаксиса похож на функцию, которую мы не реализовали для C # 3 или 4, но мы рассмотрели. Мы называем функцию «типы бормотания», и она может быть примерно такой:

List<?> myList = new List<?>() {
  new {  
    Name="Krishna",  
    Phones = new[] {"555-555-5555", "666-666-6666"}
  }
};

Мы называем его «типы бормотания», потому что вы, конечно, читаете его «myList - это новый список hrmmf».:-)

Идея состоит в том, что компилятор будет смотреть на инициализаторы и делать все возможное, чтобы выяснить, каким может быть тип, точно так же, как «var» означает «смотреть на инициализатор и выяснить, что тип переменной». Будем ли мы использовать «var» как «бормотание» или «?» (что аналогично тому, что делает Java в связанной функции), или что-то еще является открытым вопросом.

В любом случае, я бы не задержал дыхание в ожидании этой функции на вашем месте. Он пока не сделал сокращения для нескольких языковых версий, но он будет оставаться в списке возможностей еще некоторое время, я думаю. Если гипотетически говорить, мы должны были разрабатывать будущие версии языка. Какой мы можем быть или не быть. Помните, что мысли Эрика о будущих версиях C # предназначены только для развлечений.

-121--862590-

Снять манжету.. но не могли бы вы передать заголовок X-Real-IP в качестве переменной php с помощью некоторой магии переписывания..? Не может htaccess использовать информацию заголовка до вызова PHP?

0
ответ дан 3 December 2019 в 03:18
поделиться

Я не знаю, можно ли управлять REMOTE_ADDR - возможно, это невозможно - но вы должны иметь возможность получить заголовок X-Real-IP в PHP с помощью чего-то вроде

$ _ SERVER [ «HTTP_X_Real_IP»]

или аналогичный - проверьте phpinfo () для правильного обозначения.

Кроме того, переменные среды Apache, установленные в .htaccess , должны быть видны в PHP.

1
ответ дан 3 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: