#soap #nginx-reverse-proxy
#soap #nginx-reverse-proxy
Вопрос:
У нас есть сервер Nginx, настроенный на обратное проксирование, чтобы защитить устаревающий сервер SOAP, который невозможно исправить.
Меня попросили ограничить количество вызовов, которые клиенты могут совершать с определенных диапазонов IP.
Я понятия не имею, как разрешить некоторые вызовы SOAP, но отфильтровать другие.
Конфигурация Nginux является
server {
listen 443;
listen [::]:443;
server_name shiny.nginx.server;
ssl on;
ssl_certificate "/public/directory/proxy.pem";
ssl_certificate_key "/secret/directory/proxy.key";
location / {
proxy_pass http://very.old.server:80/;
proxy_buffering 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;
proxy_set_header X-Forwarded-Proto $scheme;
auth_basic "Username and Password Required";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Есть идеи, как этого добиться?
Спасибо
Комментарии:
1. Возможно, вам захочется погуглить, прежде чем задавать вопрос. scalescale.com/tips/nginx/redirect-nginx-traffic-client-ip
2. Спасибо, но перенаправление работает. Проблема в том, что разрешены все вызовы / запросы SOAP. Мы хотим ограничить количество вызовов, которые могут совершать некоторые пользователи.
3. Идея в том, чтобы вы проверили IP, затем URL, затем перенаправили, иначе верните 404. Таким образом, вы можете указать конкретный IP, чтобы использовать только определенный URL.
4. Хорошо, но URL не содержит вызова SOAP. Смотрим на доступ. файл журнала, все, что я вижу, это ‘192.168.1.67 — user [07/ Mar/2019:11:16:06 0800] » POST /vendor/SOAP/ HTTP/1.1″ 200 285″-» «Apache-HttpClient/4.1.1 (java 1.5)» «-«‘. Используя wireshark, я вижу, что вызов SOAP, встроенный в XML, отсутствует в URL
Ответ №1:
Я нашел решение для этого.
server {
listen 443;
listen [::]:443;
server_name shiny.nginx.server;
ssl on;
ssl_certificate "/public/directory/proxy.pem";
ssl_certificate_key "/secret/directory/proxy.key";
location / {
proxy_pass http://very.old.server:80/;
proxy_buffering 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;
proxy_set_header X-Forwarded-Proto $scheme;
auth_basic "Username and Password Required";
auth_basic_user_file /etc/nginx/.htpasswd;
if ($remote_addr ~ 192.168.1.1) {
set $is_user Y;
}
if ($http_soapaction ~ SOAP/Request/Goes/Here) {
set $user_allowed Y;
}
set $user_test "${is_user}${user_allowed}";
if ($user_test = YY) {
set $good yes;
}
if ($good != yes) {
return 403;
}
}
Невозможность выполнять вложенные или сложные тесты немного усложняла задачу…