Nginxでリバースプロキシ
目次
はじめに

nginxはメモリの消費量も少ないみたいなので最近、自分でWebサーバーを構築するときには好んで使用しています。
.htaccessみたいなのでものすごいゴリゴリやらないといけないサイト以外はこちらのほうが良さげです。
今回はそんなNginxを使って、リバースプロキシを構築しようと思います。
リバースプロキシって?
ロードバランサー的なことをやることも可能みたいですが、今回は
- httpをリバースプロキシ
- sshをリバースプロキシ(これってリバースプロキシ?)
この2つをやってみたいと思います。
やってみる
httpをリバースプロキシ
以下はnginxに来たリクエストを別サーバーに流すやり方です。
cat /etc/nginx/sites-available/gogs
server {
listen 443 ssl;
server_name gogs.tluna.ga;
ssl_certificate /etc/letsencrypt/live/gogs.tluna.ga/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gogs.tluna.ga/privkey.pem;
client_max_body_size 20M;
location / {
proxy_pass http://192.168.0.7:3000;
}
location ^~ /.well-known/acme-challenge/ {
default_type "text/plain";
root /var/www/html/gogs;
}
}
debian系のsites-availableってhttpディレクティブ配下(nginx.conf上)なので、ここに増やした設定はhttp(s)として取り扱われます。
tcpをリバースプロキシ
今回この記事を書くきっかけになったものです。
今までsshを別サーバーに転送するとかはできないと思っておりました。
しかし、リバースプロキシを使えば可能なんですね。
cat /etc/nginx/stream/gogs-ssh.conf
server {
listen NNN;
#server_name gogs.tluna.ga;
proxy_pass 192.168.0.7:22;
}
cat /etc/nginx/nginx.conf
stream {
include /etc/nginx/stream/*.conf;
}
streamディレクティブ配下においてあげることで、これはhttpじゃないよ。 余計なことするなよ。的な事ができるみたいですね。
これを使えば、1台のサーバーで複数台のサーバーのssh通信を一手に引き受ける事ができますね。(特に理由がない場合は、踏み台経由とかにしたほうが便利そうですけども)