使用 Nginx 和 Ruby On Rails(瘦服务器)阻止/重定向端口 3000

使用 Nginx 和 Ruby On Rails(瘦服务器)阻止/重定向端口 3000

我现在正在设置一个使用 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

相关内容