Назад | Перейти на главную страницу

nginx перенаправляет http на https не работает

Я пытаюсь перенаправить с http на https. Например, вы посещаете example.com, и вы будете автоматически перенаправлены на https://example.com.

Я пробовал использовать это:

server {
      listen         80;
      return 301 https://$host$request_uri;
} 

а также этот:

server {
      listen         80;
      server_name    example.com;
      return         301 https://$server_name$request_uri;
}

как найдено здесь: Как в Nginx переписать все HTTP-запросы на https, сохранив поддомен?

Но ни то, ни другое меня не беспокоит. Я остаюсь на example.com.

У кого-нибудь есть идея?

Вы не определили имя сервера для своего хоста.

server {
      listen         80;
      server_name    *.example.com example.com;
      return 301 https://$host$request_uri;
} 

иначе ваш хост не будет вызван. Если вы посмотрите на пример, вы увидите, что в обоих случаях определено имя сервера.

У меня была аналогичная ошибка. Вместо перенаправления на страницу сохраняется 404.

Оказался конфликт конфигураций.

Моя конфигурация была помещена в /etc/nginx/conf.d/. Чего я не заметил, так это того, что в / etc / nginx / sites-enabled / была расположена конфигурация по умолчанию, которая также прослушивала порт 80, который имел более высокий приоритет, чем мой conf в conf.d. Простое удаление конфигурации по умолчанию разрешило мою проблему, и перенаправление работало правильно.

Ваш второй пример будет работать для любых запросов, идущих в http://example.com, однако помните, что www.example.com и example.com разные, поэтому, если вам нужно перенаправить что-либо на example.com, вы можете сделать

server {
      listen         80;
      server_name    *.example.com;
      return         301 https://$server_name$request_uri;
} 

либо перенаправить для каждого хоста, т.е.

server {
      listen         80;
      server_name    www.example.com example.com images.example.com cdn.example.com;
      return         301 https://$server_name$request_uri;
} 

Убедитесь, что вы оба тестируете конфигурацию через nginx -t и перезагрузите конфигурацию, когда вы вносите изменения с помощью перезагрузки nginx. Вы можете проверить, что получаете, с помощью живых http-заголовков или curl.

Приведенный ниже вывод - это то, что я вижу при попытке запроса заголовка http к домену, который мы направляем на https с точным блоком сервера выше.

$ curl -I -L http://host.domain.com
HTTP/1.1 301 Moved Permanently
Server: nginx/1.6.2
Date: Mon, 06 Apr 2015 03:26:39 GMT
Content-Type: text/html
Content-Length: 184
Connection: keep-alive
Location: https://host.domain.com/

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Mon, 06 Apr 2015 03:26:41 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.5.22
Set-Cookie: PHPSESSID=dca72682392e7ac96d4b7703ea7a1eb1; path=/; domain=domain.com; secure; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: PHPSESSID=c910822f8007fe8c0424715a24aa4728; path=/; domain=domain.com; secure; HttpOnly