Сейчас я настраиваю сервер, который использует 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