我现在正在设置一个使用 Ruby on Rails 和 Thin 服务器的服务器。
我已经设置了 Nginx 来重定向我的所有http://mysite.com
网站https://mysite.com
(使用 SSL)。我希望到该页面的所有网络流量都是 SSL,没有例外。
这很有效,但让我烦恼的是,如果有人写入,仍然可以不使用 SSL 访问我的瘦服务器http://mysite.com:3000
,而这恰好是我运行服务器的端口。(我实际上在端口 3000、3001... 上有几个服务器)。
有没有办法阻止这种情况,或者将其重写为https://mysite.com
像我对端口 80 所做的那样?
我尝试重复我在端口 80 上执行的操作,但收到错误消息,提示该端口已被使用。
这是我的 nginx 配置。
upstream mysite.com {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
##THIS WORKS:
server {
listen 80 default;
server_name mysite.com *.mysite.com;
## redirect http to https ##
return 301 https://mysite.com$request_uri;
}
##THIS FAILS with "Address already in use"
server {
listen 3000;
server_name mysite.com *.mysite.com;
## redirect http to https ##
return 301 https://mysite.com$request_uri;
}
#This part works as expected
server {
listen 443 ssl;
server_name mysite.com www.mysite.com;
ssl on;
ssl_certificate /home/sne/.ssl/server.crt;
ssl_certificate_key /home/sne/.ssl/server.key;
access_log /var/www/mysite.com/log/access.log;
error_log /var/www/mysite.com/log/error.log;
root /var/www/mysite.com;
index index.html;
if ($host = 'www.mysite.com' ) {
return 301 https://mysite.com$request_uri;
}
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_FORWARDED_PROTO $scheme;
proxy_redirect off;
try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;
}
location @ruby {
proxy_pass http://mysite.com;
}
}
答案1
关闭防火墙的 3000 端口。
然后确保以仅绑定到本地主机的方式启动 Thin。这绝对可以防止不是来自本地计算机本身的入站连接。
例如:
rails server -b ::1
或者旧的 IPv4 方式:
rails server -b 127.0.0.1