WordPress+Nginx+proxyリアルIP取得
WordPressがNginxでproxyエージェントのバックエンドとして実行されている場合、WPはデフォルトで$_を取得します.SERVER['rmote_addr']のIPアドレス.実はこのIPアドレスはフロントエンドのNginxのIPアドレスで、間違っています.WordPressで実際のIPアドレスを取得するにはどうすればいいですか?方法は簡単で、いくつかありますが、次の2つについて説明します.
まず、Nginx Proxyを実行するものをサーバAとし、WordPressを実行するものをサーバB(Nginx、Apache、Lighttpd、IISなど)と定義.
1.HttpRealIpModuleモジュールの使用:HTTP_X_REAL_IP. HttpRealIpModuleモジュールはデフォルトではNginxにインストールされません.Nginxを構成し、--with-http_を追加する必要があります.realip_moduleオプション再コンパイルインストールNginx.
次に、Nginx Proxyフロントエンドに:proxy_を追加します.set_header X-Real-IP $remote_addr;
再ロードNginxの構成:/usr/local/nginx/sbin/nginx-s reload
このとき、お客様の実際のIPは$_に保存されます.SERVER['HTTP_X_REAL_IP']変数でphpプログラムを使用した場合、出力:
echo $_SERVER['HTTP_X_REAL_IP'];
ユーザの実際のIPが得られる.
WordPressルートの下のwp-configを修正する.php:2行目にif(isset($_SERVER['HTTP_X_REAL_IP']){$_SERVER['REMOTE_ADDR']=$_SERVER['HTTP_X_REAL_IP']];
保存終了、完了!
2.HTTP_を使うX_FORWARDED_FOR変数
他のモジュールを取り付ける必要はありません.
次に、Nginx Proxyフロントエンド、すなわちサーバAに:proxy_を追加するset_header X-Forwarded-For $remote_addr;
再ロードNginxの構成:/usr/local/nginx/sbin/nginx-s reload
この場合、顧客の実際のIPは$_に保存されます.SERVER['HTTP_X_FOrWARDED_FOR']変数では、
WordPressルートの下のwp-configを修正する.php:2行目に追加:
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $_SERVER['REMOTE_ADDR'] = $ips[0]; }
保存終了、完了!
今WPに新しいコメントを追加してみて、実際のIPを使っているのではないでしょうか.
WordPressでは、この方法を使用することができるだけでなく、一反三を挙げる、この方法は他の類似の環境に使用することができる.
phpプログラムでこのように出力された場合:
print_r($_SERVER);
?>
次の図に似たような情報が得られます.
図中、REMOTE_ADDRは、フロントエンドエージェントNginx、すなわちサーバAのIPアドレスである.HTTP_X_REAL_IPはユーザの実際のIPアドレスであり、これは有用である.HTTP_X_FORWARDED_FORもユーザの実際のIPアドレスであり、これは有用である.本当に何度もジャンプすると、ここでは「,」で区切られたIPアドレスのリストが得られる.
関連情報:
Nginx+Memcached高速最適化DedeCMSのプログラム修正Nginx-JSP-Tomcat-PHP
Nginx統合Tomcat Nginxサービス管理スクリプトWordPress自動キーワード(語)外鎖BlogMechanics KeywordLink,SEO最適化プラグイン変換元:http://admclub.com/view/wordpress-nginx-proxy%E5%8F%96%E5%BE%97%E7%9C%9F%E5%AE%9Eip
Stackflow返信:
http://stackoverflow.com/questions/3003145/how-to-get-client-ip-address
Whatever you do, make sure not to trust data sent from the client.
However, they can be behind a proxy server in which case the proxy may have set the
This means that if you are going to save the
基本的なNginx構成:張宴から転送:
user www www;worker_processes 10;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;#最大ファイル記述子worker_rlimit_nofile 51200;events { use epoll; worker_connections 51200;}http { include conf/mime.types; default_type application/octet-stream; keepalive_timeout 120; tcp_nodelay on; upstream www.s135.com { server 192.168.1.2:80; server 192.168.1.3:80; server 192.168.1.4:80; server 192.168.1.5:80; } upstream blog.s135.com { server 192.168.1.7:8080; server 192.168.1.7:8081; server 192.168.1.7:8082; } server { listen 80; server_name www.s135.com; location/{ proxy_pass http://www.s135.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } log_format www_s135_com '$remote_addr - $remote_user [$time_local] $request ' '"$status"$body_bytes_sent "$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_log /data1/logs/www.log www_s135_com; } server { listen 80; server_name blog.s135.com; location/{ proxy_pass http://blog.s135.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } log_format blog_s135_com '$remote_addr - $remote_user [$time_local] $request ' '"$status"$body_bytes_sent "$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_log /data1/logs/blog.log blog_s135_com; }}
このとき、クライアントIPを取得する方法は以下の通りである.
function getIP() {
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if(isset($_SERVER['HTTP_X_REAL_IP'])) {
return $_SERVER['HTTP_X_REAL_IP']);
} else if(isset($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR']);
} else {
return '';
}
}
まず、Nginx Proxyを実行するものをサーバAとし、WordPressを実行するものをサーバB(Nginx、Apache、Lighttpd、IISなど)と定義.
1.HttpRealIpModuleモジュールの使用:HTTP_X_REAL_IP. HttpRealIpModuleモジュールはデフォルトではNginxにインストールされません.Nginxを構成し、--with-http_を追加する必要があります.realip_moduleオプション再コンパイルインストールNginx.
次に、Nginx Proxyフロントエンドに:proxy_を追加します.set_header X-Real-IP $remote_addr;
再ロードNginxの構成:/usr/local/nginx/sbin/nginx-s reload
このとき、お客様の実際のIPは$_に保存されます.SERVER['HTTP_X_REAL_IP']変数でphpプログラムを使用した場合、出力:
echo $_SERVER['HTTP_X_REAL_IP'];
ユーザの実際のIPが得られる.
WordPressルートの下のwp-configを修正する.php:2行目にif(isset($_SERVER['HTTP_X_REAL_IP']){$_SERVER['REMOTE_ADDR']=$_SERVER['HTTP_X_REAL_IP']];
保存終了、完了!
2.HTTP_を使うX_FORWARDED_FOR変数
他のモジュールを取り付ける必要はありません.
次に、Nginx Proxyフロントエンド、すなわちサーバAに:proxy_を追加するset_header X-Forwarded-For $remote_addr;
再ロードNginxの構成:/usr/local/nginx/sbin/nginx-s reload
この場合、顧客の実際のIPは$_に保存されます.SERVER['HTTP_X_FOrWARDED_FOR']変数では、
WordPressルートの下のwp-configを修正する.php:2行目に追加:
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $_SERVER['REMOTE_ADDR'] = $ips[0]; }
保存終了、完了!
今WPに新しいコメントを追加してみて、実際のIPを使っているのではないでしょうか.
WordPressでは、この方法を使用することができるだけでなく、一反三を挙げる、この方法は他の類似の環境に使用することができる.
phpプログラムでこのように出力された場合:
print_r($_SERVER);
?>
次の図に似たような情報が得られます.
図中、REMOTE_ADDRは、フロントエンドエージェントNginx、すなわちサーバAのIPアドレスである.HTTP_X_REAL_IPはユーザの実際のIPアドレスであり、これは有用である.HTTP_X_FORWARDED_FORもユーザの実際のIPアドレスであり、これは有用である.本当に何度もジャンプすると、ここでは「,」で区切られたIPアドレスのリストが得られる.
関連情報:
Nginx+Memcached高速最適化DedeCMSのプログラム修正Nginx-JSP-Tomcat-PHP
Nginx統合Tomcat Nginxサービス管理スクリプトWordPress自動キーワード(語)外鎖BlogMechanics KeywordLink,SEO最適化プラグイン変換元:http://admclub.com/view/wordpress-nginx-proxy%E5%8F%96%E5%BE%97%E7%9C%9F%E5%AE%9Eip
Stackflow返信:
http://stackoverflow.com/questions/3003145/how-to-get-client-ip-address
Whatever you do, make sure not to trust data sent from the client.
$_SERVER['REMOTE_ADDR']
contains the real IP address of the connecting party. That is the most reliable value you can find. However, they can be behind a proxy server in which case the proxy may have set the
$_SERVER['HTTP_X_FORWARDED_FOR']
, but this value is easily spoofed. For example, it can be set by someone without a proxy, or the IP can be an internal IP from the LAN behind the proxy. This means that if you are going to save the
$_SERVER['HTTP_X_FORWARDED_FOR']
, make sure youalso save the $_SERVER['REMOTE_ADDR']
value. E.g. by saving both values in different fields in your database. 基本的なNginx構成:張宴から転送:
user www www;worker_processes 10;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;#最大ファイル記述子worker_rlimit_nofile 51200;events { use epoll; worker_connections 51200;}http { include conf/mime.types; default_type application/octet-stream; keepalive_timeout 120; tcp_nodelay on; upstream www.s135.com { server 192.168.1.2:80; server 192.168.1.3:80; server 192.168.1.4:80; server 192.168.1.5:80; } upstream blog.s135.com { server 192.168.1.7:8080; server 192.168.1.7:8081; server 192.168.1.7:8082; } server { listen 80; server_name www.s135.com; location/{ proxy_pass http://www.s135.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } log_format www_s135_com '$remote_addr - $remote_user [$time_local] $request ' '"$status"$body_bytes_sent "$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_log /data1/logs/www.log www_s135_com; } server { listen 80; server_name blog.s135.com; location/{ proxy_pass http://blog.s135.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } log_format blog_s135_com '$remote_addr - $remote_user [$time_local] $request ' '"$status"$body_bytes_sent "$http_referer"' '"$http_user_agent""$http_x_forwarded_for"'; access_log /data1/logs/blog.log blog_s135_com; }}
このとき、クライアントIPを取得する方法は以下の通りである.
function getIP() {
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
} else if(isset($_SERVER['HTTP_X_REAL_IP'])) {
return $_SERVER['HTTP_X_REAL_IP']);
} else if(isset($_SERVER['REMOTE_ADDR'])) {
return $_SERVER['REMOTE_ADDR']);
} else {
return '';
}
}