Encaminhamento de IP remoto real para servidor proxy com nginx

1

Para ocultar o IP do meu site, fiz proxy do servidor principal com nginx em outro VPS. Estou tentando enviar o IP real do visitante para o meu site e aqui está minha configuração na pasta conf.d:

proxy_cache_path  /etc/nginx/cacheddata  levels=1:2   keys_zone=staticfilecache:180m  max_size=500m;
proxy_temp_path /etc/nginx/cacheddata/temp;
proxy_connect_timeout 30;
proxy_read_timeout 120;
proxy_send_timeout 120;

#IMPORTANT - this sets the basic cache key that's used in the static file cache.
proxy_cache_key "$scheme://$host$request_uri";

upstream wordpressapache {
        #The upstream apache server. You can have many of these and weight them accordingly,
        #allowing nginx to function as a caching load balancer 
        server 127.0.0.1:8080 weight=1 fail_timeout=120s;
}
server {
      listen 80;
      server_name XXXXXX.com;
      access_log off;
      error_log off;
    set_real_ip_from 0.0.0.0/0;
    real_ip_header X-Real-IP;
    real_ip_recursive on;

# gzip compression options
  gzip on;
  gzip_http_version 1.0;
  gzip_comp_level 6;
  gzip_min_length 0;
  gzip_buffers 16 8k;
  gzip_proxied any;
  gzip_types text/plain text/css text/xml text/javascript application/xml application/xml+rss application/javascript application/json;
  gzip_disable "MSIE [1-6]\.";
  gzip_vary on;


      location / {
      proxy_pass http://XXXXXX/;
      proxy_redirect off;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass_request_headers on;
      proxy_max_temp_file_size 0;
      client_max_body_size 10m;
      client_body_buffer_size 128k;
      proxy_connect_timeout 90;
      proxy_send_timeout 90;
      proxy_read_timeout 90;
      proxy_buffer_size 4k;
      proxy_buffers 4 32k;
      proxy_busy_buffers_size 64k;
      proxy_temp_file_write_size 64k;
   }
} 

E criei uma página php simples com este código no servidor proxy:

<? echo $_SERVER["REMOTE_ADDR"]; ?>

Quando abro a página, ele exibe o IP do servidor nginx em vez do meu IP. Eu fiz algo de errado?

    
por Amin 13.03.2017 / 10:43

3 respostas

1

Você precisa configurar essas opções no servidor em que seu site está sendo executado:

set_real_ip_from 0.0.0.0/0;
real_ip_header X-Real-IP;
real_ip_recursive on;

Você precisa usar o endereço IP do seu servidor proxy na diretiva set_real_ip_from , de modo que somente o cabeçalho X-Real-IP desse servidor seja permitido.

Essas diretivas dizem ao nginx que ele deve usar o endereço IP listado no cabeçalho HTTP em vez do endereço IP da origem da conexão TCP como o IP de origem da conexão.

Em seguida, no servidor proxy, você precisa verificar se o cabeçalho X-Real-IP está definido com o valor do endereço IP do cliente, como sua configuração já o define.

Em resumo, no servidor proxy, você define o cabeçalho e, no servidor principal, informa ao servidor da Web para usar o cabeçalho.

    
por 13.03.2017 / 20:10
0

O encaminhamento do IP remoto real de nginx para apache requer, na verdade, o módulo mod_remoteip instalado & ativado em httpd.conf no lado apache .

Sua configuração atual de nginx está boa, exigiu proxy_set_header opções no bloco server :

server {
    ...
    proxy_set_header    X-Real-IP        $remote_addr;
    proxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;
    ...
}

No lado apache , você deve ativar o módulo necessário com:

LoadModule remoteip_module modules/mod_remoteip.so

e defina as diretivas :

RemoteIPHeader X-Real-IP
RemoteIPInternalProxy 127.0.0.1

substitua 127.0.0.1 pelo seu nginx IP, se necessário ...

    
por 20.07.2017 / 14:48
-1

Você está armazenando o IP 'real' em X-Real-IP , não em REMOTE_ADDR .

Os seguintes itens devem funcionar:

<? echo $_SERVER["X-Real-IP"]; ?>

    
por 13.03.2017 / 10:54