让所有内容都转到 https,除了 rails、nginx、passenger 中的一个 url

让所有内容都转到 https,除了 rails、nginx、passenger 中的一个 url

嘿,我有一个 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/;
   }
}

再次感谢!

答案1

我认为您可以通过 proxy_passing 到达 https 服务器。

服务器 {
   听80;
   位置 /特殊 {
      代理通过 https://localhost:443;
      proxy_set_header X-真实IP $remote_addr;
   }
}

如果此方法有效,请检查应用程序和 nginx 访问日志中的 /special 请求。如果记录的 IP 为 127.0.0.1,请启用 nginx 的 http_realip 模块并添加

设置真实ip为127.0.0.1;
real_ip_headerX-真实IP;

在 ssl 服务器配置中。

相关内容