Я заметил странное поведение на одном из своих серверов, и я не могу понять, как он работает, и самое главное, если такая конфигурация делает перенаправление, поскольку я не уверен, как я попаду в 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 ответ
В этом нет ничего странного — вы получаете то, что настроили. В этом нет ничего странного или волшебного. Это просто то, что сокеты 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