Nginx + Apache + mod_php. Проблема с системными переменными

LONGMAN

Dark Side of the Moon..
Стоит связка Nginx + Apache, но в phpinfo SERVER["HTTP_HOST"], SERVER["SERVER_NAME"] и SERVER["SERVER_ADDR"] показывается неправильно. Ссылка на сервер http://78.46.208.54/
mod_rpaf установлен и настроен
Вот конфиг Nginx-a:
Код:
user  nginx;
worker_processes  10;

error_log   /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;
 
events {
    worker_connections  1024;
    use epoll;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] $request '
    #                  '"$status" $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
    keepalive_timeout      2m;
    sendfile        on;
    #tcp_nopush     on;
    #client_header_buffer_size    1k;
    #large_client_header_buffers  4 4k;
    # в директивах proxy_pass и fastcgi_pass.
    upstream backend {
        server 127.0.0.1:8080;
    }

    server {
        listen       80;
        server_name  null.ge www.null.ge;
        server_name_in_redirect on;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        client_max_body_size 101M;
#                location ~* ^(?!/phpmyadmin/).+\.(jpg|jpeg|gif|png|ico|css|bmp|swf|js)$ {
#                        root /var/www/null.ge/public_html;
#                }

                location ~ /\.ht {
                        deny  all;
                }

                location / {
                        proxy_pass http://backend;
                        #proxy_set_header host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $remote_addr;

                        proxy_connect_timeout 120;
                        proxy_send_timeout    120;
                        proxy_read_timeout    180;
                }
        #error_page  404              /404.html;
        # 50x-тых ошибок и далее перенаправляется все на "root"
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }

   }
}
 

LONGMAN

Dark Side of the Moon..

LONGMAN

Dark Side of the Moon..
Короче исправил. Виноват был конфиг mod_rpaf, а именно директива RPAFsethostname.
 

LONGMAN

Dark Side of the Moon..
— mod_rpaf не для этого. А «REMOTE_ADDR был не 127.0.0.1» правится в настройках самого Nginx.
Можете подсказать как? Во всех туториалах об Apache + Nginx пишут что нужно установить mod_rpaf. Как я понял вы правы, mod_rpaf нужен если frontend и backend на разных физических машинах.
 

baev

‹°°¬•
Команда форума
LONGMAN, извиняюсь, я Вас в заблуждение ввёл.
Просто у меня на хостинге «из коробки» уже был установлен mod_realip (http://sysoev.ru/mod_realip/).
 

Вурдалак

Продвинутый новичок
Что это за хрень вообще? Вы хотите, чтобы в REMOTE_ADDR был адрес, который клиент вам сам передаёт?
 

DiMA

php.spb.ru
Команда форума
Зачем привязываться к REMOTE_ADDR? Придумай свою личную переменную (MY_IP), коей и будешь дальше оперировать. Она инициализуется через set, без всяких модулей. В коде говнокод echo $_SERVER['REMOTE_ADDR'] заменяешь на echo getRemoteAddr(), который читает ту самую твою переменную MY_IP.
 
  • Like
Реакции: Gas

DiMA

php.spb.ru
Команда форума
Понимаю, фрилансерам с тысячами сайтов визиток на говнохостингах способ не подойдет .-)
 

fixxxer

К.О.
Партнер клуба
Зачем привязываться к REMOTE_ADDR? Придумай свою личную переменную (MY_IP), коей и будешь дальше оперировать. Она инициализуется через set, без всяких модулей. В коде говнокод echo $_SERVER['REMOTE_ADDR'] заменяешь на echo getRemoteAddr(), который читает ту самую твою переменную MY_IP.
Это хорошо в случае с php-fpm/fastcgi, когда можно что угодно прокинуть через fastcgi_param (хотя в случае с php-fpm и проблемы такой нет). В случае с апачом на бэке имеем проксирование по http, то есть пробросить можем только http-заголовки, а тут надо быть внимательным в настройке фронта, чтобы соответствующую переменную нельзя было пробросить с клиента. Вещь настолько очевидная, что, казалось бы, не требует особого упоминания, но я столько говнокода вида

function getIpAddress() {
return isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
}

видел, что...

Особо этим всякие говнофорумы типа IPB грешат. Админов троллить весело, с ip типа 127.0.0.1 в сообщениях ;)
 

MiksIr

miksir@home:~$
В случае с nginx+apache и кастомного заголовка мы еще теряем логи и управление access-ом на уровне апача.
 
Сверху