簡體   English   中英

如何使用Nginx設置從http到https的重定向?

[英]How to set up redirect from http to https with nginx?

我整天都在與這個問題作斗爭。 這是我的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代碼:

ApplicationController的

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

我會為您的每一次幫助而感激,我迷失在這里。

謝謝

我在我的一個站點的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
    }

您擁有的服務器部分應僅偵聽端口443,因此在Nginx配置中將端口80從端口中刪除。 然后將這樣的新服務器部分添加到您的Nginx配置文件中:

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

然后Nginx將為您重定向所有內容到SSL版本。 您可以在ApplicationController中刪除代碼。

在Rails 4中,我們可以直接在application.rb中執行此操作

config.force_ssl = true

無需使用nginx配置文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM