Чтобы скрыть IP-адрес моего веб-сайта, я проксировал главный сервер с nginx на другом VPS . Я пытаюсь отправить посетителю реальный IP-адрес на свой веб-сайт, и вот моя конфигурация в папке 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;
}
}
И создал простую страницу php с этим кодом на прокси-сервере:
<? echo $_SERVER["REMOTE_ADDR"]; ?>
Когда я открываю страницу, вместо моего IP отображается IP-адрес сервера nginx. Я что-то сделал не так?
Вы храните 'настоящий' IP в X-Real-IP
, а не в REMOTE_ADDR
.
Должно работать следующее:
echo $_SERVER["X-Real-IP"]; ?>
Вам необходимо настроить эти опции на реальном сервере, на котором запущен ваш сайт:
set_real_ip_from 0.0.0.0/0;
real_ip_header X-Real-IP;
real_ip_recursive on;
Вам необходимо использовать IP адрес вашего прокси-сервера в директиве set_real_ip_from
, чтобы был разрешен только заголовок X-Real-IP
этого сервера.
Эти директивы говорят nginx, что в качестве IP-адреса источника TCP-соединения он должен использовать IP-адрес, указанный в заголовке HTTP, а не IP-адрес источника TCP-соединения.
Затем, в вашем прокси-сервере вы должны убедиться, что он установил заголовок X-Real-IP
со значением IP-адреса клиента, как уже установила ваша конфигурация.
Резюмируя вышесказанное, на прокси-сервере вы устанавливаете заголовок, а на главном сервере вы говорите веб-серверу использовать заголовок
. Перенаправление реального удаленного IP-адреса с nginx
на apache
на самом деле требует установки и включения модуля mod_remoteip в httpd.conf
на стороне apache
.
Ваша текущая конфигурация nginx
в порядке, для нее требуются параметры proxy_set_header
в server
block:
server {
...
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
}
На стороне apache
необходимо включить требуемый модуль с помощью:
LoadModule remoteip_module modules/mod_remoteip.so
и установить эти директивы :
RemoteIPHeader X-Real-IP
RemoteIPInternalProxy 127.0.0.1
replace ] 127.0.0.1
с вашим nginx
IP, если необходимо ...