Как перенаправить все веб-запросы на определенный субдомен на Nginx?

У меня есть веб-сайт, на котором я хочу обслуживать запросы только на:

abc.mywebsite.com

Я хочу, чтобы любые запросы на:

www.mywebsite.com
mywebsite.com
<anything that is not abc>.mywebsite.com

направлялись на abc.mywebsite.com , потому что у меня есть сертификат специально для этого. Как я могу написать свой файл conf для этого?

Вот мой файл conf в его нынешнем виде:

server {
        listen 80 default_server;
        listen [::]:80 adefault_server;
        server_name _;
        return 301 https://$host$request_uri;
}

server {
    listen   443 default ssl;
    server_name abs.mywebsite.com;

    ssl    on;
    ssl_certificate    /etc/nginx/bundle.crt;
    ssl_certificate_key    /etc/nginx/abc.mywebsite.com.key;

    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;


    root /home/mywebsite/public;

    try_files $uri/index.html $uri @app;
-2
задан 14 March 2019 в 00:49
2 ответа

Вам нужен Блок default_server как для HTTP, так и для HTTPS. Этот блок будет обрабатывать ваше перенаправление.

Это будет выглядеть так:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    return 301 https://abc.mywebsite.com$request_uri;
}

Эти блоки перенаправляют любой запрос к любому виртуальному хосту на abc.mywebsite.com и исходный URI запроса. Вы можете удалить request_uri , потому что довольно часто не существует соответствующей страницы.

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    ... ssl_certificates here ...

    return 301 https://abc.example.com$request_uri;
}

Этот блок перенаправляет любой запрос, поступающий на любой виртуальный хост на порт 443, на abc.example.com и исходный URI. При использовании TLS у вас должны быть действующие сертификаты для перенаправляемых доменов, и вам необходимо правильно их настроить, чтобы это работало в полной мере.

server {
    listen 443 ssl;

    server_name abc.example.com;

    ssl_certificate    /etc/nginx/bundle.crt;
    ssl_certificate_key    /etc/nginx/abc.mywebsite.com.key;

    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    root /home/mywebsite/public;

    try_files $uri/index.html $uri @app;
}

Это фактическая блокировка для abc.example.com .

1
ответ дан 5 December 2019 в 21:14

Я добавил это к каждому блоку сервера:

if ($host !~* ^abc\.mywebsite\.com$ ) {
    return 301 https://abc.mywebsite.com$request_uri;
}

И он работает именно так, как я хочу. Я знаю, что некоторым людям не нравятся утверждения if . Тогда почему они там? Прекрасно работает.

1
ответ дан 5 December 2019 в 21:14

Теги

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