Gestione della "catena di fiducia" dell'IP reale dell'utente finale

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 :thinking:.

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:

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 :+1:.