Назад | Перейти на главную страницу

Обратный прокси-сервер Nginx, удовлетворить любые требования, разрешающие всем клиентам

У меня проблема с satisfy any в server или location блокировка, в результате которой всем клиентам будет разрешен доступ, что не является ожидаемым поведением.

server {
  listen       80;
  server_name  raar.my.domain;

  satisfy any;
  allow 192.168.1.0/24;
  deny all;
  auth_basic "Private";
  auth_basic_user_file /etc/nginx/conf.d/avs.creds;

  location / {
    proxy_pass   http://192.168.1.13:8085;
  }
}

В этом состоянии я могу выполнить curl с внешнего хоста, и он передаст запрос прокси. Если я изменю any к all затем он фактически запускает механизмы доступа.

Это забивает мне голову, потому что ни allow ни deny ключевое слово появляется где угодно в пределах /etc/nginx, поэтому я не знаю, какие другие обработчики доступа могли бы существовать, чтобы удовлетворить satisfy any.

Журнал отладки ничего не показывает.

-V:

nginx -V
nginx version: nginx/1.2.7
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --add-module=/tmp/pubcookie_src/src/nginx

Хм, оказывается, это был pubcookie модуль плохо себя ведет.

Он возвращал NGX_OK на этапе доступа для сайтов, за которые он не отвечал, когда правильный ответ был NGX_DECLINED (а также возвращал его как int вместо ngx_int_t).

По этой причине satisfy any был удовлетворен.