求教关于 nginx 配置 curl 访问的问题

332 天前
 vsean

我想要达到像 ip.me 一样,通过 curl ip.me 访问会返回 IP

网站 nginx 配置了 http 到 https 的 301 跳转

现在,通过 curl -L 域名 或 curl https://域名 访问可以正常返回 IP

但是由于 nginx 的 301 跳转,curl 域名 没有任何信息返回

要如何才能让 curl 域名 正常返回 IP 呢?

curl 返回 IP 的代码如下:

<?php
function getIp(){
  if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  } elseif (isset($_SERVER['HTTP_X_REAL_IP'])) { 
    $ip = $_SERVER['HTTP_X_REAL_IP'];
  } elseif (isset($_SERVER['HTTP_X_IP'])) {
    $ip = $_SERVER['HTTP_X_IP'];
  } else {
    $ip = $_SERVER['REMOTE_ADDR'];
  }
  return $ip;
}

//当使用 cURL 访问时,返回访问者 IP 地址
if(!empty($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'curl') !== false){
  $ip = getIp(); 
  $ip = urldecode($ip);
// 在输出前去掉空格,mac 终端下有的 IP 地址后面有空格
$ip = trim($ip);
// 输出后换行,linux 下避免换行不正确的问题
echo $ip . "\n";
  exit;
}
?>

感谢解答

832 次点击
所在节点    问与答
10 条回复
lhbc
332 天前
不明白,curl -L 不是会跟随 301 302 307 308 吗?
vsean
332 天前
@lhbc #1 是的 curl -L 是跟随,就是用起来体验不好,还要输入-L ,我是想达到直接 curl 域名,就可以,这样简单一些
lhbc
332 天前
@vsean 在 nginx 里判断 ua ,如果是 curl 就不跳转
Suaxi
332 天前
可以试试直接在 nginx 加
location /ip {
add_header Content-Type text/plain;
return 200 $remote_addr;
}
vsean
332 天前
@Suaxi #4 我需要设置首页,不能是 ip 目录,也不能直接用 nginx 返回,用了 CF ,如果直接 nginx 返回是 CF 的 CDN ip ,必须是由首页的 index.php 返回 IP
vsean
331 天前
还有一个问题的难点是用了 CF ,没有办法正确传递 UA
ratazzi
331 天前
用了 CF 那直接用 workers 处理就行了,而且 CF 怎么就不能正确传递 UA 了
ClarkAbe
331 天前
@vsean #5 官方那么详细的文档文档你是一点不看啊...闭门造车? https://developers.cloudflare.com/fundamentals/get-started/reference/http-request-headers/
ik
331 天前
@vsean #5 你这情况一样可以用 nginx 直接返回,下面的文档看一看
yumusb
331 天前
location / {
default_type text/html ;
if ($http_user_agent ~* (Curl|Wget)){
return 200 "$http_cf_connecting_ip\n";
}
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/961927

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX