Capito, quindi si tratta più di ciò che Rails o altri gem fanno con le intestazioni, e meno di ciò che il codice di Discourse fa.
È interessante notare che Rails non utilizza X-Real-IP, che è probabilmente meno comunemente usato di X-Forwarded-For, ma certamente più noto di Forwarded e Client-IP
.
Probabilmente X-Real-IP è quindi obsoleto nella configurazione di Nginx. Discourse lo espande insieme a X-Forwarded-For nei log, se lo interpreto correttamente? Non sono riuscito a trovare alcun altro uso/ menzione esplicito nel codice:
- discourse/lib/discourse_logstash_logger.rb at main · discourse/discourse · GitHub
- logster/lib/logster/message.rb at main · discourse/logster · GitHub
Quello qui sotto sembrava sbagliato in due modi quando l’ho visto mentre debuggavo la limitazione delle richieste condivise e ho registrato errori relativi all’IP client “unix:” non valido dopo l’aggiornamento di Discourse (usiamo un proxy socket UNIX davanti al contenitore e ci affidiamo a X-Forwarded-For).
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
Ma capisco il concetto di “funziona” per rendere affidabilmente $remote_addr l’unica fonte di verità, e real_ip_header il modo canonico per gli amministratori di controllare l’unico IP che Discourse/Rails riceve. Vedo che è già stato aggiunto a Serve Discourse from a subfolder (path prefix) instead of a subdomain
.