Nginx tip & tricks: differenze tra le versioni
Nessun oggetto della modifica |
|||
| (75 versioni intermedie di 2 utenti non mostrate) | |||
| Riga 1: | Riga 1: | ||
== 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/> | |||
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> | <syntaxhighlight> | ||
/media/discodati/logs/nomesito1.com | |||
</syntaxhighlight > | /media/discodati/logs/nomesito2.it | ||
/media/discodati/logs/immagini.sito2.com | |||
</syntaxhighlight> | |||
assicurandosi di mettere i permessi adatti<br/> | |||
es. | |||
<syntaxhighlight lang="bash"> | <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 { | ||
# ... | |||
server_name nomesito.com; | |||
error_log /media/discodati/nomesito.com/error.log; | |||
access_log /media/discodati/nomesito.com/access.log; | |||
# ... | |||
} | |||
</syntaxhighlight><br/> | |||
A questo punto tutti i log verranno riversati nei 2 file <code>error.log</code> e <code>access.log</code>.<br/> | |||
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"> | |||
sudo logrotate -f /etc/logrotate.d/nginx | |||
</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.comassicurandosi 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