gpt4 book ai didi

node.js - Koajs 路由适用于 HTTP 但无法使用 HTTPS

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:49 27 4
gpt4 key购买 nike

我正在使用 letsencrypt 在我的 koa2 API 上设置 HTTPS,使用 this 的最后一部分 digital ocean 指南。我正在使用 nginx 作为反向代理。使用 HTTP 时一切正常,但使用 HTTPS 时我的路由被破坏了,因为这是我第一次设置 HTTPS,所以我很难找到原因。例如,使用纯 HTTP,向 http://myapi.com/api/some-route 发出请求,我会看到一个看起来像这样的请求

{ 
request: {
method: 'GET',
url: '/api/some-route',
header: {
'origin': 'https://myapi.com',
accept: '*/*'
}
}

使用 HTTPS 看起来像

{ 
request: {
method: 'GET',
url: '//some-route',
header: {accept: '*/*' }
}

request.url 很古怪,原始 header 丢失。我无法到达我的任何路线。我想知道这是否是我的 nginx 配置有问题,但很难确定从哪里开始。

这是 nginx 配置,主要是从 the DigitalOcean guide 复制而来

server {
listen 80;
listen [::]:80 default_server ipv6only=on;
return 301 https://$host$request_uri;
}

server {
listen 443;
server_name myapi.com;
ssl on;
# Use certificate and key provided by Let's Encrypt:
ssl_certificate /etc/letsencrypt/live/myapi.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/myapi.com/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

location /api {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://localhost:3000/;
proxy_ssl_session_reuse off;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
}

最佳答案

尾部斜杠在 NGINX 配置中有特殊含义。我相信在 proxy_pass 中添加尾部斜杠(或者更确切地说,以斜杠结尾的路径)会设置 NGINX 用于将请求传递到的新“根”。

因此,如果您使用 http://localhost:3000/,NGINX 会将匹配 https://your-site/api/some-route 的请求传递给http://localhost:3000//some-route(因为它使用/作为新的根。

如果您不添加尾部斜杠,NGINX 将按预期工作并将请求传递给 http://localhost:3000/api/some-route:

proxy_pass http://localhost:3000;

关于node.js - Koajs 路由适用于 HTTP 但无法使用 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43298851/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com