Nginx tip & tricks: differenze tra le versioni

Da Webmobili Wiki.
Nessun oggetto della modifica
 
(79 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
Varnish Cache server non supporta SSL perché lo sviluppatore non ha voglia di includerlo (fonte [https://varnish-cache.org/docs/4.1/phk/ssl.html non ha voglia]).<br/>
== Forward dell'IP reale del client ==
Per la natura dell'infrastruttura server, l'IP reale del client viene perso dopo la chiamata a Nginx.<br/>
Il giro è<br/>
<code>Client -> Nginx -> IIS</code><br/>
di conseguenza ad IIS arriva come client IP quello di Nginx e la geolocalizzazione va a puttane<br/>
Per sistemare il problema il dato dev'essere passato tramite le varie request all'interno di un header specializzato: '''X-FORWARDED-FOR'''.<br/>


Per ovviare al problema è necessario installare '''nginx''' , un web-server/reverse-proxy in grado di catturare la chiamata https e redirigerla a Varnish.<br/><br/>
Essendo il primo punto di passaggio è l'unico che possiede il reale client-IP. Nella configurazione vista del paragrafo precedente si vede l'assegnazione del client-IP nel req header ''X-FORWARDED-FOR''.
<syntaxhighlight lang="bash">
#...
location / {
  proxy_pass http://127.0.0.1:80;
  # Set di un header X-Real-IP che serve a varnish
  proxy_set_header X-Real-IP  $remote_addr;
  # Set dell'header X-Forwarded-For per conservare il real IP tramite le varie request che portano ad IIS
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto https;
  proxy_set_header X-Forwarded-Port 443;
  proxy_set_header Host $host;
}
#...
</syntaxhighlight>
 
== Brotli compression ==
La compressione '''brotli''' che sostituisce ''gzip'' quando possibile è stata approfondita qua<br/>
[[Nginx modulo Brotli (text compression)]]
 
== Leggere i LOG del web-server ==
Purtroppo i log non potranno più essere letti comodamente dall'IIS di Windows perché davanti a lui c'è '''nginx'''.<br/>
Il consiglio è quello di creare uno share in Samba come questo
<syntaxhighlight lang="bash">
[NginxLogs]
  comment = Cartella di condivisione dei log di nginx
  read only = yes
  locking = no
  path = /var/log/nginx
  guest ok = no
</syntaxhighlight>
e di rendere il proprio utente facente parte del gruppo ''adm'' affinché abbia i permessi di lettura.
<syntaxhighlight lang="bash">
  sudo adduser nomeutente adm
</syntaxhighlight>
 
== LOG configurazione avanzata ==
Avendo diversi siti su Nginx bisogna dividere i log nelle cartelle<br/>
es.
<syntaxhighlight>
/media/discodati/logs/nomesito1.com
/media/discodati/logs/nomesito2.it
/media/discodati/logs/immagini.sito2.com
</syntaxhighlight>
assicurandosi di mettere i permessi adatti<br/>
es.
<syntaxhighlight lang="bash">
sudo chown www-data:adm /media/discodati/logs -R
sudo chmod 775 /media/discodati/logs -R
</syntaxhighlight><br/>
 
E di conseguenza configurare i singoli virtual host con la cartella giusta
<syntaxhighlight lang="bash">
server {
 
        # ...
server_name nomesito.com;
 
        error_log /media/discodati/nomesito.com/error.log;
        access_log /media/discodati/nomesito.com/access.log;
 
        # ...
}
</syntaxhighlight><br/>


== Procedura per installazione ==
A questo punto tutti i log verranno riversati nei 2 file <code>error.log</code> e <code>access.log</code>.<br/>
Sulla macchina che ha già VARNISH, installare nginx
Per fare in modo che vengano '''divisi''' e '''compressi''' (una volta che diventano vecchi) automaticamente è necessario configurare '''LOGROTATE'''.
<syntaxhighlight lang="bash">
sudo nano /etc/logrotate.d/nginx
</syntaxhighlight>
e modificare come da esempio
<syntaxhighlight lang="bash">
/var/log/nginx/*.log /media/discodati/logs/*/*.log {
su www-data adm
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi \
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
}
</syntaxhighlight>
Per forzare il logrotate usare
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sudo apt-get install nginx
sudo logrotate -f /etc/logrotate.d/nginx
</syntaxhighlight >
</syntaxhighlight>
 
 
[[Category:IT]]
[[Category:Linux]]

Versione attuale delle 15:35, 15 feb 2024

Forward dell'IP reale del client

[modifica]

Per la natura dell'infrastruttura server, l'IP reale del client viene perso dopo la chiamata a Nginx.
Il giro è
Client -> Nginx -> IIS
di conseguenza ad IIS arriva come client IP quello di Nginx e la geolocalizzazione va a puttane
Per sistemare il problema il dato dev'essere passato tramite le varie request all'interno di un header specializzato: X-FORWARDED-FOR.

Essendo il primo punto di passaggio è l'unico che possiede il reale client-IP. Nella configurazione vista del paragrafo precedente si vede l'assegnazione del client-IP nel req header X-FORWARDED-FOR.

#...
location / {
  proxy_pass http://127.0.0.1:80;
  # Set di un header X-Real-IP che serve a varnish
  proxy_set_header X-Real-IP  $remote_addr;
  # Set dell'header X-Forwarded-For per conservare il real IP tramite le varie request che portano ad IIS
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto https;
  proxy_set_header X-Forwarded-Port 443;
  proxy_set_header Host $host;
}
#...

Brotli compression

[modifica]

La compressione brotli che sostituisce gzip quando possibile è stata approfondita qua
Nginx modulo Brotli (text compression)

Leggere i LOG del web-server

[modifica]

Purtroppo i log non potranno più essere letti comodamente dall'IIS di Windows perché davanti a lui c'è nginx.
Il consiglio è quello di creare uno share in Samba come questo

[NginxLogs]
  comment = Cartella di condivisione dei log di nginx
  read only = yes
  locking = no
  path = /var/log/nginx
  guest ok = no

e di rendere il proprio utente facente parte del gruppo adm affinché abbia i permessi di lettura.

  sudo adduser nomeutente adm

LOG configurazione avanzata

[modifica]

Avendo diversi siti su Nginx bisogna dividere i log nelle cartelle
es.

/media/discodati/logs/nomesito1.com
/media/discodati/logs/nomesito2.it
/media/discodati/logs/immagini.sito2.com

assicurandosi di mettere i permessi adatti
es.

sudo chown www-data:adm /media/discodati/logs -R
sudo chmod 775 /media/discodati/logs -R


E di conseguenza configurare i singoli virtual host con la cartella giusta

server {

        # ...
	
	server_name nomesito.com;

        error_log /media/discodati/nomesito.com/error.log;
        access_log /media/discodati/nomesito.com/access.log;

        # ...
}


A questo punto tutti i log verranno riversati nei 2 file error.log e access.log.
Per fare in modo che vengano divisi e compressi (una volta che diventano vecchi) automaticamente è necessario configurare LOGROTATE.

sudo nano /etc/logrotate.d/nginx

e modificare come da esempio

/var/log/nginx/*.log /media/discodati/logs/*/*.log {
	su www-data adm
	daily
	missingok
	rotate 14
	compress
	delaycompress
	notifempty
	create 0640 www-data adm
	sharedscripts
	prerotate
		if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
			run-parts /etc/logrotate.d/httpd-prerotate; \
		fi \
	endscript
	postrotate
		invoke-rc.d nginx rotate >/dev/null 2>&1
	endscript
}

Per forzare il logrotate usare

sudo logrotate -f /etc/logrotate.d/nginx