Quali sono i diversi utilizzi per i siti disponibili rispetto alla directory conf.d per nginx


99

Ho una certa esperienza con Linux, ma nessuno con nginx. Mi è stato assegnato il compito di ricercare opzioni di bilanciamento del carico per un server delle applicazioni.

Ho usato apt-get per installare nginx e tutto sembra a posto.

Ho un paio di domande.

Qual è la differenza tra la cartella dei siti disponibili e la cartella conf.d. Entrambe queste cartelle erano INCLUSE nell'impostazione di configurazione predefinita per nginx. I tutorial usano entrambi. A cosa servono e qual è la migliore pratica?

A cosa serve la cartella abilitata per i siti? Come lo uso?

La configurazione predefinita fa riferimento a un utente di dati www? Devo creare quell'utente? Come posso dare a quell'utente le autorizzazioni ottimali per l'esecuzione di nginx?


Cerca di evitare il creep di portata quando fai una domanda; www-dataè un argomento separato. La maggior parte dei sistemi operativi definisce un utente separato con autorizzazioni inferiori che il processo può eseguire dopo l'associazione alla porta 80 come root. È definito nel file di configurazione. Applicare pratiche di sicurezza di base da lì; non lasciare che l'utente scriva su qualcosa su cui il server web non dovrebbe aver bisogno di scrivere, non lasciare che altri utenti scrivano sui file a meno che non sia intenzionale.
Andrew B,

Risposte:


94

Le cartelle siti- * sono gestite da nginx_ensitee nginx_dissite. Per gli utenti httpd di Apache che lo trovano con una ricerca, l'equivalente è a2ensite/ a2dissite.

La sites-availablecartella serve per archiviare tutte le configurazioni del tuo vhost, indipendentemente dal fatto che siano attualmente abilitate.

La sites-enabledcartella contiene collegamenti simbolici ai file nella cartella disponibile nei siti. Ciò consente di disabilitare selettivamente i vhosts rimuovendo il collegamento simbolico.

conf.dfa il lavoro, ma devi spostare qualcosa fuori dalla cartella, eliminarlo o apportare modifiche quando è necessario disabilitare qualcosa. L'astrazione siti- * della cartella rende le cose un po 'più organizzate e consente di gestirle con script di supporto separati.

(a meno che tu non sia come me e uno dei tanti amministratori debian che hanno gestito direttamente i collegamenti simbolici, non conoscendo gli script ...)


12
Ho sbagliato qualcosa? Non capire il downvote.
Andrew B,

1
sono curioso che sia integrato in nginx? ho installato manualmente github.com/perusio/nginx_ensite
lfender6445

18
È importante notare che sites-available|sites-enabledè un Debian-ism e non è qualcosa che fanno nginx o Apache. Probabilmente era piuttosto utile in passato, ma la sua utilità è piuttosto limitata in un'epoca di gestione della configurazione e contenitori.
Michael Hampton

Puoi commentare come la gestione della configurazione e i contenitori limitano l'utilità dei siti disponibili | siti abilitati?
karthik vee

1
@karthikvee il punto è che oggigiorno i server appaiono spesso come contenitori effimeri che servono solo un singolo sito Web / servizio, quindi questo può essere incluso nginx.confsenza alcuna perdita di leggibilità. Ciò è contrario all'approccio di alcuni anni fa, quando i server normalmente archiviano decine di siti Web.
adamczi,

38

Vorrei aggiungere alle risposte precedenti che il più importante non è il modo in cui chiamate le directory (anche se questa è una convenzione molto utile), ma ciò che effettivamente inserite nginx.conf. Esempio di configurazione:

http {
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*.conf;
    include /etc/nginx/sites-enabled/my_own_conf;
...
}

L'unica direttiva usata qui è include , quindi non vi è alcuna differenza interna tra eg conf.d/e sites-enabled/.

Dalla documentazione sopra:

Syntax:     include file | mask;
Default:    —
Context:    any

Includes another file, or files matching the specified mask, 
into configuration. Included files should consist of 
syntactically correct directives and blocks.

Quindi, per rispondere alla domanda originale: non esiste alcuna differenza interna e puoi usarli nel miglior modo possibile, ricordando i consigli delle altre risposte. E per favore, non dimenticare di scegliere la risposta "giusta".


