Nginx

使所有內容都轉到 https,除了 rails、nginx、passenger 中的一個 url

  • March 30, 2011

嘿,我有一個 Rails 應用程序,我已經將幾乎所有流量重定向到使用 https。但是,我的應用程序中有一條特定的路徑,我需要通過普通的 http 訪問它,比如somedomain.com/special.

我想知道這是否可能,因為我的 rails 應用程序似乎是在 https 塊中定義的。也許如果有某種方法可以在 http 和 https 上託管它,那麼如果不是,則將所有流量從 http 重定向到 https /special?(我還需要/RPC2在 http 上,但這不是 rails 路徑,這就是為什麼它現在可以工作的原因)。

我將不勝感激任何建議。如果您在我的配置中發現任何明顯的錯誤,如果您指出它們,我將不勝感激!

server {
  listen 80;
  server_name somedomain.com;

  location / {
     rewrite ^ https://somedomain.com$request_uri? permanent;
  }

  location /RPC2 {
     include scgi_params;
     scgi_pass 127.0.0.1:5000;
     auth_basic "app";
     auth_basic_user_file /var/www/server/basic.auth;
  }
}

server {
  listen 443 default ssl;

  server_name somedomain.com;
  root /var/www/sites/app/current/public;
  passenger_enabled on;
  rails_env production;

  ssl_certificate /etc/ssl/certs/myssl.crt;
  ssl_certificate_key /etc/ssl/certs/myssl.key;
  ssl_protocols SSLv2 SSLv3 TLSv1;
  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

  location /downloads {
     autoindex on;
     autoindex_exact_size off;
     auth_basic "node";
     auth_basic_user_file /var/www/server/basic.auth;
     alias /var/www/downloads/;
  }
}

再次感謝!

我想你可以通過 proxy_passing 到 https 伺服器。

伺服器 {
聽 80;
位置/特殊{
proxy_pass https://localhost:443;
proxy_set_header X-Real-IP $remote_addr;
}
}

如果它適合您,請檢查應用程序和 nginx 訪問日誌以獲取 / 特殊請求。如果記錄的 IP 是 127.0.0.1,啟用 nginx 的 http_realip 模組並添加

set_real_ip_from 127.0.0.1;
real_ip_header X-Real-IP;

在 ssl 伺服器配置中。

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