Назад | Перейти на главную страницу

Блокирование / перенаправление порта 3000 с помощью Nginx и Ruby On Rails (тонкий сервер)

Сейчас я настраиваю сервер, который использует Ruby on Rails с тонким сервером.

Я настроил 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;
  }
}

Закройте порт 3000 в вашем брандмауэре.

Затем убедитесь, что вы начинаете тонкий так, что он привязан только к localhost. Это полностью предотвращает входящие соединения, исходящие не с самого локального компьютера.

Например:

rails server -b ::1

Или старый способ IPv4:

rails server -b 127.0.0.1