1
Giusto, sites-enabledè stato in qualche modo inventato da una certa dittribuzione, confondendosi come fa un fastidioso intermedio. Prendi nginx dalla fonte ufficiale : otterrai un prodotto aggiornato, oltre a sbarazzarti di questa configurazione schifo / inferno.
Bernard Rosset,

2
Questo spiega perché non c'è un solo riferimento di questa convenzione di nome sulla documentazione ufficiale di Nginx. È un progetto di terze parti! github.com/perusio/nginx_ensite
AxeEffect

30

In genere, la sites-enabledcartella viene utilizzata per le definizioni dell'host virtuale, mentre conf.dviene utilizzata per la configurazione del server globale. Se stai supportando più siti Web, ad esempio host virtuali, ognuno ottiene il proprio file, in modo da poterli abilitare e disabilitare facilmente spostando i file dentro e fuori sites-enabled(o creando e rimuovendo i collegamenti simbolici, che è probabilmente un'idea migliore).

Utilizzare conf.dper cose come il caricamento del modulo, i file di registro e altre cose che non sono specifiche di un singolo host virtuale.

La configurazione predefinita fa riferimento a un utente di dati www? Devo creare quell'utente?

Dovresti avere nginx in esecuzione come utente non root. Questo è in alcuni casi chiamato www-data, ma puoi nominarlo come vuoi.

Come posso dare a quell'utente le autorizzazioni ottimali per l'esecuzione di nginx?

Sono meno sicuro della risposta a questa domanda (non sto eseguendo nginx al momento), ma se è qualcosa come Apache la risposta è che l' www-datautente ha bisogno solo delle autorizzazioni di lettura per qualsiasi file statico (e leggi + esegui su directory ) che stai offrendo o leggi / esegui autorizzazioni su cose come gli script CGI e nessuna autorizzazione altrove.


1
anche avere un utente dedicato per l'esecuzione del server Web è importante perché disabilita la funzionalità di accesso per questo utente rimuovendo un record shell valido.
DukeLion

> 'Dovresti avere nginx in esecuzione come utente non root' - potresti approfondire questo?
lfender6445

1
L'esecuzione come utente non privilegiato è un modo per contenere il danno che potrebbe derivare da un compromesso remoto. Se si esegue un server Web in quanto rootesiste un compromesso remoto di qualche tipo, l'attaccante ha immediatamente accesso completo al sistema. Quando si esegue come utente non privilegiato, l'accesso amministrativo sarebbe disponibile solo in combinazione con una sorta di exploit locale.
Larks

14

Cosa sta succedendo?

Devi usare Debian o Ubuntu, poiché il male sites-available / la sites-enabledlogica non è usato dal pacchetto upstream di nginx da http://nginx.org/packages/ .

In entrambi i casi, entrambi sono implementati come convenzione di configurazione con l'aiuto della includedirettiva standard in /etc/nginx/nginx.conf.

Ecco uno snippet di /etc/nginx/nginx.confda un pacchetto ufficiale upstream di nginx da nginx.org:

