Назад | Перейти на главную страницу

дублируется после настройки нескольких доменов и поддоменов + с помощью 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;

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

  • 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 серверный блок, который одновременно прослушивает и ipv4, и ipv6.