我正在使用Nginx在个人服务器上部署一个Rails应用程序,phusion_passenger。我有包含以下服务器块的站点配置文件。使用此配置,我的 http://192.168.1.121
服务不起作用,而https://192.168.1.121
失败并出现禁止(拒绝访问)错误。
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
# Make site accessible from http://192.168.1.121/
server_name 192.168.1.121;
passenger_enabled on;
rails_env production;
root /home/deploy/www/myrailsapp/current/public;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 443;
server_name 192.168.1.121;
passenger_enabled on;
rails_env production;
root /home/deploy/www/myrailsapp/current/public;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
error_page 500 502 503 504 /50x.html;
location / {
try_files $uri $uri/ =404;
}
}
生产.rb 有force_ssl:真
另外,如果我使用 https 条目删除服务器 {} 块,应用程序在 http 上运行得很好(当然我必须注释掉 force_ssl:true 来自 production.rb)。如果从https访问相同的目录,我对访问被拒绝错误感到非常困惑。
- nginx版本:nginx/1.6.2
- 导轨 4.0
- 红宝石 2.1.3
任何帮助,不胜感激。
尝试在与port 80
配置相同的server
块上配置 SSL。
此外,建议对 port 443
使用 listen
指令的 ssl
参数,而不是 ssl on
指令。
所以像这样:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
# Use ssl parameter on the listening socket instead of the 'ssl on' directive
listen 443 ssl;
server_name 192.168.1.121;
# Rest of your ssl configuration here
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
passenger_enabled on;
rails_env production;
root /home/deploy/www/myrailsapp/current/public;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
来源和推荐阅读:
- 官方nginx文档 - 单个HTTP/HTTPS服务器
- 数字海洋教程(可能对您的情况有帮助,也可能没有帮助)