環境
さくらのVPS
-> Mem:1G
-> OS: Ubuntu20.04LTS
-> Nginx: 1.22.0
NginxとUDPproxy
VPSを借りてMinecraftマルチプレイサーバー(Java版、統合版クロスプレイ)のためのプロキシサーバーを立てようと思いついた。
Java版の通信についてはVPSにHAproxyを置いて対応した。
しかし統合版の通信はUDPなのでTCPにしか対応していないHAproxyでは通信を捌くことが出来ない。
そこでUDPについてはNginxを用いることにした。
(Webサーバーなのにプロキシサーバーとしても使えるらしい。そしてTCP・UDPともに対応している)
Nginxの導入
sudo apt install nginx
で取得できるNginxは最新バージョンではないので使わない。
適当なディレクトリを作成してwgetでNginxを取得する。
Nginx公式(http://nginx.org/en/download.html) に飛んでStableの左から2つ目のリンクをコピーしてwget [コピーしたリンク]
で取得。
.tar.gz形式のファイルがゲットできるのでtarコマンドで解凍&展開
(https://gakumon.tech/nginx/nginx_install_option.html) を参考にして
./configure
の引数を書く
今回は./configure --with-stream
を実行すれば必要なものは集まる
checking for C compiler ... not found
./configure: error: C compiler cc is not found
と言われてプロセスが停止したら、sudo apt install gcc
を実行して C 言語のコンパイラをインストールしたのちに再実行してください。
./configureを実行したらmake
を実行
処理が終わったらmake install
を実行
(パーミッション関連のエラーが出たらsudoをつけて実行)
.confを書く
minecraft-udp.confのように名前を付けて保存する。
デフォルトのコンフィグファイルと同じ階層に置く。
(ここでは/etc/nginx/nginx.conf
と同じ階層)
※自宅のグローバルIPアドレス、使用するポートは自分の環境に合わせて変えてください
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 1024;
}
stream {
upstream backend {
server 自宅のグローバルIPアドレス:使用するポート;
}
server {
listen 使用するポート udp;
proxy_pass backend;
}
}
4行目のinclude(以下略)を抜かしてしまうと必要なモジュールが読み込まれず、起動時にエラーを吐くので書き忘れてはいけない
configファイルのテスト
/usr/sbin/nginx -t -c /etc/nginx/minecraft-udp.conf
を実行すると先ほど書いたコンフィグファイルの構文チェックを行うことができる。
ここでエラーが出た場合はその文に従って修正すること。
user関係のエラーがでるようであればuser nobody nogroup;
にして試してみると良い。
/usr/sbin/nginx
の部分はパスを通していればその通りに書く必要は無い。
これ以降の説明でも同様。
動かす
nginx
だけで動かそうとするとデフォルトコンフィグを使われてしまう。
先ほど書いたminecraft-udp.conf
に書いた設定を適用してNginxを動かしたいのでコマンドを変える。
参考(https://www.server-memo.net/server-setting/nginx/nginx-command.html)
/usr/sbin/nginx -c /etc/nginx/minecraft-udp.conf
と打つと、Nginxが先ほど書いたminecraft-udp.confの設定を適用して動いてくれる。
(/usr/sbin/nginxの部分は環境により異なる可能性あり)
経過
稀に通信が不安定になることがあるが、よく動いてくれている。