banner
libxcnya.so

libxcnya.so

Nothing...
telegram
twitter
github
email

Typecho CDNを使用して、訪問者の実際のIPを取得する

序文#

CDN はウェブサイトの高速化とソース IP の保護に役立ちますが、Typecho で CDN を有効にすると、バックエンドのコメントエリアのユーザーの IP はすべて CDN の IP として表示されます。では、ユーザーの実際の IP アドレスをどのように取得できるのでしょうか?

チュートリアル#

まず、ここを開きます。
自分の IP アドレスを取得します。例えば、2001:470:c:573::2333とします。

PHP ファイルを作成し、以下の内容を入力します。

<?php
print_r($_SERVER);
?>

そして、ブラウザでアクセスして、以下の内容を取得します。

*Array
(
[USER] => www
[HOME] => /home/www
[HTTP_CDN_LOOP] => cloudflare
[HTTP_CF_CONNECTING_IP] => 2001:470:c:573::2333
[HTTP_COOKIE] => __cfduid=1a1d45v141f9n19s810b
[HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.9
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/awebp,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
[HTTP_UPGRADE_INSECURE_REQUESTS] => 1
[HTTP_CF_VISITOR] => {"scheme":"https"}
[HTTP_X_FORWARDED_PROTO] => https
[HTTP_CF_RAY] => 5656aff39c0ceb95-LAX
[HTTP_X_FORWARDED_FOR] => 2001:470:c:573::2333
[HTTP_CF_IPCOUNTRY] => US
[HTTP_ACCEPT_ENCODING] => gzip
[HTTP_CONNECTION] => Keep-Alive
[HTTP_HOST] => blog.xcnya.cn
[PATH_INFO] => 114514
[REDIRECT_STATUS] => 200
[SERVER_NAME] => blog.xcnya.cn
[SERVER_PORT] => 443
[SERVER_ADDR] => 2606:4700:3036::2333:2333
[REMOTE_PORT] => 11451
[REMOTE_ADDR] => 2606:4700:3036::2333:2333
[SERVER_SOFTWARE] => cloudflare
[GATEWAY_INTERFACE] => CGI/1.1
[REQUEST_SCHEME] => https
[SERVER_PROTOCOL] => HTTP/1.1
[DOCUMENT_ROOT] => /www/wwwroot/blog.xcnya.cn
[DOCUMENT_URI] => /114514.php
[REQUEST_URI] => /114514.php
[SCRIPT_NAME] => /114514.php
[CONTENT_LENGTH] =>
[CONTENT_TYPE] =>
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[SCRIPT_FILENAME] => /www/wwwroot/blog.xcnya.cn
[FCGI_ROLE] => RESPONDER
[PHP_SELF] => /114514.php
[REQUEST_TIME_FLOAT] => 1656230855.1145
[REQUEST_TIME] => 1656230855
)*

Ctrl+F を押して、IP アドレス2001:470:c:573::2333を検索します。

対応する項目はHTTP_CF_CONNECTING_IPです。

PHP で取得する方法は以下の通りです。

<?php
$ipaddr=$_SERVER['HTTP_CF_CONNECTING_IP'];
echo $ipaddr
?>

これで実際のユーザーの IP アドレスを取得できます。

それでは、Typecho に適用する方法です。
ウェブサイトのルートディレクトリで config.inc.php を見つけます。
ファイルの末尾に以下の内容を数行追加します。

define('__TYPECHO_IP_SOURCE__', 'CF_CONNECTING_IP');  //HTTP_を削除

保存してウェブサイトを開きます。
コメントエリアに適当なコメントを投稿すると、CDN ではなく実際のユーザーの IP が表示されることがわかります。

この操作は既存のコメントエリアのユーザーの IP を変更しません。操作後、データベースに表示される既存のユーザーの CDN IP は変わりません。

この記事はMix Spaceから xLog に同期更新されました。
元のリンクはhttps://blog.nekorua.com/posts/maintain/14.htmlです。


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。