Почему https://www.foobar.com перенаправляет к себе?

У меня нет правил, которые предлагают https://www.foobar.com должен перенаправить к https://www.foobar.com. Но почему это делает это?

Это - мой curl вывод:

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

Конфигурация 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/;
  }
}
1
задан 11 February 2015 в 09:40
1 ответ

Это перенаправление для добавления косой черты в конце: с www.example.com на www.example.com/ .
Из руководства

Если местоположение определяется строкой префикса, которая заканчивается косой чертой символ, а запросы обрабатываются одним из proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass или memcached_pass, затем выполняется специальная обработка. В ответ на запрос с URI равно этой строке, но без косой черты в конце, постоянный перенаправление с кодом 301 будет возвращено на запрошенный URI с добавлена ​​косая черта .

Я предполагаю, что это запускает proxy_pass для unicorn.

У вас есть строка location / в вашей конфигурации. Вы выполняете запрос с помощью curl -Ik https://www.foobar.com (обратите внимание на отсутствие завершающей косой черты / в вашем запросе). Отсутствие косой черты приводит к перенаправлению на "правильный" URL-адрес, который соответствует директиве местоположения https://www.example.com/ .

1
ответ дан 4 December 2019 в 00:12

Теги

Похожие вопросы