WordPress只显示内部IP

昨天,我创build了一个WordPress“集群”。

现在我有一个问题:WordPress和统计插件只显示用户作为内部IP地址像10.0.0.2。

我的nginxconfiguration是:

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

它看起来像我使用单个nginx虚拟主机然后反向代理到多个服务器运行nginx / php-fpm正确?

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

但是你的第二个nginx虚拟主机中缺less一个重要的标题:

 set_real_ip_from 10.0.0.0/24; 

这将允许它validation真正的IP头,以便它将成功地设置它,没有它它不会真正改变你的访问日志和你的应用程序(在这种情况下wordpress)真正的IP,所以你的第二个虚拟主机块应该看起来更多喜欢:

 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,但该configuration假定您将来可以添加更多的服务器,并且维护起来更简单

“服务器”将会在TCP层面看到你的代理服务器在10.0.0.2的连接,在那里它抓取了IP地址 – 这就是为什么你这样看待它的原因。

尝试查看X-Forwarded-For头,或者在apache中find类似mod_remoteip的东西,它允许用X-Forwarded-For头中的值replace客户端IP。 我刚刚search了这样的function(我知道它在apache与mod_remoteip),并发现这个网站: http ://wiki.nginx.org/HttpRealIpModule