Por que o https://www.foobar.com está redirecionando para si mesmo?

1

Não tenho regras que sugiram que https://www.foobar.com deva redirecionar para https://www.foobar.com . Mas por que está fazendo isso?

Esta é minha curl output:

curl -Ik https://www.foobar.com
HTTP/1.1 301 Moved Permanently
Content-Length: 184
Content-Type: text/html
Date: Wed, 11 Feb 2015 07:22:11 GMT
Location: https://www.foobar.com/
Server: nginx/1.4.7
Connection: keep-alive

Configuração do Nginx:

upstream unicorn_www.foobar.com {
 server unix:/srv/www/foobar/shared/sockets/unicorn.sock fail_timeout=0;
}

server {
  listen 80;
  server_name foobar.com;
  return 301 https://www.foobar.com$request_uri;
}
server {
  listen 80;
  server_name www.foobar.com;
  return 301 https://www.foobar.com$request_uri;
}
server {
  listen 80;
  server_name beta.foobar.com;
  return 301 https://www.foobar.com$request_uri;
}
server {
  listen 443;
  server_name foobar.com;
  return 301 https://www.foobar.com$request_uri;

  ssl on;
  ssl_certificate /etc/nginx/ssl/www.foobar.com.crt;
  ssl_certificate_key /etc/nginx/ssl/www.foobar.com.key;
}
server {
  listen 443;
  server_name beta.foobar.com;
  return 301 https://www.foobar.com$request_uri;

  ssl on;
  ssl_certificate /etc/nginx/ssl/www.foobar.com.crt;
  ssl_certificate_key /etc/nginx/ssl/www.foobar.com.key;
}

server {
  listen   443;
  server_name www.foobar.com foobar_staging pantherinae;
  access_log /var/log/nginx/www.foobar.com-ssl.access.log;

  ssl on;
  ssl_certificate /etc/nginx/ssl/www.foobar.com.crt;
  ssl_certificate_key /etc/nginx/ssl/www.foobar.com.key;

  keepalive_timeout 5;

  root /srv/www/foobar/current/public/;


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

  location @unicorn {
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_read_timeout 60;
    proxy_send_timeout 60;

    # If you don't find the filename in the static files
    # Then request it from the unicorn server
    if (!-f $request_filename) {
      proxy_pass http://unicorn_www.foobar.com;
      break;
    }
  }

  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root /srv/www/foobar/current/public/;
  }
}
    
por Christian Fazzini 11.02.2015 / 08:40

1 resposta

0

É um redirecionamento para adicionar uma barra: de www.example.com a www.example.com/ .
 Do manual

If a location is defined by a prefix string that ends with the slash character, and requests are processed by one of proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, or memcached_pass, then the special processing is performed. In response to a request with URI equal to this string, but without the trailing slash, a permanent redirect with the code 301 will be returned to the requested URI with the slash appended.

Eu assumo que o proxy_pass para unicorn é o que desencadeia isso.

Você tem uma linha location / na sua configuração. Você faz um pedido com curl -Ik https://www.foobar.com (Observe a barra final em falta / em sua solicitação). A barra perdida resulta em redirecionamento para a URL "correta" que corresponde à diretiva de localização https://www.example.com/ .

    
por 11.02.2015 / 09:30