0%

DevelopWEB開発・運用ノウハウ

Posted:2018.05.10

Nginxをリバースプロキシサーバーに使ってApacheといっしょに運用する

ウェブサイトの高速化などパフォーマンスが重視されるにあたって、徐々にNginxのシェアが大きくなりつつありますが、動的サイトなどはApacheの方が強いと聞きます。今回はNginxをリバースプロキシとして使い、Apacheとの並行運用でイイトコどりをしたサーバー環境を構築していきたいと思います。

 

Nginxとリバースプロキシ

NginxはApacheと同じくWebサーバーになるのですが、Apacheの場合、大量の同時アクセスに対応しきれなくなる、いわゆる「C10K問題」が懸念されるようになってきました。対するNginxはたくさんのリクエストに対して高速に処理できたりとパフォーマンス面での強みがあります。

 

またWebサーバー以外にもいろんな用途に活用でき、そのうちの1つがリバースプロキシサーバーとしての使用方法になります。

 

リバースプロキシとは、クライアントとWebサーバーの間に中継点としてのサーバーを置き、そのサーバーがクライアントのリクエストを受け付け、Webサーバーへ通信することになります。ちょうどWebサーバーの手前にサーバーがあるようなイメージです。ちなみに1つのリバースプロキシサーバーから複数のWebサーバーへ通信することも可能です。

 

Nginxをリバースプロキシサーバーに使ってApacheといっしょに運用する

 

このようなリバースプロキシサーバーを使うことで、サーバーの負荷を分散させたり、Webサーバーの特定を防ぐことができセキュリティ性も向上します。今回はクライアントからのリクエスト処理に強いNginxをリバースプロキシサーバーに使うことで、それぞれのサーバーのメリットを活かすことができます。

 

NginxをリバースプロキシサーバーにしてApacheと連携させる

では実際にNginxをリバースプロキシとしたサーバー環境を構築していきます。今回はVPSサーバーですでにApacheのバーチャルホストで複数サイトを運用している前提で進めていきます。これについて詳しくは過去記事「VPSでWordPressサイトを運用するサーバー構築(16)〜HTTPサーバーのバーチャルホスト設定〜」をご覧ください。

 

まずは、Nginxのインストールですが、それに伴いリポジトリを追加しておきます。下記コマンドで所定のディレクトリまで移動し、リポジトリ用ファイルを新規作成したら下記の内容を記述します。(CentOS7の場合)

# cd /etc/yum.repos.d
# vim nginx.repo

// /etc/yum.repos.d/nginx.repo内に追記する
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

 

リポジトリ追加の作業が終わると、続けてNginxのインストールを行います。インストールが完了したら、バージョンを確認しチェックしておきます。

# yum install nginx

// バージョン確認
# nginx -v

 

一旦Nginxを立ち上げて正常に動作するかを確認するため、Apacheを停止してからNginxを起動させます。

// Apacheの停止
# service httpd stop

// Nginxの起動
# service nginx start

 

Nginxが起動できれば「http://IPアドレス」にアクセスし下記のようなNginxのデフォルトページが表示されるかを確認します。

 

Nginxをリバースプロキシサーバーに使ってApacheといっしょに運用する

 

続けて、Nginxでの設定ファイルにリバースプロキシの設定を行なっていきます。まずは設定ファイルがある場所まで移動し、リバースプロキシ用の設定ファイルを新規作成します。その中に下記のような指定を行います。URL正規化などのリダイレクトも必要に応じて設定しておきます。

# cd /etc/nginx/conf.d/
# vim reverse_proxy.conf

// /etc/nginx/conf.d/reverse_proxy.conf内に追記する
server {
  listen 80;
  server_name example_1.com;
  return 301 https://example_1.com$request_uri;
}
server {
  listen 80;
  server_name www.example_1.com;
  return 301 https://example_1.com$request_uri;
}
server {
  listen 80;
  server_name example_2.com;
  return 301 https://example_2.com$request_uri;
}
server {
  listen 80;
  server_name www.example_2.com;
  return 301 https://example_2.com$request_uri;
}
server {
  listen 443 ssl;
  server_name example_1.com;
  ssl on;
  ssl_certificate /PATH/example_1.com/fullchain.pem;
  ssl_certificate_key /PATH/example_1.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSV1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  client_max_body_size 20M;
  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect off;
  }
}
server {
  listen 443 ssl;
  server_name example_2.com;
  ssl on;
  ssl_certificate /PATH/example_2.com/fullchain.pem;
  ssl_certificate_key /PATH/example_2.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSV1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 10m;
  client_max_body_size 20M;
  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://127.0.0.1:8080;
    proxy_redirect off;
  }
}

 

そして、Apacheの設定ファイルのポート番号を変更していきます。NginxもWebサーバーのため、HTTP通信では80番ポート、HTTPS通信では443番ポートを使用するので、競合しないようにApache側のポート番号を変更しておきます。

 

ここではHTTPを80番から8080番に、HTTPSを443番から8443番に変更しています。それぞれの設定ファイルを編集します。(念のためバックアップを取っておきます)

// HTTP通信用のポート番号変更
# cd /etc/httpd/conf/
# cp httpd.conf httpd.conf.copy
# vim httpd.conf

Listen 80
→ Listen 8080
ServerName localhost:80 
→ ServerName localhost:8080

// HTTPS通信用のポート番号変更
# cd /etc/httpd/conf.d/
# cp ssl.conf ssl.conf.copy
# vim ssl.conf

Listen 443 https
→ Listen 8443 https
<VirtualHost _default_:443>
→ <VirtualHost _default_:8443>

 

さらに、Apacheのバーチャルホストの設定でも同じようにポート番号を変更しておきます。こちらもそれぞれの設定ファイルを編集していきます。下記ではHTTPS用のバーチャルホストの設定ファイルを分けていますが適宜環境に合わせて変更します。

// HTTP通信でのバーチャルホストのポート番号変更
# cd /etc/httpd/conf.d/
# cp vhost.conf vhost.conf.copy
# vim vhost.conf

<VirtualHost *:80>
→ <VirtualHost *:8080>

// HTTPS通信でのバーチャルホストのポート番号変更
# cd /etc/httpd/conf.d/
# cp vhost-le-ssl.conf vhost-le-ssl.conf.copy
# vim vhost-le-ssl.conf

<VirtualHost *:443>
→ <VirtualHost *:8443>

 

ちなみに、バーチャルホストでリダイレクト処理を行っている場合、サイトを表示させた時にリダイレクトループの原因となるのでリダイレクト処理はNginx側で行うようにします。Apache側では削除しておくなりコメントアウトなどをしておきます。

【vhost.conf】

<VirtualHost *:8080>
  ServerName example.com
  DirectoryIndex index.php
  AddDefaultCharset UTF-8
  DocumentRoot /var/www/html/sample
  ServerAlias www.example.com
# RewriteEngine on
# RewriteCond %{HTTPS} off [OR]
# RewriteCond %{HTTP_HOST} ^www\.example\.com$
# RewriteRule ^/(.*) https://example.com/$1 [R=301,L]
   <Directory "/var/www/html/sample">
     Require all granted
   </Directory>
</VirtualHost>

<IfModule mod_ssl.c>
  <VirtualHost *:8443>
    ServerName example.com
    DirectoryIndex index.php
    AddDefaultCharset UTF-8
    DocumentRoot /var/www/html/sample
    ServerAlias www.example.com
#   RewriteEngine on
#   RewriteCond %{HTTPS} off [OR]
#   RewriteCond %{HTTP_HOST} ^www\.example\.com$
#   RewriteRule ^/(.*) https://example.com/$1 [R=301,L]
    <Directory "/var/www/html/sample">
      Require all granted
    </Directory>
    SSLCertificateFile /PATH/cert.pem
    SSLCertificateKeyFile /PATH/privkey.pem
    Include /PATH/options-ssl-apache.conf
    SSLCertificateChainFile /PATH/chain.pem
  </VirtualHost>
</IfModule>

 

上記設定が終われば、ApacheとNginxを再起動させて実際にページが表示されるかを確認します。

# service httpd restart
# nginx -s reload

 

デバッグツールなどで確認しますがレスポンスヘッダなどで、サーバーがNginxになっていればOKです。

 

Nginxをリバースプロキシサーバーに使ってApacheといっしょに運用する

 

気になるパフォーマンスですが、やはりページ読み込み速度が早くなったと体感できるくらいになりました。大体平均すると2秒前後くらいの変化がありました!

 


 

いかがでしょうか、Nginxのリバースプロキシを導入することでサイトのパフォーマンスはもちろんのこと、セキュリティや運用の拡張性などたくさんのメリットがありますのでオススメです。

 

(参考にさせて頂いたサイト)
CentOS7 に nginx導入
nginxをリバースプロキシサーバとして使う[nginx + apache]

author
この記事を書いた人オガワ シンヤ
FacebookTwitter

DesignSupply.代表 / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はチョコレートが欠かせない三十路Webクリエイター。

制作のご依頼やお問い合わせ・パートナー業務提携のご相談はこちら

デザインやウェブ制作についてのご依頼やご相談、その他お問い合わせなどもお気軽にご連絡ください。フットワークの軽さやレスポンスの早さ、また豊富な経験や知識、技術を活かした対応力といったフリーランスクリエイターの強みでクライアント様、パートナー企業様のお力になります。デザインからコーディングやWordPress実装といったウェブサイト構築はもちろん、写真撮影や動画編集、コンテンツ制作からサイト運用サポートまで一括してお任せください。

ホームページ制作のご検討やウェブ運用でお悩みの経営者様や企業のウェブ担当者様をはじめ、個人で店舗を営んでいらっしゃるオーナー様、フリーで活動されているビジネスオーナー様はもちろんのこと、リソース不足でお困りの制作会社様、またクリエイターをお探しの代理店様も大歓迎です。

コンタクトをご希望の方はお手数ですが、下記よりお問い合わせフォームのページへアクセスしていただき、必要事項を入力の上メッセージを送信してください。確認でき次第すぐに折り返しご連絡致します。

こんな記事も読まれています

コメントもお気軽にどうぞ

記事に関するご質問やご意見などありましたら下記のコメントフォームよりお気軽に投稿ください。なおメールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

CAPTCHA


ページトップへ
大阪市天王寺区のホームページ制作デザイン事務所(SOHO)DesignSupply.【デザインサプライ】