http {
    …
    include /etc/nginx/conf.d/*.conf;
}

Ecco un frammento di /etc/nginx/nginx.confDebian / Ubuntu :

http {
    …
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

Quindi, dal punto di vista di NGINX, l'unica differenza sarebbe che i file conf.ddevono essere elaborati prima e, come tale, se si hanno configurazioni che sono silenziosamente in conflitto tra loro, allora quelle di conf.dpossono avere la precedenza su quelle in sites-enabled.


La migliore pratica è conf.d.

Dovresti usare /etc/nginx/conf.d, in quanto è una convenzione standard, e dovrebbe funzionare ovunque.

Se è necessario disabilitare un sito, è sufficiente rinominare il nome file per non avere più un .confsuffisso, molto semplice, diretto ed a prova di errore:

sudo mv -i /etc/nginx/conf.d/default.conf{,.off}

O il contrario per abilitare un sito:

sudo mv -i /etc/nginx/conf.d/example.com.conf{.disabled,}


Evitare sites-availablee sites-enableda tutti i costi.

Non vedo assolutamente alcun motivo per usare sites-available/ sites-enabled:

  • Alcune persone hanno menzionato nginx_ensitee nginx_dissitescript - i nomi di questi script sono persino peggiori del resto di questa debacle - ma questi script non si trovano da nessuna parte - sono assenti dal nginxpacchetto anche in Debian (e probabilmente anche in Ubuntu) e non presenti in un pacchetto tutto loro, inoltre, hai davvero bisogno di un intero script di terze parti non standard per spostare e / o collegare semplicemente i file tra le due directory ?!

  • E se non stai usando gli script (che è, in effetti, una scelta intelligente come sopra), allora arriva il problema di come gestisci i siti:

    • Crei collegamenti simbolici da sites-availablea sites-enabled?
    • Copia i file?
    • Sposta i file?
    • Modificare i file in atto in sites-enabled?

Quanto sopra può sembrare un problema minore da affrontare, fino a quando diverse persone iniziano a gestire il sistema o fino a quando non si prende una decisione rapida, solo per dimenticarsene mesi o anni lungo la linea ...

Il che ci porta a:

  • È sicuro rimuovere un file da sites-enabled? È un soft link? Un collegamento reale? O l'unica copia della configurazione? Un ottimo esempio di inferno di configurazione.

  • Quali siti sono stati disabilitati? (Con conf.d, basta fare una ricerca di inversione per i file che non terminano con .conf- find /etc/nginx/conf.d -not -name "*.conf"o utilizzare grep -v.)

Non solo tutto quanto sopra, ma nota anche la includedirettiva specifica usata da Debian / Ubuntu - /etc/nginx/sites-enabled/*- nessun suffisso di nome file è specificato per sites-enabled, a differenza di conf.d.

  • Ciò significa che se un giorno decidi di modificare rapidamente un file o due all'interno /etc/nginx/sites-enablede emacscrei un file di backup come default~, quindi, all'improvviso, hai entrambi defaulte default~incluso come configurazione attiva, che, a seconda delle direttive utilizzate, potrebbe anche non dare eventuali avvisi e causare una sessione di debug prolungata. (Sì, è successo a me; è stato durante un hackathon, ed ero totalmente perplesso sul perché la mia conf non funzionava.)

Quindi, sono convinto che sites-enabledsia puro male!


Oltre a tutto quanto sopra, a quanto pare, è anche molto comune creare collegamenti simbolici errati! stackoverflow.com/a/14107803/1122270 Nel caso in cui non pensassi sites-enabledfosse abbastanza malvagio!
CNST

O, a volte, può succedere che qualcuno decida di modificare i file sites-enabled, ma poi un'altra persona decide di disabilitarlo eliminandolo, forse pensando che fosse solo un link simbolico, che richiede il successivo dump della memoria dell'heap nginx per recuperare il file conf: stackoverflow.com/q/45852224/1122270
CNST

Non sono d'accordo con le affermazioni su sites-availablee sites-enabled; è importante essere in grado di preparare i file di configurazione al di fuori della directory di prelievo 'live' in modo tale che se nginx fosse ricaricato o riavviato in modo da non raccogliere file di configurazione parziali. Può anche essere utile mantenere i file di configurazione che non sono più in uso attivo. La creazione di collegamenti simbolici non è un'attività particolarmente difficile se hai abbastanza esperienza per gestire nginx, in primo luogo, IMO.
BE77Y,

@ BE77Y stai prendendo un approccio più complicato. In programmazione, si ritiene che sia meglio rimuovere completamente il codice inutilizzato, non solo disabilitarlo o commentarlo; Non vedo alcun motivo per cui DevOps dovrebbe essere diverso: se una configurazione non è più necessaria, rimuoverla (dovrebbe esistere nel VCS). Lo stesso con i file conf parziali: perché modificarli abilitati e ricaricare nginx alle tue spalle? ( USR1che riapre i registri, non ricarica conf.) Trovo che i tuoi commenti "esperienza" del link simbolico siano indirizzati erroneamente - il problema è una questione di coerenza, che ha poco a che fare con l'esperienza.
CNST

2
È chiaro che a) questo non è il mezzo appropriato per questa discussione e forse, cosa ancora più importante, b) è probabilmente inutile in ogni caso. Accettiamo di non essere d'accordo.
BE77Y,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.