Nginx强制将https://www.domain重定向到https://域

时间:2016-03-18 04:27:46

标签: ubuntu redirect nginx gunicorn

基本上,我正在尝试重定向用户:

始终

https://domain.com/。我目前的Nginx配置如下:

upstream app_server {
  # Bindings to the Gunicorn server
  server 127.0.0.1:8002 fail_timeout=0;
}

server {
    server_name "~^www\.(.*)$" ;
    return 301 https://$1$request_uri ;
}

server {
  # Access Logs
  access_log path_to/nginx-access.log;
  error_log path_to/nginx-error.log;

  listen 443 ssl;
  server_name _;

  client_max_body_size 4G;
  keepalive_timeout 5;
  root another_path;

  ssl_certificate path_to.crt;
  ssl_certificate_key path_to.key;

 location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    if (!-f $request_filename) {
      proxy_pass http://app_server;
      break;
    }
  }
  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root %(PROJECT_PATH)s/templates/public;
  }
}

问题是我的证书只对domain.com有效(不带www前缀),因此用户在访问最后一个地址时会收到错误(https://www.domain.com)。

我错过了什么?如何将https://www.domain.com重定向到https://domain.com

1 个答案:

答案 0 :(得分:0)

我认为这里的问题是你没有在你的第一个服务器块中捕获https://www.domain.com。如果排除listen指令,则默认情况下该服务器块将侦听80。

为此特殊情况创建另一个服务器块,如下所示:

server {
    listen 443 ssl http2 deffered;
    server_name www.domain.com;
    return 301 https://domain.com$request_uri;
}