Блоки Сервера Nginx: https, non-www, и non-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 и non-www.

ОБНОВЛЕНИЕ:
Проблемой субдомена (сайт 2 выше) больше не является проблема... Я привел к сбою к повторно связанному соответствующий файл от доступного сайтам до поддерживающего сайты.

Все еще имея те же проблемы с сайтом 1 не перенаправление от www - явный, с http и с https.

РЕШЕННЫЙ (!)
Проблема? Никакая запись CNAME DNS (стоят перед пальмой!). Большое спасибо @BE77Y для помощи мне найти проблему. Кроме того, в случае, если это помогает другим, вот моя текущая и полностью рабочая конфигурация nginx, состоя из двух блоков сервера, с тем, который заботится обо всем перенаправлении к non-www и https (и использует лучшие практики NGINX, не переписывает и не если операторы):

# 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;
}

Глюки (для других, которые обычно не работают с серверами):

  • ясный кэш (или открытый и близкий инкогнито окна) между тестами
  • удостоверьтесь, что у Вас есть запись DNS CNAME (www example.com.)!
2
задан 9 January 2016 в 22:43
1 ответ

Из того, что я вижу, вы почти у цели; Я бы просто настроил вещи немного по-другому (в зависимости от ваших описанных требований), просто чтобы немного упростить. Одна вещь, которую я хотел бы пояснить, заключается в том, что вы, похоже, не включили сегмент 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, в свой файл конфигурации - я предполагаю, что это потому, что они у вас уже работают, но если нет, пожалуйста, не стесняйтесь комментировать это, и я Будем рады помочь в их включении в вышеперечисленное.

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

1
ответ дан 3 December 2019 в 12:50

Теги

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