【发布时间】: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