【问题标题】:How to set up redirect from http to https with nginx?如何使用 nginx 设置从 http 到 https 的重定向?
【发布时间】:2014-02-23 12:10:30
【问题描述】:

我整天都在与这个问题作斗争。 这是我的nginx.cong

upstream my_website.co {
      server 127.0.0.1:8080;
    }

    server{
      listen 80;
      listen  443 default ssl;
      # return 301 https://www.my_website.co; - I put it here, but it didn't work  

      ssl on;
      ssl_certificate      /etc/nginx/certs/my_website.co.crt;
      ssl_certificate_key  /etc/nginx/certs/my_website.co.private.key;

      server_name my_website.co _;

      root /home/deployer/my_website/public;

      location / {
        proxy_set_header X_FORWARDED_PROTO $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   CLIENT_IP         $remote_addr;

        if (!-f $request_filename) {
          proxy_pass http://my_website.co;
          break;
        }
        if (-f $document_root/system/maintenance.html) {
          return 503;
        }
      }
      # return 301 https://www.my_website.co; - I put it here, but it didn't work  

你能帮我吗,如何将所有内容从http重定向到https

我的 Rails 代码:

应用控制器

before_filter :ensure_domain
APP_DOMAIN = 'www.my_website.co'
  def ensure_domain
    if request.env['HTTP_HOST'] != APP_DOMAIN && Rails.env != 'development'
      redirect_to "https://#{APP_DOMAIN}#{request.env['REQUEST_PATH']}", :status => 301
    end
  end

我会感谢每一个帮助,我在这里迷路了。

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby http nginx https


    【解决方案1】:

    我在我的一个站点上的 nginx 配置文件中做了这样的事情,它可以正常工作。我的 ApplicationController 中也没有任何东西可以强制重定向。

    server {
                listen 80;
                server_name my_website.co;
                rewrite ^ https://server_name$request_uri? permanent;
        }
    
    server {
                listen 80;
                server_name www.my_website.co;
                rewrite ^ https://server_name$request_uri? permanent;
        }
    
    server {
                listen       443;
                server_name  my_website.co;
                root /home/deployer/my_website/public;
    
                ssl on;
                ssl_certificate      /etc/nginx/certs/my_website.co.crt;
                ssl_certificate_key  /etc/nginx/certs/my_website.co.private.key;
    
                // rest of your config file below
        }
    

    【讨论】:

    • 我已经尝试过这个设置,当我运行http://my_website.co 时,它被重定向到http://my_website.co。但是当我运行http://www.my_website.co 时,我收到错误 Welcome to nginx! 。如何摆脱这种情况?
    • 使用附加的服务器指令更新我的答案,您也可以使用 www 来重定向它
    【解决方案2】:

    你的服务器部分应该只监听端口 443,所以在你的 Nginx 配置中删除端口 80。然后像这样在你的 Nginx 配置文件中添加一个新的服务器部分:

    服务器 { 听 80; server_name my_site.co; 重写 ^ https://$server_name$request_uri?永恒的; }

    然后 Nginx 将为您将所有内容重定向到 SSL 版本。您可以删除 ApplicationController 中的代码。

    【讨论】:

      【解决方案3】:

      在 Rails 4 中我们可以直接在 application.rb 中这样做

      config.force_ssl = true
      

      无需玩nginx配置文件。

      【讨论】:

        猜你喜欢
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 2019-06-16
        • 2022-08-14
        • 1970-01-01
        • 2016-12-02
        • 2018-01-19
        • 2015-07-16
        相关资源
        最近更新 更多