Nginx tip & tricks: differenze tra le versioni
Nessun oggetto della modifica |
m Simovinci ha spostato la pagina Nginx e Varnish per HTTPS a Nginx tip & tricks: Cambiati i contenuti, il titolo non c'entrava più un cazzo |
(Nessuna differenza)
| |
Versione delle 15:31, 15 feb 2024
Forward dell'IP reale del client
Per la natura dell'infrastruttura server, l'IP reale del client viene perso dopo la chiamata a Nginx.
Il giro è
Client -> Nginx -> Varnish -> IIS
di conseguenza ad IIS arriva come client IP quello del Varnish 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.
Forward di Nginx
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;
}
#...
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.
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
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