Назад | Перейти на главную страницу

WordPress показывает только внутренние IP-адреса

Вчера я настроил «кластер» WordPress.

Теперь у меня проблема: WordPress и stat-plugins показывают пользователей только как внутренние IP-адреса, например 10.0.0.2.

Моя конфигурация nginx:

  upstream backend {
  #ip_hash;
    server 10.0.0.3:80;
    server 10.0.0.2:8080;
   }

  server {
    listen 80;
    server_name bloggingsite.org;
    location / {

      proxy_pass http://backend;
        proxy_redirect     off;
            proxy_set_header   Host             $http_host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
#            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;
    }
  }

Второй серверный блок:

  server {
    listen 8080;
    server_name bloggingsite.org;
    root /var/www/;
real_ip_header    X-Real-IP;
    include /etc/nginx/fastcgi_php;
    location / {
      index index.php;

if (!-e $request_filename) {
#rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
#rewrite ^.*/files/(.*)$ /wp-content/blogs.php?file=$1 last;
#rewrite .*/files/(.*) /wp-includes/ms-files.php?file=$1;
# rewrite ^.+?(/wp-.*) $1 last;
# rewrite ^.+?(/.*\.php)$ $1 last;
 rewrite ^ /index.php last;
}
    }
  }

мне кажется, что вы используете один vhost nginx для обратного прокси-сервера на несколько серверов, на которых работает nginx / php-fpm правильно?

также похоже, что вы пытаетесь использовать x-Real-IP из nginx - http://wiki.nginx.org/HttpRealIpModule

однако вам не хватает одного жизненно важного заголовка во втором vhost nginx:

set_real_ip_from   10.0.0.0/24;

это позволит ему проверить настоящий IP-заголовок, чтобы он успешно установил его, без него он фактически не изменит реальный IP-адрес в ваших журналах доступа, а также в вашем приложении (в данном случае wordpress), поэтому ваш второй блок vhost должен выглядеть больше лайк:

server {
    listen 8080;
    server_name bloggingsite.org;
    root /var/www/;
    set_real_ip_from   10.0.0.0/24;
    real_ip_header    X-Real-IP;
    include /etc/nginx/fastcgi_php;
    location / {
        index index.php;

        if (!-e $request_filename) {
            #rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
            #rewrite ^.*/files/(.*)$ /wp-content/blogs.php?file=$1 last;
            #rewrite .*/files/(.*) /wp-includes/ms-files.php?file=$1;
            # rewrite ^.+?(/wp-.*) $1 last;
            # rewrite ^.+?(/.*\.php)$ $1 last;
            rewrite ^ /index.php last;
        }
    }
}

вы можете установить более одного заголовка set_real_ip_from в своем vhost, чтобы разрешить только определенным хостам доверять для реального IP, но эта конфигурация предполагает, что вы можете добавить больше серверов в будущем, и его проще поддерживать

«Сервер» будет видеть соединения от вашего прокси на 10.0.0.2 на уровне TCP, откуда он получает IP-адреса - вот почему вы видите это таким образом.

Попробуйте вместо этого взглянуть на заголовок X-Forwarded-For или найдите что-то похожее на mod_remoteip в apache, которое позволяет вам заменить IP-адрес клиента на значение в заголовках X-Forwarded-For. Я просто искал такую ​​функциональность в Google (я знаю об этом в apache с помощью mod_remoteip) и нашел этот сайт: http://wiki.nginx.org/HttpRealIpModule