我有一个在nginx上与乘客一起运行的临时rails应用程序。我想保护与SSL的连接。我已经在网上阅读了很多资源,但我还没有让它在SSL上运行。
到目前为止,我在nginx.conf上的服务器块是:
server {
listen 80;
listen 443 default deferred;
server_name example.com;
root /home/deploy/app/public;
passenger_enabled on;
passenger_set_cgi_param HTTP_X_FORWARDED_PROTO https;
ssl on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:!ADH:!AECDH:!MD5;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/ssl/server.crt;
ssl_certificate_key /etc/ssl/server.key;
}
该网站正在运行,但未在HTTPS上运行。
答案 0 :(得分:28)
我刚刚自己决定使用SSL,并在DigitalOcean网站上发现了一篇关于如何做到这一点的文章。它可能是listen 443 default deferred;
,根据该文章,ssl
不是deferred
。
这是他们使用的nginx块;
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
listen 443 ssl;
root /usr/share/nginx/html;
index index.html index.htm;
server_name your_domain.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
try_files $uri $uri/ =404;
}
}
<强>更新强>
我现在在SSL上运行自己的网站。除了上面我刚刚告诉Rails强制使用SSL。在您的生产环境config;
# ./config/environments/production.rb
config.force_ssl = true
您可以选择在nginx.conf
;
http {
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;
}
更新日期:2015-09
由于我写了这个答案,我在nginx
配置中添加了一些额外的东西,我相信每个人都应该包含这些内容。将以下内容添加到server
块中;
server {
ssl_prefer_server_ciphers On;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
add_header X-Frame-Options DENY;
}
前三行(ssl_prefer_server_ciphers
,ssl_protocols
,ssl_ciphers
)是最重要的,因为它们可确保您拥有良好的强SSL设置。
X-Frame-Options
会阻止您的网站通过<iframe>
代码加入。我希望大多数人都会受益于此设置。