Служба поддержки клиентов 24/7

(050)470-29-17

Nginx: демонстрация различного интерфейса в зависимости от ip адреса пользователя

Rate this post

Имеем сервер с установленным в качестве фронтенда (Nginx) и бэкенда (Apache). Каким образом удостовериться, что nginx согласно установленным настройкам всегда отображает бэкэнд http://readwrite для определенного адреса (например IP 4.3.2.1), а всем остальным клиентам http://readonly?

Nginx поддерживает использование «условий» в конфигурации. Вы можете сделать перенаправление и/или другие конфигурации для определенного клиента (IP адреса). Для этого Вам необходимо использовать переменную $remote_addr, с помощью которой можно получить информацию о клиентском ip адресе.

Такая функция может быть полезна например, если вы хотите предоставить возможность закачки файлов только с адресов вашего офиса и только чтение всем остальным клиентам с любыми ip адресами.

Для начала добавим настройки в /etc/php.ini на серверах {A,B,C}:

# Disallow uploading altogether this makes moving or injecting bad scripts/code onto your web server more difficult

file_uploads = Off
# Disallow treatment of file requests as fopen calls
allow_url_fopen = Off
allow_url_include = Off

Проверим, включена возможность загрузки на сервере, для этого в php.ini должна быть похожие настройки:

file_uploads = On
upload_max_filesize=2M
post_max_size=4M

После изменения файла конфигурации необходимо перезапустить апатч на серверах {A,B,C}.

Настраиваем nginx

Для начала добавляем следующее в конфиг:

if ( $remote_addr ~* ip-address-here ) {
proxy_pass http://YOUR-BACKEND-HERE;
}

Далее устанавливаем значение proxy_pass

## Default backend is readonly ##
proxy_pass http://readonly;

Проверяем ip адрес клиента

## If IP is 3.3.2.1 send backend to readwrite ##
if ( $remote_addr ~* 4.3.2.1 ) {
proxy_pass http://readwrite;
}

В итоге получаем приблизительно такую конфигурацию /etc/nginx.conf

## readonly backend ##
upstream readonly {
server 10.10.10.10:8011;
server 10.10.10.11:8011;
server 10.10.10.12:8011;
ip_hash;
}
## readwrite backend ##
upstream readwrite {
server 10.10.10.13:8011;

}

## config ##
location / {
proxy_set_header Accept-Encoding «»;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-By $server_addr:$server_port;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
## default backend
proxy_pass http://readonly;
## send traffic to readwrite backend if ip is 4.3.2.1 ##
if ( $remote_addr ~* 4.3.2.1 ) {
proxy_pass http://readwrite;
}
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
## rest of config ##

Сохраняем конфигурационный файл и перезапускаем nginx.

# /etc/init.d/nginx reload

Если у вас есть проблемы с nginx наши удаленный администратор может Вам помочь.

Понравилась статья? Поделись:

Всего комментариев: 0

Оставить комментарий

Ваш email не будет опубликован.

Вы можете использовать следующие HTML тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">