WebサーバーソフトのNginx(読み方:エンジンエックス)ですが、普通にWebサーバとして使う以外にもリバースプロキシサーバーとして使うとこんなことができるようになります。
- 80番ポート以外で起動したWebサービスの入り口を80番ポートにする
- Webサービスへのアクセスログを簡単に記録できる
Webサービスの入り口を80番ポートにするのはなぜ?
通常、Webサーバーの通信で使うHTTPは80番ポートを使って通信しますが、1024番以下のポートは特権アカウントでないと利用できないという制約があり、アプリケーションサーバなどは1024番以降のポートで動かすことが多いです。
例えば、Tomcatとか8080番で起動したりすることが多いです。開発中は8080で良いのですが、正式なWebサービスとしてリリースする時には80番で受け付けるようにしないと、URLに後ろにポート番号を指定しないと接続できません。
アプリケーションサーバ自体を80番でリクエスト待ちするように起動すればよいのでは?
というのはその通りですが、特権アカウントでアプリケーションサーバを動かすと万が一セキュリティに問題があった場合、外部から攻撃されてしまいます。
他にも静的コンテンツはキャッシュさせたり、rewriteでURL書き換えして振り分け先のアプリケーションサーバを分散させたり、、、といろいろなことができます。
多機能でかつ高速にリクエストをさばけるnginxを挟むメリットは他にもたくさんありますが、ここでは紹介しきれないため、気になった方は最後に私のお気に入り本を紹介していますのでそちらご覧ください。
Nginxを経由させる
例えば、アプリケーションサーバを8080番ポートで動かしているけれど、外部からのリクエストはHTTP(80番ポート)で受け付けたいという場合は、Nginxをリバースプロキシとして利用することで実現できます。
なぜNginxなのかというと、最近のLinuxのサーバーではほとんど標準でセットアップ済みなので、設定ファイルをちょっと書き換えるだけですぐに利用できるからです。
あとは、Nginxの設定ファイルにリバースプロキシの設定を追加してNginxを再起動すればOKです。
serverセクションの中に次のように location / プロキシ設定セクションを追加します。
これはNginxがポート80番で受け付けたリクエストをすべて proxy_pass で指定したURLに転送するという設定です。転送先は適宜書き換えてください。
ついでにlogセクションにログファイルを指定することでアクセスログやエラーログを記録できます。
server {
listen 80;
server_name _;
location / {
# Reverse Proxy Settings
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080;
# Logs
access_log /var/log/nginx/proxy_access.log;
error_log /var/log/nginx/proxy_error.log;
}
}
Nginx再起動方法です。rootなどの特権ユーザで実行する必要があります。一般ユーザの場合は、sudoしてください。
# systemctl restart nginx
ばったんのオススメ書籍紹介コーナー!
コメント