Nginx 不遵守配置

Nginx 不遵守配置

我有一个 kubernetes 部署,需要以下配置:

  • 必须允许来自任何来源的 POST。
  • GET、HEAD、LIST必须限制在内联网内。

我想到了:

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; 
    } 
}

但我仍然可以从外部网络获取

答案1

我不会使用“if”,因为性能和其他原因

如果你能用这种方式分隔你的 URL,那么效果会更好。关键是limit_except。我可能把参数弄反了(用 POST 替换 GET),可能需要重新检查“全部拒绝”,但这个总体思路应该有助于解决问题。我会根据任何评论更新答案。

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;
  }
}

答案2

唯一有效的背景指令limit_except地点,该指令的语义是限制使用不是明确除外。

你想要一个这样的诗节:

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

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

相关内容