WordPress 仅显示内部 IP

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;
}
    }
  }

答案1

在我看来,您使用单个 nginx vhost 然后反向代理到多个运行 nginx/php-fpm 的服务器,对吗?

看起来你也试图使用 nginx 的 x-Real-IP -http://wiki.nginx.org/HttpRealIpModule

但是你的第二个 nginx vhost 中缺少一个重要的标头:

set_real_ip_from   10.0.0.0/24;

这将允许它验证真实的 IP 标头,以便成功设置它,如果没有它,它实际上不会更改您的访问日志和应用程序(在本例中为 wordpress)中的真实 IP,因此您的第二个 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 标头,以仅允许特定主机信任真实 ip,但该配置假定您将来可能会添加更多服务器,并且更易于维护

答案2

“服务器”将在 TCP 级别看到来自 10.0.0.2 的代理的连接,并从中获取 IP - 这就是您以这种方式看到它的原因。

尝试查看 X-Forwarded-For 标头,或者在 apache 中找到类似于 mod_remoteip 的东西,它允许您用 X-Forwarded-For 标头中的值替换客户端 IP。我刚刚在 Google 上搜索了这样的功能(我知道 apache 中有 mod_remoteip),找到了这个网站:http://wiki.nginx.org/HttpRealIpModule

相关内容