Проблемы, перенаправляющие старые URL-адреса сайтов на новые URL-адреса сайтов с помощью NGINX

Установите и используйте Synaptic Package Manager, который вы можете найти в Software Center для удаления Skype. Легко управлять установленными / обновлять / удалять приложения в этой статье. О Synaptic здесь - Synaptic Package Manager

0
задан 15 December 2017 в 21:33

3 ответа

У вас есть некоторые проблемы с вашими конфигурациями.

Мы рассмотрим каждый отдельный серверный блок здесь отдельно.

Блок # 1: projects.old-site.com -> projects.new-site.com redirection

Это то, что вы нам предоставили:

server {
    listen                80;
    listen                443 ssl;
    server_name           projects.old-site.com;
    access_log            off;
    return 301 $scheme://projects.new-site.com;
}

Вам не хватает блока # 1: projects.old-site.com -> projects.new-site.com redirection здесь для конфигурации:

ssl_certificate директива - необходимо знать, какой сертификат SSL служить для домена. Директива ssl_certificate_key - ключевой файл сертификата SSL, который соответствует сертификату SSL для сайта «старых» проектов.

Вы выполняете перенаправление 301, чтобы соответствовать схеме, но почему вы это делаете, если вы направляете SSL без SSL в серверный блок 2? Просто перенаправляйтесь на сайт HTTPS и включайте $request_uri по понятным причинам (вы не пропускаете один и тот же URI запроса, так что все не работает должным образом).

Ваши и [ ! d13] здесь должен выглядеть следующим образом:

server {
    listen 80;
    listen 443 ssl;
    server_name projects.old-site.com;

    ssl_certificate /path/to/valid/projects.old-site.com/certificate;
    ssl_certificate_key /path/to/valid/projects.old-site.com/certificate.key;

    access_log off;
    return 301 https://projects.new-site.com$request_uri;
}

Блок # 2: http -> https redirection для projects.new-site.com

Вы дали нам это:

server {
    listen                80;
    server_name           projects.new-site.com;
    access_log            off;

    client_max_body_size  100M;

    return 301 https://$host$request_uri;
}

У вас здесь не так много проблем, но давайте попробуем не принимать $host здесь глобально (нам это не нужно, мы знаем, где мы хотим это в конечном итоге), и нам также не нужно client_max_body_size. 301 переадресации в любом случае не уважают.

Вы не в итоге:

server {
    listen                80;
    server_name           projects.new-site.com;
    access_log            off;

    return 301 https://projects.new-site.com$request_uri;
}

Блок # 2: http -> https redirection для projects.new-site.com

Теперь для вашего третьего блока. * Без всего блока сервера и всех его конфигурационных директив мы не можем должным образом помочь в настройке блока.

Вы дали нам это:

server {
    listen                443 ssl;
    server_name           projects.new-site.com;

    client_max_body_size  100M;

    ssl_certificate       /path/to/new-site.crt;
    ssl_certificate_key   /path/to/new-site.key;

    ...
}

В этом нет ничего плохого блок, однако, если вам не нужна директива client_max_body_size для вашего бэкэнд-приложения, вероятно, вы должны удалить ее.

1
ответ дан 22 May 2018 в 16:59
  • 1
    Большое спасибо за подробный ответ. Я уже давно работаю с этим сервером, унаследовал меня, когда начал работать здесь. Да, приложение back end нуждается в директиве client_max_body_size, поэтому мне придется оставить это в покое. Я проверю это и сообщит результаты. – jrea 15 December 2017 в 22:11
  • 2
    На самом деле мне не хватало директив ssl_certificate и ssl_certificate_key для старого сайта. Забавно, что собственный сайт Nginx не упоминает об этом, когда я изучал эту проблему. Большое спасибо, сэр. – jrea 16 December 2017 в 05:09
  • 3
    @jrea Я рад, что это помогло решить проблему! Да, эмпирическое правило негласное заключается в том, что «каждый сайт, обслуживающий SSL, должен иметь свои собственные директивы SSL-сертификатов» чтобы убедиться, что обслуживаются соответствующие сертификаты. – Thomas Ward♦ 16 December 2017 в 06:08

У вас есть некоторые проблемы с вашими конфигурациями.

Мы рассмотрим каждый отдельный серверный блок здесь отдельно.

Блок # 1: projects.old-site.com -> projects.new-site.com redirection

Это то, что вы нам предоставили:

