特定の get 変数を含むリクエストのみを nginx リバース プロキシ経由で許可する

特定の get 変数を含むリクエストのみを nginx リバース プロキシ経由で許可する

別のサーバーの API からのコールバックを処理する nginx リバース プロキシがあります。これらのコールバックは に送信されますが、とhttps://callbackserver.com/?wc_api=App&secret=SECRETのないその他のリクエストは拒否されるようにします。wc_apisecret

これが私のシンプルな nginx リバース プロキシ設定です...

server {
        listen 443 ssl;
        server_name redacted.domain;
        ssl_certificate /etc/letsencrypt/live/redacted.domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/redacted.domain/privkey.pem;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 5m;
        ssl_prefer_server_ciphers on;
        ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";

        location / {
                 proxy_pass_header Authorization;
                 proxy_pass http://127.0.0.1:8000;
                 proxy_set_header Host $host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 proxy_http_version 1.1;
                 proxy_set_header Connection "";
                 proxy_buffering off;
                 client_max_body_size 0;
                 proxy_read_timeout 36000s;
                 proxy_redirect off;
        }
}

server {
        server_name redacted.domain;
        listen 80;
        return 301 https://redacted.domain$request_uri;
}

上記の説明に従って、これを拒否するにはどうすればよいか教えてください。

答え1

$argsを正規表現でテストすることができます

location / {
    if ( $args !~* "^wc_api=.+&secret=[^&;]" ) {
        return 403;
    }
    proxy_pass_header ...

関連情報