huruyosi’s blog

プログラミングとかインフラとかのメモです。

nginxを使って、WordPressとPlay frameworkへのリバースプロキシー

目的

サイトを運営するにあたり、製品紹介や案内などを WordPressで管理し、製品の実体を Play frameworkで実装することなりました。 一つのサイトとして見せるために、同じサーバ内で稼動している WordPress と Play framework へのリバースプロキシーをnginxで実現します。

パスが「/」のTOPページと製品紹介の /product 配下をWordPressに転送し、それ以外を Play frameworkに転送します。

TCP/IPのポート番号はそれぞれ、 nginxが80番、WordPressが8003番、Play frameworkが9003番です。

nginxの設定

  server {
    listen      80;
    server_name prod.example.com;

    proxy_set_header  X-Real-IP       $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host            $http_host;
    # proxy_redirect    true;
    proxy_max_temp_file_size          0;

    location = / {
      proxy_pass http://www.xxx.yyy.zzz:8003;
    }
    location ^~ /product/ {
      proxy_pass http://www.xxx.yyy.zzz:8003;
    }
    location / {
      proxy_pass http://www.xxx.yyy.zzz:9003;
    }
  }

proxy_set_header Host $http_hostがないとWordPressでリダイレクトの無限ループが発生します。

WordPressの設定

WordPressは dockerコンテナを用意しました。dockerコンテナには apachemariaDBをインストールし、WordPressが利用できる状態になっています。

サブディレクトリにインストール

WordPressはサブディレクトリ /product にインストールして、/WordPressフロントページが表示されるようにします。 seo.siyo.org

ログインのURLは /product/wp-login.phpになり、cssなどは /product/wp-includes/css/admin-bar.min.css?ver=4.2.1になります。

パーマリンクの設定

カスタム構造にして、設定値を「/product/%category%/%postname%/」にしました。 「/feed」などのRSSフィードなどには対応できませんが今回は提供しないのでヨシとします。

Play frameworkの設定

ポート番号以外は特段の設定変更はありません。