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

Nginx не соблюдает конфигурацию

У меня есть развертывание Kubernetes, для которого требуется следующая конфигурация:


Я придумал:

include modules/*.conf;    
worker_processes  1;

error_log  /dev/stdout info;

events {
    worker_connections  1024;}

http {
        include       mime.types;
        default_type  application/octet-stream;
        log_format    main '$http_x_forwarded_for - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
        access_log    /dev/stdout main;
        sendfile      on;
        keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;
        port_in_redirect off;

        location / {
            root   html;
            index  index.html;
        }

        error_page  403 /403.html;
        error_page  404 /404.html;
        error_page  500 /500.html;
        error_page  502 /502.html;
        error_page  503 /503.html;
        error_page  504 /504.html;
    }
}

if ($request_method != POST) { 
    limit_except GET DELETE PUT{
         allow 10.0.0.0/8;
         deny all; 
    } 
}

Но я все еще могу ПОЛУЧИТЬ из внешней сети

Единственный допустимый контекст для то limit_except директива является расположение, и семантика этой директивы состоит в том, чтобы ограничить использование HTTP-методов, которые не явно исключено.

Вам нужна такая строфа:

    location / {
        root   /usr/share/nginx/html;
        index  index.html;

        limit_except POST {
             allow 10.0.0.0/8;
             deny all; 
        } 
    }

Я бы не стал использовать "если" из-за производительность и другие причины.

Что-то вроде этого могло бы быть лучше, если бы вы могли разделить свои URL-адреса таким образом. Ключ limit_except. Есть вероятность, что у меня есть параметры в обратном порядке (поменять местами GET на POST), и, возможно, потребуется пересмотреть «отклонить все», но эта общая идея должна помочь решить проблему. Я обновлю ответ на основе любых комментариев.

location /post/service {
  root html;
  index  index.html;
  // OR proxy_pass http://whatever;

  // ALLOW POST
  limit_except GET {
    deny all;
  }
}

location / {
  root html;
  index  index.html;
  // OR proxy_pass http://whatever;

  // ALLOW GET
  limit_except POST {
    deny all;
  }
}