Nginx

使用 Nginx 和 Ruby On Rails(瘦伺服器)阻塞/重定向埠 3000

  • February 22, 2014

我現在正在設置一個使用 Ruby on Rails 和 Thin 伺服器的伺服器。

我已經設置 Nginx 將我的所有內容重定向http://mysite.comhttps://mysite.com(使用 ssl)。我希望頁面的所有網路流量都是 SSL,沒有例外。

這很好用,但令我困擾的是,如果有人寫http://mysite.com:3000,仍然可以在沒有 SSL 的情況下訪問我的瘦伺服器,這恰好是我執行伺服器的埠。(我實際上在埠 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 埠。

然後確保以僅綁定到本地主機的方式開始精簡。這絕對可以防止非來自本地機器本身的入站連接。

例如:

rails server -b ::1

或舊的 IPv4 方式:

rails server -b 127.0.0.1

引用自:https://serverfault.com/questions/577577