Я хочу обслуживать веб-сайт через https://the.example.com
(таким образом, с нестандартным поддоменом), но тот же веб-сайт также должен быть введен с https://example.com
и https://www.example.com
(+ http
аналоги).
Итак, если вы наберете https://www.example.com/page
вы должны быть перенаправлены на https://the.example.com/page
, и если вы наберете http://example.com/page
вы должны быть перенаправлены на ту же страницу.
Я сделал это сейчас с nginx для http
как это:
server {
listen 80;
server_name example.com www.example.com the.example.com;
return 301 https://the.example.com$request_uri;
}
и этот блок для нестандартных https
URL:
server {
listen 443 ssl http2;
server_name www.example.com example.com;
location /.well-known/ {
allow all;
}
location / {
return 301 https://the.example.com$request_uri;
}
}
и этот блок для актуального (канонического) сайта:
server {
listen 443 ssl http2;
server_name the.example.com;
location ...
}
Я опустил большинство строк для краткости. Мне нужен только один редирект, прежде чем вы попадете на настоящий сайт.
В http
-сайт и канонический https
-сайт работает, но у меня проблемы с сертификатом https://www.example.com
и https://example.com
.
Я запросил три сертификата, вот так:
certbot certonly --webroot -w "/some/root" -d www.example.com -m user@examp.e.com --agree-tos
certbot certonly --webroot -w "/some/root" -d example.com -m user@examp.e.com --agree-tos
certbot certonly --webroot -w "/some/root" -d the.example.com -m user@examp.e.com --agree-tos
Как это должно работать? Если у подсайтов есть свои webroot
, или должен быть общий доступ к корневому каталогу и / или сертификату? Я немного запутался в том, что происходит ...
вам нужно иметь отдельные конфигурации для доменов: www.example.com
и example.com
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
location /.well-known/ {
allow all;
}
location / {
return 301 https://the.example.com$request_uri;
}
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate example.com.crt;
ssl_certificate_key example.com.key;
location /.well-known/ {
allow all;
}
location / {
return 301 https://the.example.com$request_uri;
}
}
с вашей конфигурацией
Я запросил три сертификата, вот так:
certbot certonly --webroot -w "/some/root" -d www.example.com -m user@examp.e.com --agree-tos
certbot certonly --webroot -w "/some/root" -d example.com -m user@examp.e.com --agree-tos
certbot certonly --webroot -w "/some/root" -d the.example.com -m user@examp.e.com --agree-tos
каждая конфигурация домена должна указывать на свой собственный файл сертификата и ключ
если сертификат не является подстановочным знаком *example.com
Вы можете использовать одну и ту же конфигурацию сервера для нескольких поддоменов, а также для основного домена. Однако вы ДОЛЖНЫ иметь .well-known/acme-challenge
на порт 80 без SSL:
# The canonical site: we want this in our addressbar
server {
listen 443 ssl http2;
server_name husker.example.com;
ssl_certificate /etc/letsencrypt/live/husker.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/husker.example.com/privkey.pem;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 443 ssl http2;
server_name www.example.com secure.example.com example.com;
# same certificates, different server because of redirect
ssl_certificate /etc/letsencrypt/live/husker.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/husker.example.com/privkey.pem;
# This redirects everything else to the canonical address
location / {
return 301 https://husker.example.com$request_uri;
}
}
server {
listen 80;
server_name husker.example.com;
server_name www.example.com secure.example.com example.com;
# Allow anyone to view the acme-challenge; certbot needs this
location /.well-known/acme-challenge {
allow all;
root /var/www/certbot/;
}
# This redirects everything else to the canonical address
location / {
return 301 https://husker.example.com$request_uri;
}
}
Когда вы запрашиваете сертификат, вы должны поместить все свои домены в одну строку:
certbot certonly --webroot -w "/some/root" -d example.com -d www.example.com -d secure.example.com -m user@examp.e.com --agree-tos
Это создаст один сертификат с первым доменом, указанным в качестве субъекта, в этом случае example.com
, а затем добавьте остальные домены как SubjectAlternativeName
.