Вчера я настроил «кластер» 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