Дублирует после настройки нескольких доменов и поддоменов + с помощью certbot - поиск лучших практик

После настройки нескольких доменов и некоторых поддоменов для работы в nginx мне удалось заставить работать несколько блоков серверов. Все еще осталось с грязными результатами, как показано ниже.

Это после настройки нескольких доменов, используя certbot для создания сертификатов и редактирования файлов конфигурации nginx.

Глядя на файлы конфигурации nginx, очевидно, что было бы намного чище, если бы исходный файл конфигурации по умолчанию был удален из закомментированных строк. Все еще вижу несколько странных дубликатов серверных блоков для доменов в файле конфигурации по умолчанию.

Я использую статические файлы, обслуживаемые в nginx для domain.tld & www.domain.tld, с nodejs, обслуживающим blah.domain.tld, но в будущем это сочетание может измениться.

Итак, несколько быстрых вопросов о хорошей / плохой практике. - один сертификат для покрытия domain.tld, www.domain.tld и blah.domain.tld? - следует ли /etc/nginx/sites-available/default исключить все ссылки на блоки серверов для различных доменов, настроенных в /etc/nginx/sites-available/domain.tld? - кажется, что certbot редактирует /etc/nginx/sites-available/default для добавления ссылок на различные конфигурации домена. Я не хочу редактировать любые файлы конфигурации, отредактированные certbot, но хаотичный беспорядок дубликатов указывает, что очистка может быть сделана.

также: какими могут быть подозрительные символы?

sudo nginx -t
nginx: [warn] server name "blah.domain.tld/" has suspicious symbols in     /etc/nginx/sites-enabled/blah.domain.tld:41
nginx: [warn] conflicting server name "www.domain.tld" on [::]:443, ignored
nginx: [warn] conflicting server name "blah.domain.tld" on [::]:443, ignored
nginx: [warn] conflicting server name "www.domain.tld" on 0.0.0.0:443,     ignored
nginx: [warn] conflicting server name "blah.domain.tld" on 0.0.0.0:443, ignored
nginx: [warn] conflicting server name "www.domain.tld" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "blah.domain.tld" on 0.0.0.0:80, ignored
nginx: [warn] conflicting server name "www.domain.tld" on [::]:80, ignored
nginx: [warn] conflicting server name "blah.domain.tld" on [::]:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Следующий блок

