1

NGINX 在 8080 上为我们的网关提供服务,通过我们在 8100 的 AAA 服务器进行身份验证,然后将经过身份验证的请求传递给 8081 上的 NGINX 进行路由。除了针对我们的文件服务器的文件上传请求(任何大小)外,一切都可以直接开箱即用。发送到 8080 的网关,当 8100 与 AAA 的连接被强制关闭时,会发生 500 Internal Server Error。发送到 8081,NGINX 路由多部分文件上传内容就好了。

更改 client_max_body_size 无济于事;也不会更改保持活动的值。在 NGINX 中为 multipart 执行 authverify 步骤的技巧是什么?


server {
    listen 8080;
    listen [::]:8080;
    server_name _;
    access_log /var/log/nginx/api.auth.log;

    location = /authverify {
        internal;
        proxy_pass http://127.0.0.1:8081/api/v1/aaa/authentication/validate;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
    }

    location /api/v1/aaa/authentication {
    proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /api {
        auth_request /authverify;
        auth_request_set $auth_header $upstream_http_authorization;
        more_set_headers "Authorization: $auth_header";

        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

非常感谢任何帮助!(我们正在运行 nginx 1.6.2 并且没有安装额外的模块。)

更新: 当内容被抑制时,WEB API 似乎对请求标头仍然指示“多部分”不满意。我调查过在身份验证请求中抑制 Content-Type,但没有找到令人满意的方法来实现它......

2019-11-22 05:20:41.896 +00:00 [错误] 服务器遇到内部错误,无法处理您的请求。再试一遍。System.IO.IOException:Stream 意外结束,内容可能已被另一个组件读取。在 Microsoft.AspNetCore.WebUtilities.StreamHelperExtensions.DrainAsync(流流,ArrayPool1 bytePool, Nullable1 个限制,Microsoft.AspNetCore.WebUtilities.MultipartReader.ReadNextSectionAsync(CancellationToken cancellationToken) 在 Microsoft.AspNetCore.Http.Features.FormFeature.InnerReadFormAsync(CancellationToken cancelToken) 在 Microsoft.AspNetCore.Mvc.ModelBinding.FormValueProviderFactory.AddValueProviderAsync(ValueProviderFactoryContext) 的 1 个限制上下文)在 Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(ActionContext actionContext, IList`1 factory) 在 Microsoft.AspNetCore.Mvc.ModelBinding.CompositeValueProvider.CreateAsync(ControllerContext controllerContext) 在 Microsoft.AspNetCore.Mvc.Internal.ControllerBinderDelegateProvider。 <>c__DisplayClass0_0.<g__Bind|0>d.MoveNext()

4

1 回答 1

1

就我而言,重新设置Content-Type解决了这个问题:

    location = /authverify {
        internal;
        proxy_pass http://127.0.0.1:8081/api/v1/aaa/authentication/validate;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header Content-Type "";
        proxy_set_header X-Original-URI $request_uri;
    }

但这可能取决于您的 API 如何处理请求。

于 2020-06-16T12:39:03.610 回答