2016-12-13 66 views
1

我使用nginx作爲Raspberry Pi上的Rails應用程序的反向代理。我設法使它在http中工作,但我想啓用https。如何配置nginx使SSL與Rails一起工作?

問題是,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

您終止nginx的SSL連接,然後建立一個新的SSL連接到端口3000上運行你的後臺進程,您應該nginx和3000端口之間使用HTTP大概通信。

更改proxy_pass語句要麼:

proxy_pass http://127.0.0.1:3000; 

或(使用你的upstream指令):

proxy_pass http://lobsters; 
+0

謝謝!我沒有意識到nginx單獨管理SSL部分,然後我可以切換到http。現在更清楚了。 –