Webサイトが複数のサーバー間で負荷分散されているとしましょう。 curl DOMAIN.TLD
などのコマンドが実行されているかどうかをテストする必要があります。したがって、各IPアドレスを分離するには、IPを手動で指定します。しかし、多くのWebサイトがサーバーでホストされている可能性があるため、curl IP_ADDRESS -H 'Host: DOMAIN.TLD'
のようなHostヘッダーを提供します。私の理解では、これら2つのコマンドはまったく同じHTTPリクエストを作成します。唯一の違いは、後者の場合、cURLからDNSルックアップ部分を取り出し、これを手動で実行することです(間違っている場合は修正してください)。
これまでのところすべて。しかし、今はHTTPSのURLについても同じようにしたいと思います。繰り返しますが、curl https://DOMAIN.TLD
のようにテストできます。しかし、IPを手動で指定したいので、curl https://IP_ADDRESS -H 'Host: DOMAIN.TLD'
を実行します。今、私はcURLエラーを受け取ります:
curl: (51) SSL: certificate subject name 'DOMAIN.TLD' does not match target Host name 'IP_ADDRESS'.
もちろん、cURLに証明書を気にしないように指示することで( "-k"オプション)、これを回避できますが、それは理想的ではありません。
SSLで認証されているホストから接続先のIPアドレスを分離する方法はありますか?
私がcURLマニュアルを通過する解決策を見つけたと思います:
curl https://DOMAIN.EXAMPLE --resolve 'DOMAIN.EXAMPLE:443:192.0.2.17'
[curl] 7.21.3で追加されました。 7.42.0で追加された削除のサポート。
from CURLOPT_RESOLVEの説明
/ etc/hostsを変更して、ドメインが特定のIPにあるとサーバーに認識させることができます。
これは構文です:
192.168.10.20 www.domain.tld
これにより、cURLはSSL証明書なしで必要なIPアドレスを使用します。
プログラムコンポーネントへのリンクしか含まれていないため、現在最も投票されている回答のman
エントリは次のとおりです。
--resolve <Host:port:address>
Provide a custom address for a specific Host and port pair. Using
this, you can make the curl requests(s) use a specified address and
prevent the otherwise normally resolved address to be used. Consider
it a sort of /etc/hosts alternative provided on the command line.
The port number should be the number used for the specific protocol
the Host will be used for. It means you need several entries if you
want to provide address for the same Host but different ports.
The provided address set by this option will be used even if -4,
--ipv4 or -6, --ipv6 is set to make curl use another IP version.
This option can be used many times to add many Host names to resolve.
Added in 7.21.3.
しかし、与えられた制限(「同じホストに異なるポートにアドレスを提供したい場合、いくつかのエントリが必要であることを意味します。」)のため、同時に両方を変換できる別の新しいオプションを検討します。
--connect-to <Host1:PORT1:Host2:PORT2>
For a request to the given Host:PORT pair, connect to
CONNECT-TO-Host:CONNECT-TO-PORT instead. This option is suitable
to direct requests at a specific server, e.g. at a specific cluster
node in a cluster of servers. This option is only used to establish
the network connection. It does NOT affect the hostname/port that
is used for TLS/SSL (e.g. SNI, certificate verification) or for
the application protocols. "Host" and "port" may be the empty string,
meaning "any Host/port". "connect-to-Host" and "connect-to-port"
may also be the empty string, meaning "use the request's original Host/port".
This option can be used many times to add many connect rules.
See also --resolve and -H, --header.
Added in 7.49.0.
Windowsでcurlを実行している場合は、二重引用符を使用します
curl https://DOMAIN.TLD --resolve "DOMAIN.TLD:443:IP_ADDRESS"
curl DOMAIN.TLD --resolve "DOMAIN.TLD:80:IP_ADDRESS"
スキーム/プロトコルは前もってスキップできますが、-resolve文字列のポート番号はスキップできません。