【问题标题】:nginx SSL redirect not workingnginx SSL重定向不起作用
【发布时间】:2018-06-22 04:07:41
【问题描述】:

我已将 nginx 配置为将流量转发到快速服务器,并希望通过将指向 http:// 的流量重定向到 https:// 来强制使用 SSL。我已经对该主题进行了广泛的谷歌搜索,但无法使其正常工作。 HTTPS 工作正常,但 HTTP 也正常 - 重定向似乎没有任何效果。

server {
    listen 80;
    listen [::]:80;
    server_name my.domain www.my.domain;
    return 301 https://my.domain$request_uri;
}
server {

    listen 443 ssl default_server;
    listen [::]:443 ssl;
    server_name my.domain www.my.domain;

    ssl_certificate     /home/user/my_domain.crt;
    ssl_certificate_key /home/user/my_domain.key;


    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/mydomain.access.log;

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      proxy_pass          https://localhost:3000;
      proxy_read_timeout  90;

      proxy_redirect      https://localhost:3000 https://my.domain;
    }

}

【问题讨论】:

  • 假设您使用nginx reload|restart 重新加载配置,nginx -t 确保配置正确,nginx -T 确保看到配置。
  • 似乎 reload 不是一个有效的命令,-T 也不是。我在 Ubuntu 14.04 上使用最新的 nginx。 -t 报告配置正常,当我重新启动服务时正在应用其他更改

标签: express nginx


【解决方案1】:

我也有同样的问题,所以我将这些应用到服务器以只接受一个请求,该请求将同时决定 http 和 https

server { 
    listen 80 ;
    listen [::]:80 ;
    listen 443 ssl http2 ;
    listen [::]:443 ssl http2 ;
    server_name example.com www.example.com; 

    #------ ssl certificates and other config --------

    set $https_redirect 0;
    #if request came from port 80/http
    if ($server_port = 80) { 
        set $https_redirect 1; 
    }
    # or if the requested host came with www 
    if ($host ~ '^www\.') { 
        set $https_redirect 1; 
    }
    #then it will redirects
    if ($https_redirect = 1) {
        return 301 https://example.com$request_uri;
    }
}

通过使用这个我只有服务器块来处理任何请求

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 2012-05-29
    • 2019-03-17
    • 1970-01-01
    • 2018-08-29
    • 2017-11-21
    • 2018-07-02
    • 2015-05-25
    相关资源
    最近更新 更多