ローカル(エイリアス:現在のサーバー上の)プロキシを通してHTTPリクエストをルーティングしたい場合、これをどのように回避しますか?
wp-config.php
に対して許可されているプロキシ設定は次のとおりです。
# HTTP Proxies
# Used for e.g. in Intranets
# Fixes Feeds as well
# Defines the proxy adresse.
define( 'WP_PROXY_Host', '127.0.84.1' );
# Defines the proxy port.
define( 'WP_PROXY_PORT', '8080' );
# Defines the proxy username.
define( 'WP_PROXY_USERNAME', 'my_user_name' );
# Defines the proxy password.
define( 'WP_PROXY_PASSWORD', 'my_password' );
# Allows you to define some adresses which
# shouldn't be passed through a proxy.
define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' );
この質問は この質問のフォローアップです 。
プロキシ設定は通常のHTTPリクエストと同じように機能しますが、この場合は明らかにプロキシ経由でルーティングされます。 WordPressに関しては、APIのトランスポートレイヤーはすべてプロキシ接続(fsockopen、fopen、cURL、)をサポートしています。
プロキシ設定に関することは、いくつかのフレーバーがあり、それぞれの設定が異なるため、これに答えるのが難しくなります。プロキシがローカルホストにあるかリモートにあるかは関係ありません。wp-config.php
設定は関係なく機能します。通常、特定の要件があるイントラネット/ファイアウォールでこれらの設定を使用します。
デフォルトでHTTPリクエストにプロキシ/チェーンを使用するようにlocalhost/webserverを設定できるだけであり、その場合はwp-config.php
でオプションを設定する必要はないnotこれはサーバーレベルで構成されます。プロキシを無効にすると、通常、error 130 ERR_PROXY_CONNECTION_FAILED
の応答コードが表示されますが、これらのセットアップはWordPressの範囲外です。
プロキシ接続のセットアップとデバッグに役立つツール:
WordPress HTTP APIを掘り下げるには、http_api_debug
アクションを使用した次のスニペットをお勧めします(viper007bondのサイトで見つかったvar_dump
に変更されました)。
add_action( 'http_api_debug', 'viper_http_api_debug', 10, 5 );
function viper_http_api_debug( $response, $type, $class, $args, $url ) {
// You can change this from error_log() to var_dump() but it can break AJAX requests
var_dump( 'Request URL: ' . var_export( $url, true ) );
var_dump( 'Request Args: ' . var_export( $args, true ) );
var_dump( 'Request Response : ' . var_export( $response, true ) );
}
Request Responseは興味深い部分です。リクエストがプロキシを経由しているかどうかをひと目で確認できる場合があります。
たとえば、デフォルトのHTTP APIを使用して次のリクエストを作成します。
$api_url = 'http://api.wordpress.org/secret-key/1.0/';
$response = wp_remote_get($api_url);
$header = wp_remote_retrieve_headers( $response );
var_dump($header);
まったく同じリクエストですが、wp-config.phpで有効にしたリモートプロキシを使用します
//I grabbed these off of Google search they will not work for long.
define( 'WP_PROXY_Host', '210.22.115.162' );
define( 'WP_PROXY_PORT', '3128' );
プロキシを見るとわかるように、出力は異なります。最も重要なのは、プロキシがvia
タグ(この場合はsquidプロキシ)を追加していることです。プロキシはsupposedでこれを行い、notはサーバーresponse-headerを変更しますが、全員がルールなので注意してください;)。
定数define( 'WP_PROXY_BYPASS_HOSTS', 'localhost, www.example.com' )
は、プロキシ(WordPressの更新など)を通過したくないホストへのアクセスを許可するのに役立ちます。 class-http.php
のコメントは、デフォルトでlocalhost
とget_option('siteurl);
がすでに含まれていますが、pre_http_send_through_proxy
フィルターを介して変更できるため、誤解を招きます。
プロキシ設定で機能するいくつかの追加オプションは次のとおりです。WP_HTTP_BLOCK_EXTERNAL
WP_ACCESSIBLE_HOSTS