Короткий ответ: Nginx не должен маскировать реферера. Nginx замаскирует заголовок хоста, и вам необходимо использовать прокси-инструмент, чтобы параметры cherrypy.request.remote.ip и cherrypy.request.base были установлены на основе хоста, отправленного исходным агентом. Но Реферер должен быть передан без изменений.
Возможно (хотя кажется маловероятным), что ваш хостинг-провайдер удалит заголовок реферера.
Например, у меня есть служба, которая выводит заголовки запроса с этим обработчиком:
class System:
@cherrypy.expose
def headers(self):
return cherrypy.request.headers
Этот сервер находится за Nginx, и когда я делаю запрос к нему с помощью реферера, я вижу его в выводе:
proj master $ curl https://api.tentob.com/system/headers/ -H 'Referer: jaraco did it'
{"Remote-Addr": "::1", "Host": "svc.example.com", "X-Real-Ip": "99.99.99.99", "X-Forwarded-For": "99.99.99.99", "X-Forwarded-Host": "svc.example.com", "X-Forwarded-Proto": "https", "Connection": "close", "User-Agent": "curl/7.54.0", "Accept": "*/*", "Referer": "jaraco did it"}
Итак, ваша реализация, как показано, выглядит так, как будто она должна работать для меня.
Вы должны быть осторожны, хотя. Как вы можете видеть, злоумышленнику было бы несложно предоставить любого старого Реферера, которого он пожелает.