nginx 和 HTTP Referer

Ali*_*xel 2 php nginx http-headers php-fpm

我将 nginx 与 php5-fpm 以及以下fastcgi_params文件一起使用:

fastcgi_param   CONTENT_LENGTH      $content_length;
fastcgi_param   CONTENT_TYPE        $content_type;
fastcgi_param   DOCUMENT_ROOT       $document_root;
fastcgi_param   DOCUMENT_URI        $document_uri;
fastcgi_param   GATEWAY_INTERFACE   CGI/1.1;
fastcgi_param   HTTPS               $https;
fastcgi_param   PATH_INFO           $fastcgi_path_info;
fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;
fastcgi_param   QUERY_STRING        $query_string;
fastcgi_param   REDIRECT_STATUS     200;
fastcgi_param   REMOTE_ADDR         $remote_addr;
fastcgi_param   REMOTE_PORT         $remote_port;
fastcgi_param   REQUEST_METHOD      $request_method;
fastcgi_param   REQUEST_URI         $request_uri;
fastcgi_param   SCRIPT_FILENAME     $document_root$fastcgi_script_name;
fastcgi_param   SCRIPT_NAME         $fastcgi_script_name;
fastcgi_param   SERVER_ADDR         $server_addr;
fastcgi_param   SERVER_NAME         $server_name;
fastcgi_param   SERVER_PORT         $server_port;
fastcgi_param   SERVER_PROTOCOL     $server_protocol;
fastcgi_param   SERVER_SOFTWARE     nginx/$nginx_version;
Run Code Online (Sandbox Code Playgroud)

我注意到该$_SERVER['HTTP_REFERER']变量未设置。我在 nginx wiki 中搜索了任何对 Referer 标头的引用,但找不到任何提及与 fastcgi 相关的问题的内容。

如何让 nginx 传递该标头?我在这里遗漏了一些明显的东西吗?

Fal*_*mot 5

HTTP_REFERER当且仅当远程用户代理(例如 Web 浏览器)提供可选标头时,nginx 才会为 CGI 脚本设置环境变量Referer:。对于远程用户代理来说,此标头的内容也是完全任意的(尽管它们应该是最后访问的页面,但并不总是如此,并且没有任何限制它如此)。

每当您的 CGI 脚本使用此变量时,它都应该有一个备用控制路径来处理未设置该变量的情况,并且它应该认识到它经常是错误的或被欺骗的。