kobalab.net ではWebサーバに Apache を使用していましたが、今後WebSocketを使用したアプリを配置する可能性があることを考慮して、nginx に乗り換えました。Apacheで配信していたコンテンツは
に分類できます。1 はnginxで直接配信、2 はnginxをリバースプロキシにしてApacheに連携*3、3 はnginxをリバースプロキシにして直接連携 としました。
$ sudo yum -y install nginx
$ sudo systemctl enable nginx
$ sudo systemctl start nginx
設定ファイルは /etc/nginx/ に配置されているのでこれを修正します。
$ sudo nginx -t
で設定ファイルのチェックが行えます。
設定ファイルは http / server / location の階層構造になっており、http がWebサーバ全体*4、server が仮想サーバ(HTTP/HTTSは仮想サーバ相当)、location がURLに対応します。
http / server まではメインの設定ファイルである nginx.conf に記述し、location はファイルを分けて記述するのがよいでしょう。
server レベルの server_name に設定します*5。
http {
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name kobalab.net;
}
}
http レベルに設定します。 log_format でフォーマットを定義し、access_log で適用します。
http {
log_format common '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent';
access_log /var/log/nginx/access.log common;
}
server レベルに設定します。 デフォルトで設定されているカスタムのエラーページの出来が ひどすぎる ので、使わないようにします。
http {
server {
# error_page 404 /404.html;
# location = /404.html {
# }
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
}
}
HTTPSに対応した server 内のコメントを外し、SSL証明書と秘密鍵の配置場所を設定します。
http {
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name kobalab.net;
ssl_certificate "/etc/nginx/ssl/cert.pem";
ssl_certificate_key "/etc/nginx/ssl/key.pem";
}
}
HTTP(HTTPSではない)に対応した server に設定します。
http {
server {
rewrite ^(.*)$ https://kobalab.net$1 permanent;
}
}
location ごとに設定します。 /majiang に /home/www/majiang を割り当て、文字セットに utf-8 を指定し、CSSとJavaScriptはgzip圧縮して送信します*6。
location /majiang {
alias /home/www/majiang;
charset utf-8;
gzip on;
gzip_types text/css application/javascript;
}
転送先に送信する追加ヘッダを定義する必要があります*7が、この設定は server レベルで行う必要があります。
http {
server {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
Apacheはポート 8080 で動作しているものとします。Apache側はおそらくはリバースプロキシからアクセスされることを想定していないので、nginxでのURLと ApacheでのURLは一致させた方がよいでしょう。圧縮や文字コードの指定はApacheに任せます。
トップページの場合。
location / {
proxy_pass http://127.0.0.1:8080;
}
XiuMaiの場合。
location /xiumai {
proxy_pass http://127.0.0.1:8080/xiumai;
}
Node製のサービスは個別にサーバ化されているので基本的にURLは一致しません。なので書き方が微妙に異なります。 location と proxy_pass の末尾の / に注意してください。
天鳳牌譜変換サーバの場合。
location /majiang/tenhou-log/ {
proxy_pass http://127.0.0.1:8001/tenhou-log/;
gzip on;
gzip_types application/json application/xml;
}
LiuLianの場合。
location /liulian/ {
proxy_pass http://127.0.0.1:3571/;
gzip on;
gzip_types text/plain text/css
application/javascript application/json application/xml;
}
設定を反映するためにnginxを再起動します。
$ sudo systemctl restart nginx.service