- blogs:
- cles::blog
2021/05/24

nginx の Port 443 で SSL と SSH を共存させる


「Run Non-SSL Protocols on the Same Port as SSL in NGINX 1.15.2」という記事を読んで、$ssl_preread_protocol
を使うと 1 つのポート ( 443 ) で複数のプロトコルを扱う Proxy を nginx で実現できることが分かったので試してみようとしたら、そんなに単純にいかなかったので顛末をメモ。
結局のところ、設定ファイルは以下のような形になりました。
http {
server {
listen 127.0.0.1:8443 ssl http2 proxy_protocol;
real_ip_header proxy_protocol;
set_real_ip_from 127.0.0.1;
・・・・・・・・・
}
}
stream {
upstream ssh {
server 127.0.0.1:8022;
}
upstream web {
server 127.0.0.1:8443;
}
map $ssl_preread_protocol $upstream {
default ssh;
"TLSv1.3" web;
"TLSv1.2" web;
}
server {
listen 443;
proxy_pass $upstream;
ssl_preread on;
proxy_protocol on;
}
server {
listen 127.0.0.1:8022 proxy_protocol;
proxy_pass 127.0.0.1:22;
}
}
鬼門だったのは PROXY Protocol*1 の設定の部分。この設定は proxy_pass された先のサーバがクライアントの IP を知るために必須の設定ですが、SSH のように PROXY Protocol に対応していないサービスの場合には、そのままローカルの 22 に proxy_pass してしまうとプロトコルエラーになってしまいます。
分かってしまえば単純な話なのですが、nginx では proxy_protocol on;
で proxy_pass した場合、飛ばし先の listen に proxy_protocol をつければよいので、ssh の場合には stream
の定義のところに proxy_protocol がついた server
をもうひとつ定義してあげる必要がありました。
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/12493
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(112165)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110797)
3 . 年次の人間ドックへ(110387)
4 . 2023 年分の確定申告完了!(1つめ)(109938)
5 . 三菱鉛筆がラミーを買収(109835)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110797)
3 . 年次の人間ドックへ(110387)
4 . 2023 年分の確定申告完了!(1つめ)(109938)
5 . 三菱鉛筆がラミーを買収(109835)
cles::blogについて
Referrers