【问题标题】:Nginx is trying open file instead of redirect to proxyNginx 正在尝试打开文件而不是重定向到代理
【发布时间】:2020-11-20 20:28:13
【问题描述】:

您好,我正在使用 Nginx 和 njs,并且在我的配置中有这样的位置

server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /usr/share/nginx/html;
    error_log stderr debug;
...

location /checkout/payment {
     js_content http.payment;
}

location /tc/api/endpoint {
         proxy_ssl_server_name  on;
         proxy_ssl_name         some_proxy_host;
         subrequest_output_buffer_size   1m;
         proxy_read_timeout     300;
         proxy_buffer_size      128k;
         proxy_buffers          8 128k;
         proxy_busy_buffers_size  128k;
         proxy_set_header Accept "application/json, text/plain, */*";
         proxy_set_header X-TC-Domain some_domain;
         # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Content-Type 'application/json';
         proxy_set_header Authorization "[[AUTH_TOKEN]]";
         proxy_pass https://some_proxy_host;
         proxy_redirect / /;
         proxy_intercept_errors on;
         error_page 301 302 307 = @handle_redirect;
    }

在 njs 文件中,我正在向 API 发出 POST 请求

function payment(req) {
    if (req.method === 'GET') {
        return returnIndex(req);
    } else {
        req.subrequest('/tc/api/endpoint/book', {
            body: JSON.stringify({
                ...
            }),
            method: 'POST',
        }).then(payment => {
            return returnIndex(req);
        }).catch(() => {
            return returnIndex(req);
        });

    }
}

在此请求中,我收到作为 formdata 的正文响应,将其转换为 JSON 并向 3rd 方发出 POST 请求,但出现以下错误。

*63 open() "/usr/share/nginx/html//tc/api/endpoint/book" 发送到客户端时失败(2:没有这样的文件或目录),客户端:10.0.0.14,服务器: _,请求:“POST /checkout/payment?key=val HTTP/1.1”,子请求:“/tc/api/endpoint/book”,上游:“https://11.100.216.19:443//book”,主机:“proxy.eu-west-2.elb.amazonaws.com”

这个请求应该被代理给第 3 方,但看起来它试图打开文件但没有进行重定向。此问题仅在我的 AWS 账户中重现,并且 Nginx 在 CloudFront 之后托管。在本地,它运行良好。任何想法为什么会发生?

【问题讨论】:

  • 如果您在req.subrequest 代码中使用“http://.....”会怎样?
  • 谢谢,但没有帮助

标签: javascript amazon-web-services nginx amazon-cloudfront


【解决方案1】:

问题出在请求的 API 中。 Nginx 有这样的行为是因为响应的 405 状态码

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多