NGINX配置,用于将SSL请求代理到Sinatra服务器



>我有一个密钥、证书和一个链证书。域看起来像 automation.mydomain.com

我有一个Sinatra服务器在localhost:3000上运行,通过curl localhost:3000/test确认。

我想将端口 80 和端口 443 流量重定向到 3000。这是我/etc/sites-enabled/sinatra配置:

upstream app_aggregator {
    server 127.0.0.1:3000;
    keepalive 8;
}
# the nginx server instance
server {
    listen 0.0.0.0:80;
    server_name automation.mydomain.com my_site;
    access_log /var/log/nginx/aggregator.log;
    # pass the request to the node.js server with the correct headers
    # and much more can be added, see nginx config options
    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;
      proxy_pass http://app_aggregator/;
      proxy_redirect off;
    }
 }

请注意,上述方法不起作用(http://automation.mydomain.com/导致ERR_NAME_NOT_RESOLVED(。我不确定如何将密钥、普通证书和链证书添加到此组合中。

我过去用一个节点.js配置解决了这个问题,它愉快地消耗了密钥,SSL 工作得很好,但我从未使用过 nginx。

值得注意的是,我正在使用亚马逊AWS,只有80和443打开。

您的域的 DNS 配置有问题,如果不了解有关设置的更多信息,很难告诉您出了什么问题,但至少请确保您已正确设置域的名称服务器,并且 A 记录指向您的 AWS 实例。

使用 Nginx 配置 HTTPS 时需要注意的重要一点是,您的证书文件应包含您可能拥有的任何中间证书。有关详细信息,请参阅下面的 Nginx 文档链接。

使用 Nginx 设置 SSL 可以像将以下 3 行添加到您的配置中一样简单:

listen 0.0.0.0:443 ssl;
ssl_certificate /path/to/your/certificate
ssl_certificate /path/to/your/certificate_key

如果要强制执行HTTPS,可以在现有服务器块上禁用HTTP(端口80(,并创建一个额外的服务器块,如下所示:

server {
    listen 0.0.0.0:80;
    server_name automation.mydomain.com my_site;
    return 301 https://$server_name$request_uri;
}

这会将任何 HTTP 请求重定向到启用了 HTTPS 的服务器。请注意,我建议在测试时将 301 更改为 302,以便您的浏览器不会缓存响应。

有关详细信息,请参阅这些资源

  • nginx SSL 模块文档
  • 强大的 SSL 安全性 nginx 由 Raymii

最新更新