Вот мой сценарий:
Два сайта:
https://example.com
http://dev.example.com
У сайта 1 есть сертификат ssl.
На сайте 2 нет.
(Другими словами, у меня нет ssl-сертификата с подстановочными знаками.)
Через Nginx пытаюсь установить нужный www
и HTTP
перенаправляет.
Цель для сайта 1 направлять
example.com
, www.example.com
и https://www.example.com
... чтобы
https://example.com
Цель для сайта 2 просто позволить http://dev.example.com
направить на себя.
Что я пробовал для цели 1
# SSL Redirect
server {
listen 80;
server_name example.com;
return 301 https://filethemes.com$request.com;
}
# WWW Redirect
server {
listen 80;
listen 443 ssl;
server_name www.example.com
ssl_certificate <my-path-here>.crt;
ssl_certificate_key <my-path-here>.key;
return 301 https://example.com$request_uri
}
# Site's Primary Server Block
server {
listen 443 ssl;
root /var/www/example.com;
index index.html;
server_name example.com;
ssl_certificate <my-path-here>.crt;
ssl_certificate_key <my-path-here>.key;
}
С помощью приведенного выше кода example.com
идет к 'https://example.com'но это все. Перенаправление www не работает. Есть идеи, почему?
Кроме того, с помощью простого серверного блока для сайта 2 (субдомен dev.example.com
) он перенаправляется на https://example.com
. Похоже, что я случайно перенаправляю свой поддомен на основной домен. Идеи?
Я знаю, что уже есть множество вопросов и ответов о Nginx, но я не смог найти никаких решений, которые помогли бы мне заставить все работать так, как хотелось бы.
Удивительно, насколько сложно это оказывается для такой, казалось бы, простой цели.
Я благодарен за любую информацию, которую могут предложить люди.
PS: Да, мой сертификат ssl поддерживает www и не www.
ОБНОВИТЬ:
Проблема с поддоменом (сайт 2 выше) больше не является проблемой ... Мне не удалось повторно связать соответствующий файл с сайтов, доступных для сайтов с поддержкой.
По-прежнему возникают те же проблемы с сайтом 1, который не перенаправляется с www
- голая, с http
и с https
.
РЕШЕНО (!)
Эта проблема? Нет записи DNS CNAME (лицо ладонью!). Большое спасибо @ BE77Y за помощь в поиске проблемы. Кроме того, на случай, если это поможет другим, вот моя текущая и полностью рабочая конфигурация nginx, состоящая из двух серверных блоков, один из которых заботится обо всех перенаправлениях на не-www и https (и использует передовые методы NGINX без повторного использования). пишет и нет операторов if):
# MAIN SERVER BLOCK
server {
listen 443 ssl;
root /var/www/example.com;
index index.html;
server_name example.com;
ssl_certificate <my-path-here>.crt;
ssl_certificate_key <my-path-here>.key;
}
# REDIRECTS (send everything to non-www https)
server {
listen 80;
listen 443;
server_name www.example.com example.com;
ssl_certificate <my-path-here>.crt;
ssl_certificate_key <my-path-here>.key;
return 301 https://example.com$request_uri;
}
Проблемы (для тех, кто обычно не работает с серверами):
Вы почти у цели, насколько я могу судить; Я бы просто настроил вещи немного по-другому (в соответствии с вашими описанными требованиями), просто чтобы немного упростить. Одна вещь, которую я хотел бы пояснить, заключается в том, что вы, похоже, не включили сегмент dev.example.com в свою конфигурацию?
Тем не менее, вот как я бы улучшил вашу текущую конфигурацию:
# Primary block including SSL redirect
server {
listen 80;
listen 443 ssl;
server_name example.com;
root /var/www/example.com;
index index.html;
ssl_certificate <my-path-here>.crt;
ssl_certificate_key <my-path-here>.key;
if ( $scheme = http ){
rewrite ^ https://$server_name$request_uri? permanent;
}
}
# WWW Redirect
server {
listen 80;
listen 443 ssl;
server_name www.example.com
ssl_certificate <my-path-here>.crt;
ssl_certificate_key <my-path-here>.key;
rewrite ^ https://example.com$request_uri? permanent;
}
Чтобы прояснить вышесказанное: это «более чистый» способ работы; если кто-то запрашивает ваш сайт на http://example.com
, они будут перенаправлены на https://example.com
через if
заявление, и аналогично они будут правильно обслуживаться сайтом, если они запросят его через https (что было бы проблемой с отдельными операторами, как и раньше). Если они попытаются получить доступ к сайту через http://www.example.com
он будет перенаправлен, или через https://www.example.com
он будет правильно согласовывать SSL, но все равно будет перенаправлен, как указано выше.
Как я уже отмечал, вы не включили сегменты, связанные с dev.example.com, в свой файл конфигурации - я предполагаю, что это потому, что они у вас уже работают, но если нет, пожалуйста, не стесняйтесь комментировать это, и я с радостью поможем включить их в вышеперечисленное.
Надеюсь, это поможет!