ubuntu@blah:/etc/nginx/sites-available$ grep -rn ' domain.tld'     /etc/nginx/sites-available/
/etc/nginx/sites-available/domain.tld:39:  server_name domain.tld;
/etc/nginx/sites-available/domain.tld:96:    if ($host = domain.tld) {
/etc/nginx/sites-available/domain.tld:104: server_name domain.tld;

Следующий блок

ubuntu@blah:/etc/nginx/sites-available$ grep -rn ' www.domain.tld'     /etc/nginx/sites-available/
/etc/nginx/sites-available/blah.domain.tld:110:    server_name www.domain.tld; # managed by Certbot
/etc/nginx/sites-available/blah.domain.tld:148:    if ($host = www.domain.tld) {
/etc/nginx/sites-available/blah.domain.tld:155:    server_name www.domain.tld;
/etc/nginx/sites-available/default:110:    server_name www.domain.tld; # managed by Certbot
/etc/nginx/sites-available/default:148:    if ($host = www.domain.tld) {
/etc/nginx/sites-available/default:155:    server_name www.domain.tld;

Следующий блок

ubuntu@blah:/etc/nginx/sites-available$ grep -rn ' blah.domain.tld'         /etc/nginx/sites-available/
/etc/nginx/sites-available/blah.domain.tld:41: server_name blah.domain.tld/;
/etc/nginx/sites-available/blah.domain.tld:182:    server_name blah.domain.tld; # managed by Certbot
/etc/nginx/sites-available/blah.domain.tld:219:    if ($host = blah.domain.tld) {
/etc/nginx/sites-available/blah.domain.tld:226:    server_name blah.domain.tld;
/etc/nginx/sites-available/default:182:    server_name blah.domain.tld; # managed by Certbot
/etc/nginx/sites-available/default:219:   
  if ($host = blah.domain.tld) {
  /etc/nginx/sites-available/default:226:    server_name blah.domain.tld;

2 ответа

Извиняюсь за грязный вопрос и спасибо за первоначальные ответы, после сна исправление стало очевидным.

  • Certbot вставил серверные блоки в /etc/nginx/sites-available/default, что привело к дублированию серверных блоков для *.domain.tld
  • удаление /etc/nginx/sites-available/*.domain.tld из / etc / nginx / sites-available / исключило большое количество сообщений "nginx: [warn] конфликтующее имя сервера".
  • мелкие исправления в /etc/nginx/sites-available/default, чтобы гарантировать все варианты http | https | www.domain.tld | domain.tld | subdomain.domain.tld обрабатываются как задумано.

копия работающей /etc/nginx/sites-available/default ниже. очевидно, это следует разделить на default, domain.tld & subdomain.domain.tld для лучшей практики и очистки символических ссылок.

            # Default server configuration
            #
            server {
                listen 80 default_server;
                listen [::]:80 default_server;

                root /var/www/html;

                index index.html;

                server_name _;

                location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    try_files $uri $uri/ =404;
                }

            }


            server {

                root /var/www/domain.tld/html;

                index index.html;
                server_name www.domain.tld domain.tld; # managed by Certbot

                location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    try_files $uri $uri/ =404;
                }


                listen [::]:443 ssl; # managed by Certbot
                listen 443 ssl; # managed by Certbot
                ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; # managed by Certbot
                ssl_certificate_key /etc/letsencrypt/live/domain.tld/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


            }

            #redirect from http to https for www.domain.tld
            server {
                if ($host = www.domain.tld) {
                    return 301 https://$host$request_uri;
                } # managed by Certbot


                listen 80 ;
                listen [::]:80 ;
                server_name www.domain.tld;
                return 404; # managed by Certbot

            }

            #redirect from http to https for domain.tld
            server {
                if ($host = domain.tld) {
                    return 301 https://$host$request_uri;
                } # managed by Certbot


                    listen 80 ;
                    listen [::]:80 ;
                server_name domain.tld;
                return 404; # managed by Certbot

            }


            server {


                root /var/www/subdomain.domain.tld/html;

                index index.html;
                server_name subdomain.domain.tld; # managed by Certbot


                location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    #try_files $uri $uri/ =404;
                    proxy_pass http://localhost:4000;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection 'upgrade';
                    proxy_set_header Host $host;
                    proxy_cache_bypass $http_upgrade;
                }


                listen [::]:443 ssl; # managed by Certbot
                listen 443 ssl; # managed by Certbot
                ssl_certificate /etc/letsencrypt/live/domain.tld/fullchain.pem; # managed by Certbot
                ssl_certificate_key /etc/letsencrypt/live/domain.tld/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 = subdomain.domain.tld) {
                    return 301 https://$host$request_uri;
                } # managed by Certbot


                listen 80 ;
                listen [::]:80 ;
                server_name subdomain.domain.tld;
                return 404; # managed by Certbot


            }

Основная проблема заключается в том, что certbot дублирует серверные блоки по умолчанию при добавлении сертификатов для поддоменов. Были созданы оригинальные сертификаты для домена.

Исправлено было удалить отдельные файлы конфигурации сервера, очистить все блоки сервера по умолчанию, пока они не будут работать.

Проблемы с "конфликтующим именем сервера", вероятно, возникают из-за того, что вы настроили 2 разных серверных блока для прослушивания одного и того же URI. Один для ipv6 и один для ipv4

Я думаю, что вы должны сделать 1 serverblock, который одновременно прослушивает ipv4 и ipv6.

Другие вопросы по тегам