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!!