Перенаправление/откат сайта Nginx

Я заметил странное поведение на одном из своих серверов, и я не могу понять, как он работает, и самое главное, если такая конфигурация делает перенаправление, поскольку я не уверен, как я попаду в https.

У меня есть два поддомена:

test.domain.com 

а также

test2.domain.com 

В конфигурации теста я вижу неправильное значение для server_name как:

test server config

server {

        root /var/www/html/test/public;
        index index.html index.php index.nginx-debian.html;

        server_name test test.domain.com;

        location / {
                try_files $uri $uri/ /index.php?$query_string; # =404;
        }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass   127.0.0.1:9000;
    
    }

    location ~ /\.ht {
        deny all;
    }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/test.domain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test.domain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
    if ($host = test.domain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        listen [::]:80;

        server_name testings test.domain.com;
    return 404; # managed by Certbot


}

Теперь test2 имеет ту же логику server_name

server_name: test2 test2.domain.com

**and no ssl enabled**

server {

        root /var/www/html/test2/public;
        index index.html index.php index.nginx-debian.html;

        server_name test2 test2.domain.com;

        location / {
                try_files $uri $uri/ /index.php?$query_string; # =404;
        }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass   127.0.0.1:9000;
    
    }

    location ~ /\.ht {
        deny all;
    }

#    listen [::]:443 ssl ipv6only=on; # managed by Certbot
#    listen 443 ssl; # managed by Certbot
#    ssl_certificate /etc/letsencrypt/live/test.domain.com/fullchain.pem; # managed by Certbot
#    ssl_certificate_key /etc/letsencrypt/live/test.domain.com/privkey.pem; # managed by Certbot
#    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
#    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
#    if ($host = test2.domain.com) {
#        return 301 https://$host$request_uri;
#    } # managed by Certbot


        listen 80;
        listen [::]:80;

        server_name test2 test2.domain.com;
#    return 404; # managed by Certbot


}

Есть предупреждение о том, что test2 уже используется, но все еще работает.

Теперь странно то, что когда я иду в https://test2.domain.com это работает,

но приносит мне корень test а не test2;

в то время как имеет смысл то, что я перенаправляюсь в корень test2, если я открываю http://test.domain.com

Я расширил сертификат test2

certbot certonly --nginx -d "test.domain.com,test2.domain.com"

поэтому один и тот же сертификат должен работать для обоих.

Мой вопрос в том, как я указываю на корень теста, когда я открываю https://test2.domain.com?

SSL-сертификат nginx

Даниэль

1 ответ
1

В этом нет ничего странного — вы получаете то, что настроили. В этом нет ничего странного или волшебного. Это просто то, что сокеты tcp прослушивают с вашей конфигурацией. Это очевидно даже без чтения документации по nginx.

Вы не сказали, это два сервера, настроенные на один хост или на два разных хоста, и на какие IP-адреса ваши test.domain.com test2.domain.com решены — это очень важно для вашего вопроса и совсем не очевидно.

Первая догадка — вы говорите о двух серверах nginx с разными IP-адресами и просто перепутали IP-адреса серверов в конфигурации DNS.

https://test2.domain.com … приносит мне корень test а не test2

test2.domain.com разрешается в IP сервера с root /var/www/html/test/public

Меня перенаправляют в корень test2, если я открываю http://test.domain.com

test.domain.com разрешается в IP сервера с root /var/www/html/test2/public

Второе предположение — вы говорите об одном сервере nginx с конфигурацией двух сайтов и test.domain.com, test2.domain.com разрешаются на один и тот же IP-адрес хоста.

Есть

  • «Серверные блоки» одного ngninx прослушивают IP: 443 и IP: 80 (server_name test.domain.com)

  • IP-адрес прослушивания «Server Blocks» другого ngninx: 80 (имя_сервера test2.domain.com).

https://test2.domain.com … приносит мне корень test а не test2

Когда вы открываете https//тест2.domain.com он разрешен для вашего клиента как IP:443 так как ты хочешь HTTPS. Nginx показывает вам тест содержание, потому что только на порту 443 test.domain.com с root /var/www/html/test/public настроен.

Меня перенаправляют в корень test2, если я открываю http://test.domain.com

Когда вы открываете http//тест.domain.com он разрешен для вашего клиента как IP:80 так как ты хочешь HTTP. У нгинкса 2 server_nameс для 80 порта: test.domain.com а также test2.domain.com и должен выбрать test.domain.com и вернуть содержимое из /var/www/html/test/public но вы заявляете, что он возвращается test2.domain.comсодержание.
Это возможно, если test.domain.com указывает на IP сервера с root /var/www/html/test2/public — см. первое предположение.

Также
https://nginx.org/en/docs/http/request_processing.html

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *