Я пытаюсь настроить свой сайт с помощью NGINX. Я немного не в себе и перепробовал все подходящие решения, которые смог найти, поэтому ваше терпение будет оценено по достоинству :)
Я хочу, чтобы весь http-трафик перенаправлялся на https, а соединения с www-поддоменом моего сайта и с IP-адресом моего сервера (123.123.123.123 для наших целей) перенаправлялись на mywebsite.com. Конфигурация моего сервера приведена ниже, и она соответствует всем этим критериям, за исключением www-редиректа, который выдает мне страницу NGINX 404. Я не понимаю, что обработка IP-адреса и www-поддомена, как мне кажется, идентична — проблема в чем-то другом, например, в сертификатах DNS или SSL? Спасибо.
/etc/nginx/sites-available/мойвебсайт
server {
listen 80 ;
server_name www.mywebsite.com mywebsite.com 123.123.123.123 ;
return 301 https://mywebsite.com$request_uri ;
}
server {
server_name www.mywebsite.com ;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mywebsite.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
return 301 https://mywebsite.com$request_uri ;
}
server {
server_name 123.123.123.123;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mywebsite.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
return 301 https://mywebsite.com$request_uri ;
}
server {
server_name mywebsite.com ;
root /var/www/mywebsite ;
index index.html index.htm index.nginx-debian.html ;
location / {
try_files $uri $uri/ =404 ;
}
if ($host != mywebsite.com) {
return 301 https://mywebsite.com$request_uri;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mywebsite.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
}
root@localhost:~# certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: mail.mywebsite.com
Serial Number: ###################################
Key Type: ECDSA
Domains: mail.mywebsite.com
Expiry Date: 2023-12-09 16:27:55+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/mail.mywebsite.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/mail.mywebsite.com/privkey.pem
Certificate Name: mywebsite.com
Serial Number: ###################################
Key Type: ECDSA
Domains: mywebsite.com mail.mywebsite.com www.mywebsite.com
Expiry Date: 2023-12-09 03:09:48+00:00 (VALID: 88 days)
Certificate Path: /etc/letsencrypt/live/mywebsite.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/mywebsite.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Что касается DNS, у меня есть записи A и AAAA для mywebsite.com и *.mywebsite.com, указывающие на адреса ipv4 и ipv6 моего сервера соответственно, а также запись MX и несколько записей TXT для моего почтового поддомена.
A mywebsite.com 123.123.123.123 600
A *.mywebsite.com 123.123.123.123 600
AAAA mywebsite.com 1234:1234::1234:1234:1234:1234 600
AAAA *.mywebsite.com 1234:1234::1234:1234:1234:1234 600
MX mywebsite.com mail.mywebsite.com 600 10
TXT _dmarc.mywebsite.com v=DMARC1; p=reject; rua=mailto:[email protected]; fo=1 600
TXT mywebsite.com v=spf1 mx a:mail.mywebsite.com -all 600
TXT mail._domainkey.mywebsite.com v=DKIM1; h=sha256; k=rsa; p=##################################### 600
решение1
(в основном это комментарии, но место ограничено)
Я хочу, чтобы весь http-трафик перенаправлялся на https,
Хорошо, кажется разумным.
и соединения с www-поддоменом моего веб-сайта и с IP-адресом моего сервера (123.123.123.123 для наших целей) должны перенаправляться на mywebsite.com
Почему? Я не вижу в этом никакой выгоды, и это фактически закрывает дверь для любой высокой доступности сервиса.
Да, беглый осмотр конфигурации предполагает, что он должен делать то, что вы думаете. Однако почему вы используете разные серверные блоки для описанияwww.mywebsite.comи 123.123.123.123, когда они реализуют одно и то же поведение? (На самом деле вы могли бы реализовать поведение для 3 SSL vhosts в одном блоке сервера). Аналогично вам не нужен отдельный сертификат для mail.mywebsite.com.
Проблема с сертификатом вряд ли приведет к ошибке 404.
DNS кажется очевидным для проверки / наоборот, вы можете явно переопределить любой существующий DNS и увидеть фактические заголовки HTTP, используя (например):
curl -I -k --resolve \*:443:123.123.123 https://www.example.com