Всем присутствующим привет! На одном домене, некоторый известный скрипт (возможно некоторые с ним сталкивались и знают о чём я) для правильной работоспособности требуют переменную _SERVER["SERVER_ADDR"] соответствующую реальному IP адреса сервера (внешнему IP). Итак ситуация следующая: сайт работает в режиме модуль Apache (5.4.16) - этого требует скрипт для корректной работы. Конфигурация веб-сервера такая: Apache MPM-Prefork 2.4.6-88.el7.centos, PHP module 5.4.16-46.el7, PHP-FPM 5.4.16-46.el7, nginx 1.14.1-1.el7_4.ngx Настройки системы практически по умолчанию. Всё это дело работает под управлением панелью: ISPmanager Lite 5.184.0 При таких условиях _SERVER["SERVER_ADDR"] равен 127.0.0.1. Раньше помогало прописать реальный IP адрес сервера в файл: /etc/hosts - но после последнего переезда это не помогает. Вопрос: как присвоить реальный (внешний IP) адрес сервера переменной _SERVER["SERVER_ADDR"]? P.S.: гуглить умею, бьюсь уже сутки голова пухнет, уже нет идей как это реализовать. Буду признателен за помощь $$
Можно добавлять дополнительные заголовки в запросы на кэширующем nginx proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; а на backend-е LAMP анализировать информацию из добавленных заголовков X-Real-IP и XForwarded- For ЛИБО можно использовать модуль ngx_real_ip (nginx должен быть собран с его поддержкой) Конфигурация (пример) - set_real_ip_from 192.168.1.0/24; set_real_ip_from 192.168.2.1; real_ip_header X-Forwarded-For; real_ip_recursive on; и анализировать/перезаписывать соответствующие заголовки на стороне LAMP.
у тебя есть этот скрипт и нужно его принудительно заставить работать но твоём сервере, IP которого отличается от того, который прописан в нём, я правильно понимаю?
Не совсем так. Да скрипт у меня и он установлен. Скрипту не важен IP, он отказывается работать из-за неверно указанного SERVER_ADDR. Тут больше вопрос, как заставить сервер отдавать вместо SERVER_ADDR 127.0.0.1, реальный внешний IP адрес сервера.
Прописать в конфиги веб-сервера имя сервера/IP для начала Code: <VirtualHost 127.0.0.1:81> ServerAdmin [email protected] DocumentRoot /home/hosting/sites/conf24.net/public_html ServerName NAME.net ServerAlias www.NAME.net
Это всё настроено и всё работает. Скрипт уже установлен и привязан к домену. Проблема в том что Apache не правильно отдаёт SERVER_ADDR, мне нужно чтобы он отдавал внешний IP адрес сервера, а не виртуальный хост.
Я неправильно указал название параметра, но Вы бы ссылку, всё же посмотрели ..... Unique mod_setenvif Variables These can be used for attribute. Remote_Host the hostname (if available) of the client making the request - crawl-66-249-70-24.googlebot.com Remote_Addr IP address of the client making the request - 66.249.70.24 Server_Addr IP address of the server on which the request was received - 208.113.183.103 Request_Method name of the method being used - GET Request_Protocol name and version of the protocol with which the request was made - HTTP/1.1 Request_URI the resource requested on the HTTP request line -- generally the portion of the URL following the scheme and host portion without the query string - /robots.txt
Ну я так и подумал что неправильно указал, ссылку я открыл уже перепробовал по разному, но ничего не выходит =( Указываю к примеру: SetEnvIfNoCase Server_Addr "(.*)" SERVER_ADDR=000.000.000.000 SetEnvIfNoCase Server_Addr "(.*)" SERVER_ADDR1=000.000.000.000 Результат из phpinfo(): SERVER_ADDR 127.0.0.1 SERVER_ADDR1 000.000.000.000 Спасибо за дельный совет, но увы не решает задачу =(
А если сэмулировать окружение, а не настроить параметры сервера ? (я не знаю Вашей конфигурации, может оказаться неисполнимым). Привяжите alias-ом к имеющемуся сетевому интерфейсу дополнительно нужный IP-адрес (например, без шлюза по умолчанию), и включите его в список ListenAddress Apache - что-нибудь вроде ip address add dev ethN 100.100.100.100/32 Затем по нужным условиям/в нужный момент перенаправляйте запрос не на local IP (127.0.0.1, http://127.0.0.1/phpinfo.php), а на вот этот alias (http://100.100.100.100/phpinfo.php).
Спасибо дружище что подкидывал идеи, но я нашёл другое решение. Итак, Решено! Если вдруг кому-то понадобится оставлю здесь пошаговую инструкцию. Сначала заходим и редактируем конфиг WWW-домена. Заменяем в конфиге Apache и Nginx 127.0.0.1 на реальный внешний IP адрес сервера который мы хотим видеть в phpinfo(); в SERVER_ADDR к примеру наш адрес будет: 185.130.10.10 В конфиге Apache так: Code: <VirtualHost 185.130.10.10:8080> В конфиге Nginx так: Code: proxy_pass http://185.130.10.10:8080; proxy_redirect http://185.130.10.10:8080 /; Дописываем в конце файла: /etc/httpd/conf/httpd.conf Следующее: Code: Listen 185.130.10.10:8080 Правим следующий файл: /etc/httpd/conf.modules.d/11-remoteip.conf Следующим образом: Code: RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 127.0.0.1 185.130.10.10 Перезапускаем службы и радуемся. Всем спасибо за внимание!