Я новичок в NGINX и всей конфигурации, поэтому мне удалось настроить сервер со следующей конфигурацией с помощью друга:
server {
listen 80;
listen [::]:80;
server_name domain.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 80;
listen [::]:80;
server_name domain.de;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name domain.com domain.de;
root /var/www/html;
index index.php index.html index.htm;
есть несколько серверов для моей главной страницы, некоторых страниц проекта и некоторых частных страниц. У меня есть собственный сервер для каждого TLD, потому что я не хочу, чтобы TLD в адресной строке изменялся при перенаправлении. Теперь мой ответ: как я могу просто подключить все эти серверы без SSL к одному большому серверу (1 / проект) без перенаправления только на один TLD?
Пример:
Project.com, Project.de, Project.net и Project.org перенаправляют более 5 из этих серверов без SSL на один сервер с поддержкой SSL. Когда я собираюсь http://project.net меня перенаправляют на https://project.net. TLD вообще не меняется из-за настройки одного сервера без SSL.
Чего я хочу достичь, так это то, что я могу минимизировать свой файл конфигурации, чтобы иметь один сервер без SSL для каждого проекта с перенаправлением на https без изменения домена.
:80 Server :443 Server
http domain.net ---> https domain.net ([non-SSL 01] ---> [SSL 01]) http domain.com ---> https domain.com ([non-SSL 02] --- > [SSL 01]) http domain.de ---> https domain.de ([non-SSL 03] ---> [SSL 01])
http project.de ---> https project.de ([без SSL 04] ---> [SSL 02]) http project.com ---> https project.com ([без SSL 05] --- > [SSL 02]) и т. Д.
Обновленный ответ, соответствующий уточненному вопросу.
Такое перенаправление можно сделать следующим образом:
server {
server_name _;
listen 80 default_server;
return 301 https://$server_name$request_uri;
}
Это серверный блок по умолчанию, который соответствует любому доменному имени. Мы просто возвращаем ответ перезаписи 301 с именем сервера, используемым в запросе. Это будет делать то, что показывает ваш пример.
Я понимаю, что вы хотите перенаправить несколько доменов на один домен.
Во-первых, я предлагаю вам использовать return 301
вместо того rewrite
. В этом случае он более эффективен.
Это конфигурация сервера по умолчанию. Он будет обслужен, если запрос не соответствует ни одному виртуальному хосту.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
return 301 https://your-correct-domain.com$request_uri;
}
Также настройте сервер для получения HTTP-трафика для your-correct-domain.com и перенаправления его на HTTPS.
server {
listen 80;
listen [::]:80;
server_name your-correct-domain.com;
return 301 https://your-correct-domain.com$request_uri;
}
Затем, наконец, HTTPS-сервер your-correct-domain.com, на котором у вас есть все ваши config.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your-correct-domain.com;
root /var/www/html;
index index.php index.html index.htm;
}
Обратите внимание, что эта настройка будет служить сервером по умолчанию, если кто-то обращается к IP напрямую. Например, IP-адрес вашего сервера 192.168.100.100
, если кто-то введет это в своем браузере, он будет перенаправлен на https://your-correct-domain.com
.
Сервер по умолчанию перехватит все запросы, для которых не подготовлен сервер / виртуальный хост. Итак, если кто-то просит domain.de, my.domain.de, site2.domain-something.com, они все будут перманентно перенаправлен к https://your-correct-domain.com
. У вас также есть возможность перенаправить с помощью 302 вместо 301.
Последнее замечание: если у вас есть другой виртуальный хост, который не является частью этой настройки, которую вы делаете, это не будет проблемой. Сервер по умолчанию не будет обслуживаться для этого, потому что Nginx сначала проверит, существует ли виртуальный хост, и обслужит его.
Вот правильный ответ!
server {
server_name _;
listen 80 default_server;
return 301 https://$host$request_uri;
}
Не используйте $ server_name, используйте $ host. Вы также можете использовать перенаправления 302, если хотите, потому что 301 являются постоянными, и если вы что-то измените, может быть сложнее исправить это из-за кеширования на разных устройствах. Используйте 301 только в том случае, если у вас еще нет много HTTP-ссылок, которые могут изменить URL-адрес в будущем, чтобы избежать множественных перенаправлений.