Puncte:0

Nginx acordând prioritate subdomeniilor bazate în ordinea alfabetică a fișierelor de configurare

drapel in

TLDR: Nginx acordă prioritate subdomeniilor în ordinea alfabetică a fișierelor de configurare și vreau să știu o modalitate de a preveni acest lucru. Aceasta este asemănătoare la acest întrebare, dar sunt mai interesat să îmi îmbunătățesc sistemul.

Am (aveam) două secțiuni pe serverul meu: una pentru un site web static și una pentru instanța mea dokuwiki. Am vrut să se încarce dokuwiki când cineva a accesat example.com, iar site-ul web static să se încarce când cineva a accesat static.example.com. În cele din urmă, am vrut ca wiki.example.com să indice întotdeauna spre dokuwiki, în cazul în care s-a schimbat implicit.

Pentru a realiza acest lucru, am avut două fișiere în /etc/nginx/sites-available.

dokuwiki (Aceasta este doar o configurație comună dokuwiki cu certbot rulat pe ea)

Server {
    dacă ($gazdă = www.example.com) {
        returnează 301 https://$host$request_uri;
    } # gestionat de Certbot


    dacă ($gazdă = exemplu.com) {
        returnează 301 https://$host$request_uri;
    } # gestionat de Certbot


    dacă ($gazdă = wiki.example.com) {
        returnează 301 https://$host$request_uri;
    } # gestionat de Certbot

    asculta 80;
    asculta [::]:80;
    nume_server wiki.example.com example.com www.example.com;
    returnează 301 https://$server_name$request_uri;
}
 
Server {
    asculta [::]:443 ssl;
    asculta 443 ssl;
 
    server_name example.com www.example.com wiki.example.com;
 
    # Dimensiunea maximă de încărcare a fișierului este de 4 MB - modificați în consecință dacă este necesar
    client_max_body_size 4M;
    client_body_buffer_size 128k;
 
    rădăcină /dokuwiki/dokuwiki-2020-07-29;
    index doku.php;
 
    #Nu uitați să comentați cele de mai jos când instalați și să anulați comentariile când ați terminat.
    locație ~ /(conf/|bin/|inc/|install.php) { deny all; }
 
    #Suport pentru X-Accel-Redirect
    locație ~ ^/data/ { intern ; }
 
    locație ~ ^/lib.*\.(js|css|gif|png|ico|jpg|jpeg)$ {
        expiră 365d;
    }
 
    locație / { try_files $uri $uri/ @dokuwiki; }
 
    locație @dokuwiki {
        # rescrie „doku.php/” din adresele URL dacă setați setarea userwrite la .htaccess în pagina de configurare dokuwiki
        rescrie ^/_media/(.*) /lib/exe/fetch.php?media=$1 ultimul;
        rescrie ^/_detail/(.*) /lib/exe/detail.php?media=$1 ultimul;
        rescrie ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 ultima;
        rescrie ^/(.*) /doku.php?id=$1&$args ultimul;
    }
 
    locație ~ \.php$ {
        try_files $uri $uri/ /doku.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param REDIRECT_STATUS 200;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        # fastcgi_pass unix:/var/run/php5-fpm.sock; #vechea versiune php
    }
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # gestionat de Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # gestionat de Certbot
}

static

Server {
    rădăcină /var/www/example;
    index index.html index.htm index.nginx-debian.html;
    nume_server static.example.com;
    Locație / {
        try_files $uri $uri/ =404;
    }

    asculta [::]:443 ssl ipv6only=on; # gestionat de Certbot
    asculta 443 ssl; # gestionat de Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # gestionat de Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # gestionat de Certbot
    includ /etc/letsencrypt/options-ssl-nginx.conf; # gestionat de Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # gestionat de Certbot
}

Acest sistem a funcționat exact așa cum mă așteptam. Cu toate acestea, apoi am adăugat commafeed pe serverul meu. Scopul meu a fost să accesez commafeed prin rss.example.com. Commafeed rulează pe portul 8082, așa că am făcut un proxy_pass la example.com/8082 în acest fișier

commafeed

Server {
    asculta 443;
    asculta [::]:443;
    
    rădăcină /var/www/commafeed;
    index index.html index.htm index.nginx-debian.html;
    nume_server rss.example.com www.rss.example.com;
    Locație / {
        proxy_pass http://example.com:8082/;
        proxy_buffering dezactivat;
        proxy_set_header Gazdă $gazdă;
        proxy_set_header X-Real-IP $adresă_la distanță;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $schema;
    }
}

Când am făcut asta, am primit o resetare a conexiunii în browserul meu pentru toate domeniile example.com și acest mesaj de eroare a fost înregistrat

exemplu:/etc/nginx/sites-available# tail -f /var/log/nginx/error.log -n 0
2021/09/28 03:10:36 [eroare] 32479#32479: *2317 nu este definit niciun „certificat_ssl” în serverul care ascultă pe portul SSL în timpul acordării de mână SSL, client: <adresa mea ipv6>, server: [::]: 443
2021/09/28 03:10:36 [eroare] 32479#32479: *2318 nu este definit niciun „certificat_ssl” în serverul care ascultă pe portul SSL în timpul acordării de mână SSL, client: <adresa mea ipv6>, server: [::]: 443

Cu toate acestea, când am redenumit fișierul în „zcommafeed”, totul a funcționat conform intenției. Adică, toate subdomeniile vechi au funcționat ca înainte, precum și rss.example.com care indică către commafeed.

Acum, în timp ce acest lucru funcționează, acest lucru pare să implice că există o modalitate mai bună de a face acest lucru, care nu implică acordarea de atenție la ordinea alfabetică a fișierelor. Sunt nou la NGINX, așa că aș aprecia cu adevărat ajutorul!!

Puncte:2
drapel us

Mesajul de eroare spune clar că configurației lipsește un certificat TLS pentru rss.example.com. Creați un certificat/pereche de chei adecvată pentru rss.example.com și www.rss.example.com, atunci configurația va funcționa corect.

Michael Hampton avatar
drapel cz
Și directivele `ascultă` nu includ `ssl`.
Puncte:0
drapel za

Nginx sortează fișierele care includ într-adevăr gazdele virtuale. Pentru că este mai confortabil de utilizat și de a înțelege logica selectării celui implicit - și acesta ar fi primul fișier include vhost atunci când este sortat alfabetic.

De fapt, îl cauți pe Mod implicit opțiunea pentru asculta directivă, care este folosită pentru a termina toate celelalte site-uri nu se potrivesc cu numele serverului menționate în dvs Server {} blocuri.

Adaugă Mod implicit opțiunea către asculta directivă a gazdei virtuale care ar trebui să termine toate solicitările dacă nu există niciuna numele serverului potrivite.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.