server { listen 80; listen 443 ssl; server_name projects.old-site.com; access_log off; return 301 $scheme://projects.new-site.com; }

Вам не хватает блока # 1: projects.old-site.com -> projects.new-site.com redirection здесь для конфигурации:

ssl_certificate директива - необходимо знать, какой сертификат SSL служить для домена. Директива ssl_certificate_key - ключевой файл сертификата SSL, который соответствует сертификату SSL для сайта «старых» проектов.

Вы выполняете перенаправление 301, чтобы соответствовать схеме, но почему вы это делаете, если вы направляете SSL без SSL в серверный блок 2? Просто перенаправляйтесь на сайт HTTPS и включайте $request_uri по понятным причинам (вы не пропускаете один и тот же URI запроса, так что все не работает должным образом).

Ваши и [ ! d13] здесь должен выглядеть следующим образом:

server { listen 80; listen 443 ssl; server_name projects.old-site.com; ssl_certificate /path/to/valid/projects.old-site.com/certificate; ssl_certificate_key /path/to/valid/projects.old-site.com/certificate.key; access_log off; return 301 https://projects.new-site.com$request_uri; }

Блок # 2: http -> https redirection для projects.new-site.com

Вы дали нам это:

server { listen 80; server_name projects.new-site.com; access_log off; client_max_body_size 100M; return 301 https://$host$request_uri; }

У вас здесь не так много проблем, но давайте попробуем не принимать $host здесь глобально (нам это не нужно, мы знаем, где мы хотим это в конечном итоге), и нам также не нужно client_max_body_size. 301 переадресации в любом случае не уважают.

Вы не в итоге:

server { listen 80; server_name projects.new-site.com; access_log off; return 301 https://projects.new-site.com$request_uri; }

Блок # 2: http -> https redirection для projects.new-site.com

Теперь для вашего третьего блока. * Без всего блока сервера и всех его конфигурационных директив мы не можем должным образом помочь в настройке блока.

Вы дали нам это:

server { listen 443 ssl; server_name projects.new-site.com; client_max_body_size 100M; ssl_certificate /path/to/new-site.crt; ssl_certificate_key /path/to/new-site.key; ... }

В этом нет ничего плохого блок, однако, если вам не нужна директива client_max_body_size для вашего бэкэнд-приложения, вероятно, вы должны удалить ее.

1
ответ дан 18 July 2018 в 01:07

У вас есть некоторые проблемы с вашими конфигурациями.

Мы рассмотрим каждый отдельный серверный блок здесь отдельно.

Блок # 1: projects.old-site.com -> projects.new-site.com redirection

Это то, что вы нам предоставили:

server { listen 80; listen 443 ssl; server_name projects.old-site.com; access_log off; return 301 $scheme://projects.new-site.com; }

Вам не хватает блока # 1: projects.old-site.com -> projects.new-site.com redirection здесь для конфигурации:

ssl_certificate директива - необходимо знать, какой сертификат SSL служить для домена. Директива ssl_certificate_key - ключевой файл сертификата SSL, который соответствует сертификату SSL для сайта «старых» проектов.

Вы выполняете перенаправление 301, чтобы соответствовать схеме, но почему вы это делаете, если вы направляете SSL без SSL в серверный блок 2? Просто перенаправляйтесь на сайт HTTPS и включайте $request_uri по понятным причинам (вы не пропускаете один и тот же URI запроса, так что все не работает должным образом).

Ваши и [ ! d13] здесь должен выглядеть следующим образом:

server { listen 80; listen 443 ssl; server_name projects.old-site.com; ssl_certificate /path/to/valid/projects.old-site.com/certificate; ssl_certificate_key /path/to/valid/projects.old-site.com/certificate.key; access_log off; return 301 https://projects.new-site.com$request_uri; }

Блок # 2: http -> https redirection для projects.new-site.com

Вы дали нам это:

server { listen 80; server_name projects.new-site.com; access_log off; client_max_body_size 100M; return 301 https://$host$request_uri; }

У вас здесь не так много проблем, но давайте попробуем не принимать $host здесь глобально (нам это не нужно, мы знаем, где мы хотим это в конечном итоге), и нам также не нужно client_max_body_size. 301 переадресации в любом случае не уважают.

Вы не в итоге:

server { listen 80; server_name projects.new-site.com; access_log off; return 301 https://projects.new-site.com$request_uri; }

Блок # 2: http -> https redirection для projects.new-site.com

Теперь для вашего третьего блока. * Без всего блока сервера и всех его конфигурационных директив мы не можем должным образом помочь в настройке блока.

Вы дали нам это:

server { listen 443 ssl; server_name projects.new-site.com; client_max_body_size 100M; ssl_certificate /path/to/new-site.crt; ssl_certificate_key /path/to/new-site.key; ... }

В этом нет ничего плохого блок, однако, если вам не нужна директива client_max_body_size для вашего бэкэнд-приложения, вероятно, вы должны удалить ее.

1
ответ дан 24 July 2018 в 17:20

Другие вопросы по тегам:

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