如何配置nginx以使SSL与Rails一起使用?

时间:2016-12-13 23:41:31

标签: ruby-on-rails ssl nginx raspberry-pi reverse-proxy

我使用nginx作为我的Raspberry Pi上Rails应用程序的反向代理。我设法让它在http中工作,但我希望启用https。

问题是,Rails应用程序似乎无法处理https请求。当我尝试访问页面时,这是Rails服务器的输出:

ERROR bad Request-Line `\x16\x03\x01\x01\x1C\x01\x00\x01\x18\x03\x03ɳ▒▒▒ ▒▒ڬ▒▒9C▒▒▒=▒▒▒-v_\f▒&▒%9}\x00\x00▒▒0▒,▒(▒$▒\x14▒'.

我对这一切都很陌生,但根据我的理解,我应该以某种方式将我的证书和密钥传达给Rails,以便它能够解密请求?

这是我要安装的应用程序:https://github.com/jcs/lobsters

这是我目前的nginx配置:

upstream lobsters {
    server 127.0.0.1:3000;
    keepalive 8;
}

## Redirects all HTTP traffic to the HTTPS host
server {
  listen 0.0.0.0:80;
  server_name lobsters.my.domain;

  server_tokens off;

  return 301 https://$http_host$request_uri;
  access_log  /var/log/nginx/lobsters_access.log;
  error_log   /var/log/nginx/lobsters_error.log;
}

## HTTPS host
server {
    listen 0.0.0.0:443 ssl;
    server_name lobsters.my.domain;

    access_log /var/log/nginx/lobsters_access.log;
    error_log /var/log/nginx/lobsters_error.log;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/lobsters.my.domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/lobsters.my.domain/privkey.pem;

    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_set_header X-Forwarded-Proto $scheme;

      proxy_pass https://127.0.0.1:3000;
      proxy_redirect off;

      proxy_http_version 1.1;
    }
 }

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您在nginx终止SSL连接,然后与在端口3000上运行的后端进程建立新的SSL连接。您应该使用HTTP在nginx和端口3000之间进行通信。

将您的proxy_pass语句更改为:

proxy_pass http://127.0.0.1:3000;

或(使用您的upstream指令):

proxy_pass http://lobsters;