2

我试图弄清楚如何使用 nginx 通过 https 正确运行 Servant API 端点。

所以要经历我所做的。所以我想我可能需要设置 Servant,以便它可以通过 https 进行通信。所以我将此添加到我的代码中

  Development -> run port $ logStdoutDev $ corsWithContentType $ app cfg
  Production  -> runTLS (tlsSettings "./certs/fullchain1.pem" "./certs/privkey1.pem")
                        (setPort port defaultSettings)
                        (corsWithContentType $ app cfg)

所以这里的生产子句是在我的生产服务器上运行的。然后我在nginx中有这个

upstream api_server {
    server 127.0.0.1:8081;
}


location /api {
    proxy_set_header Host $host;
    proxy_pass http://api_server;
}

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/xxx/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/xxx/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

通过此设置,我从页面(通过 https 正确运行)执行 ajax 请求。但是,当我这样做时,我会收到来自仆人服务器的响应

InsecureConnectionDenied

好像我的 ajax 请求不安全。我相信,如果我从带有 https 的页面发出 ajax 请求,那么该请求是安全的。

如果我跳过所有这些并在没有 TLS 的情况下运行 Servant,我会在尝试发布时收到 405 Method Not Allowed。我知道这已连接到 https,因为当我直接向 API 的 IP:PORT 执行请求时,它可以工作。这里可能是什么问题?

4

1 回答 1

3

这是因为我在 nginx 配置中的“/api”前缀。请求作为“/api/registrations”发送给仆人,但应该是“/registrations”。nginx配置错误,与Servant和https无关。

于 2018-04-02T00:49:34.330 回答