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

Блоки сервера Nginx: https, без www и без ssl поддомена

Вот мой сценарий:

Два сайта:

  1. https://example.com
  2. 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, в свой файл конфигурации - я предполагаю, что это потому, что они у вас уже работают, но если нет, пожалуйста, не стесняйтесь комментировать это, и я с радостью поможем включить их в вышеперечисленное.

Надеюсь, это поможет!