【发布时间】:2017-04-08 18:29:25
【问题描述】:
我正在使用letsencrypt 在我的koa2 API 上设置HTTPS,使用this DigitalOcean 指南的最后一部分。我正在使用 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 很奇怪,并且缺少原始标头。我无法到达我的任何路线。我想知道这是否是我的 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 配置中发布
server块,用于将请求传递到 Node 应用程序。 -
@robertklep 更新了 NGINX 配置。
-
尾部斜线在 NGINX 中具有特殊的含义(尽管它的文档非常糟糕,我不记得它到底做了什么以及什么时候做的)。试试
proxy_pass http://localhost:3000(不带斜杠)。至于缺少的Origin,您可以为此添加proxy_set_header规则。 -
天哪,就是这样。谢谢!想要添加答案以便我接受吗?
标签: node.js ssl nginx https koa