简体   繁体   English

在 Laravel 应用程序中请求 IP 不正确

[英]request IP in Laravel application not correct

in laravel when I want get visitor IP from request()->getClientIp() it always show my server IP and offcurse it not correct, I read about this problem I think it's related to cloudflare and laravel TrustProxies but I don't know what should I do.在 laravel 中,当我想从request()->getClientIp()获取访问者 IP 时,它总是显示我的服务器 IP 并使其不正确,我读到了这个问题,我认为它与 cloudflare 和 laravel TrustProxies 有关,但我不知道是什么我应该做。

how can I get real visitor IP address?我怎样才能获得真正的访客IP地址?

here is my $_Server dump这是我的 $_Server 转储


array:42 [
  "REDIRECT_STATUS" => "200"
  "HTTP_X_FORWARDED_HOST" => "dpaper.ir"
  "HTTP_X_FORWARDED_PROTO" => "https"
  "HTTP_X_FORWARDED_PORT" => "443"
  "HTTP_X_FORWARDED_FOR" => "::ffff:46.225.69.114"
  "HTTP_COOKIE" => "_ga=GA1.2.199690116.1583749582; _gid=GA1.2.452860032.1584212542; remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d=eyJpdiI6ImhYWmc5OW4zTktlakRhWDRYTmpGNmc9P"
  "HTTP_ACCEPT_LANGUAGE" => "en-US,en;q=0.9,fa;q=0.8,th;q=0.7"
  "HTTP_ACCEPT_ENCODING" => "gzip, deflate, br"
  "HTTP_SEC_FETCH_USER" => "?1"
  "HTTP_SEC_FETCH_MODE" => "navigate"
  "HTTP_SEC_FETCH_SITE" => "none"
  "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
  "HTTP_USER_AGENT" => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
  "HTTP_UPGRADE_INSECURE_REQUESTS" => "1"
  "HTTP_CONNECTION" => "keep-alive"
  "HTTP_HOST" => "dpaper.ir"
  "PATH" => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  "SERVER_SIGNATURE" => "<address>Apache/2.4.25 (Debian) Server at dpaper.ir Port 80</address>"
  "SERVER_SOFTWARE" => "Apache/2.4.25 (Debian)"
  "SERVER_NAME" => "dpaper.ir"
  "SERVER_ADDR" => "10.11.172.198"
  "SERVER_PORT" => "80"
  "REMOTE_ADDR" => "10.11.81.123"
  "DOCUMENT_ROOT" => "/var/www/html/public"
  "REQUEST_SCHEME" => "http"
  "CONTEXT_PREFIX" => ""
  "CONTEXT_DOCUMENT_ROOT" => "/var/www/html/public"
  "SERVER_ADMIN" => "webmaster@localhost"
  "SCRIPT_FILENAME" => "/var/www/html/public/index.php"
  "REMOTE_PORT" => "35058"
  "REDIRECT_URL" => "/testi"
  "GATEWAY_INTERFACE" => "CGI/1.1"
  "SERVER_PROTOCOL" => "HTTP/1.1"
  "REQUEST_METHOD" => "GET"
  "QUERY_STRING" => ""
  "REQUEST_URI" => "/testi"
  "SCRIPT_NAME" => "/index.php"
  "PHP_SELF" => "/index.php"
  "REQUEST_TIME_FLOAT" => 1584720819.106
  "REQUEST_TIME" => 1584720819
  "argv" => []
  "argc" => 0
]

I found a solution for this problem, for fix the problem you should put * in TrustProxies Middleware我找到了这个问题的解决方案,为了解决这个问题,你应该把*放在TrustProxies Middleware 中

like this:像这样:

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array|string
     */
    protected $proxies = '*';

    /**
     * The headers that should be used to detect proxies.
     *
     * @var int
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM