この記事にはプロモーションが含まれていることがあります

Nginxでリバースプロキシする方法

IT

WebサーバーソフトのNginx読み方エンジンエックス)ですが、普通にWebサーバとして使う以外にもリバースプロキシサーバーとして使うとこんなことができるようになります。

  • 80番ポート以外で起動したWebサービスの入り口を80番ポートにする
  • Webサービスへのアクセスログを簡単に記録できる

Webサービスの入り口を80番ポートにするのはなぜ?

通常、Webサーバーの通信で使うHTTPは80番ポートを使って通信しますが、1024番以下のポートは特権アカウントでないと利用できないという制約があり、アプリケーションサーバなどは1024番以降のポートで動かすことが多いです。

例えば、Tomcatとか8080番で起動したりすることが多いです。開発中は8080で良いのですが、正式なWebサービスとしてリリースする時には80番で受け付けるようにしないと、URLに後ろにポート番号を指定しないと接続できません。

アプリケーションサーバ自体を80番でリクエスト待ちするように起動すればよいのでは?

というのはその通りですが、特権アカウントでアプリケーションサーバを動かすと万が一セキュリティに問題があった場合、外部から攻撃されてしまいます。

OSコマンドインジェクションなんてやられてしまうとサーバを乗っ取られてしまいます

他にも静的コンテンツはキャッシュさせたり、rewriteでURL書き換えして振り分け先のアプリケーションサーバを分散させたり、、、といろいろなことができます。

多機能でかつ高速にリクエストをさばけるnginxを挟むメリットは他にもたくさんありますが、ここでは紹介しきれないため、気になった方は最後に私のお気に入り本を紹介していますのでそちらご覧ください。

Nginxを経由させる

例えば、アプリケーションサーバ8080番ポートで動かしているけれど、外部からのリクエストはHTTP(80番ポート)で受け付けたいという場合は、Nginxをリバースプロキシとして利用することで実現できます

なぜNginxなのかというと、最近のLinuxのサーバーではほとんど標準でセットアップ済みなので、設定ファイルをちょっと書き換えるだけですぐに利用できるからです。

もし、インストールされていない場合でもパッケージ管理ツールを使ってすぐにインストールできます。

Debian系
# sudo apt install nginx
Redhut系
# sudo yum install nginx

あとは、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
ばったん
ばったん

ばったんのオススメ書籍紹介コーナー!

おすすめ書籍の紹介コーナー

もっとNginxを詳しく知りたい方にはこちらの2冊が私のオススメです。
Nginxの基礎的なところから各種設定までが学べる入門書です。

持ち運びに便利なポケットリファレンス。
これを持ち歩けばいつでもNginxをチューニングできますね。

コメント

タイトルとURLをコピーしました