
nginx.conf ファイルに次の構成を指定して、Nginx サーバーを L4 プロキシ (ストリーム モジュールを使用したフォワード プロキシ) としてセットアップしました。
stream {
resolver 8.8.8.8;
server {
listen 443;
ssl_preread on;
proxy_connect_timeout 5s;
proxy_pass $ssl_preread_server_name:$server_port;
}
}
上記の構成で、すべて正常に動作します。ただし、プロキシ サーバーに渡される URL のアクセスを制限したいとします。IP アドレスではなく、URL 名で制限します。
調査を行って次の構成ファイルをセットアップしたところ、プロキシに渡される URL を制御できました。
しかし、問題はここから始まります。大規模な Web サイトが呼び出された場合、その Web サイトには多くのリンクまたはサブドメインがバックグラウンドで読み込まれており、通過を許可する URL を制限していることがわかっており、サブドメインのワイルドカードがストリーム ブロックで機能していないため、要求された Web サイトを完全に読み込むことができません。
ドメインのサブドメインのワイルドカードをサポートするために、ストリーム ブロックでそれを使用する解決策はありますか? 私の新しい構成は次のとおりです。
stream {
map $ssl_preread_server_name $name {
ipchicken.com ipchicken.com;
www.bbc.com www.bbc.com;
www.bbc.co.uk www.bbc.co.uk;
bbci.co.uk bbci.co.uk;
}
server {
resolver 8.8.8.8;
listen 443;
ssl_preread on;
proxy_connect_timeout 5s;
proxy_pass $name:$server_port;
}
}
events {
}
答え1
キーワードを探しています。このキーワードを使用すると、ドメインのワイルドカード エントリとしてhostnames
使用できます。ディレクティブと同様に、との両方に使用できます。*.example.com
example.com
server_name
.example.com
example.com
*.example.com
map $ssl_preread_server_name $name {
hostnames;
.ipchicken.com $ssl_preread_server_name;
.bbc.com $ssl_preread_server_name;
.bbc.co.uk $ssl_preread_server_name;
.bbci.co.uk $ssl_preread_server_name;
}
代わりに、ブロック内で任意の正規表現を使用することもできますmap
。
map $ssl_preread_server_name $name {
# covers 'bbc.com', 'www.bbc.com' and 'static.bbc.com':
~^(?:www\.|static\.)?bbc\.com$ $ssl_preread_server_name;
...
}