我想要达到像 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;
}
?>
感谢解答
1
lhbc 2023-08-02 22:21:44 +08:00 via Android
不明白,curl -L 不是会跟随 301 302 307 308 吗?
|
2
vsean OP @lhbc #1 是的 curl -L 是跟随,就是用起来体验不好,还要输入-L ,我是想达到直接 curl 域名,就可以,这样简单一些
|
4
Suaxi 2023-08-02 23:33:21 +08:00 via Android
可以试试直接在 nginx 加
location /ip { add_header Content-Type text/plain; return 200 $remote_addr; } |
5
vsean OP @Suaxi #4 我需要设置首页,不能是 ip 目录,也不能直接用 nginx 返回,用了 CF ,如果直接 nginx 返回是 CF 的 CDN ip ,必须是由首页的 index.php 返回 IP
|
6
vsean OP 还有一个问题的难点是用了 CF ,没有办法正确传递 UA
|
7
ratazzi 2023-08-03 07:58:34 +08:00 via iPhone
用了 CF 那直接用 workers 处理就行了,而且 CF 怎么就不能正确传递 UA 了
|
8
ClarkAbe 2023-08-03 09:11:39 +08:00 via Android
@vsean #5 官方那么详细的文档文档你是一点不看啊...闭门造车? https://developers.cloudflare.com/fundamentals/get-started/reference/http-request-headers/
|
10
yumusb 2023-08-03 12:24:19 +08:00
location / {
default_type text/html ; if ($http_user_agent ~* (Curl|Wget)){ return 200 "$http_cf_connecting_ip\n"; } } |