Я пытаюсь перенаправить с 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