如何将所有请求转发到www子域,包括https请求?

时间:2014-06-11 07:11:54

标签: ruby-on-rails ssl nginx

我有一个VPS,在Ubuntu,NginX和Unicorn上运行Rails 4应用程序。

由于我希望所有网页都经过SSL加密,因此对http://的所有请求都会转发到https://,但工作正常。

这是我的NginX配置的摘录:

http {

        ....

        server {
                listen 80;
                server_name example.com;
                rewrite ^ https://$server_name$request_uri? permanent;
        }

        server {
                listen 443;
                server_name example.com;
                root /home/rails/public;
                index index.htm index.html;

                ssl on;
                ssl_certificate /etc/ssl/example.com.crt;
                ssl_certificate_key /etc/ssl/example.com.key;

                location / {
                        try_files $uri/index.html $uri.html $uri @app;
                }

                location @app {
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Forwarded-Proto $scheme;
                        proxy_set_header Host $host;
                        proxy_pass http://app_server;
                 }
        }
}

如何确保将http://example.comhttps://example.com的所有请求转发到https://www.example.com

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我们在apache2

中使用此功能
<VirtualHost *80>
    ServerName frontlineutilities.co.uk
    ServerAlias www.frontlineutilities.co.uk 
</VirtualHost>

Docs

研究过how you'd achieve this in Nginx后,我发现了这个:

server {
    listen       80;
    server_name  example.org  www.example.org;
    ...
}

-

捕获请求

我写这个作为答案的原因是因为您的选择是使用中间件还是Web服务器本身

虽然我不知道具体细节,但我知道添加到Rails中间件最终会导致膨胀。我是modular programming的坚定支持者 - 并且很乐意将功能分成堆栈的不同部分

您遇到的问题实际上不是rails - 这是服务器问题(如何将所有请求路由到www.)。因此,我强烈建议您专注于服务器以对其进行排序。最后,服务器将捕获请求到您的服务器IP&amp;相应地路由它们

我会从上面的资源开始。努力在服务器中重定向。无论您是向www.还是标准domain

发送请求,都无关紧要

答案 1 :(得分:1)

如果您要设置哪个重定向http://example.comhttps://example.comhttp://www.example.comhttps://www.example.com

以下内容应该进行重定向

server {
    listen 80;
    server_name example.com;
    rewrite ^/(.*) https://www.example.com$request_uri permanent;
} 
server {
    listen 443;
    server_name example.com;
    rewrite ^/(.*) https://www.example.com$request_uri permanent;
} 

您还将原始server_name更改为www.example.com 希望这会有所帮助。