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