今回は、久しぶりにサーバーの設定を変更した。

新しいサイトも運用してみたくなったので、リバースプロキシの設定をやってみることにする。

今まで、サーバーソフトとしてはApacheを使用してきたが、nginxのほうが性能がいい部分もあり使いやすい(参考)という噂を聞いたので、両者を共存させることにした。共存のため、nginxをフロントにして、apacheで今まで動かしてきたowncloudやwordpressはそのままにすることにする。

Nginxのリーバスプロキシ化(Apacheと共存)https://qiita.com/mike-ayumu/items/5f255bab07606759a8e5

nginxの設定

まずは、一旦apacheを止めてから、aptでインストールする。

# service apache2 stop
# apt install nginx

それから、apacheにプロキシするサーバーの設定を行う。セキュリティ向上のため、httpはhttpsにリダイレクトさせているが、その設定も行う。

/etc/nginx/conf.d/にserver.confとでも名前をつけた設定ファイルを用意し、サーバーを建てる。

// /etc/nginx/conf.d/reverse_proxy.conf内に追記する
server {
  listen 80;
  server_name makit0sh.tk;
  if ($http_x_forwarded_proto != https) {
    rewrite ^(.*)$ https://makit0sh.tk$1 permanent;
  }
}
server {
  listen 80;
  server_name www.example_1.com;
  return 301 https://makit0sh.tk$request_uri;
}
server {
  listen 443;
  ssl on;
  server_name makit0sh.tk;
  ssl on;
  ssl_certificate /PATH/to/your/cert;
  ssl_certificate_key /PATH/to/your/cert;
  ssl_protocols TLSv1 TLSv1.1 TLSV1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 5m;
  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;
  }
}

これで、80ポートと443ポートに来た通信が8080ポートにリバースプロキシされる。

Apacheの再設定

Apache側でも若干の再設定が必要となる。

Apacheとnginxで同じポートをListenするわけには行かないので、Apacheは8080ポートと8443ポート(SSL)で動作するようにする。そのため、/etc/apache2/site-enabledに設定されているvirtual hostのポートをすべて変更し、リダイレクトループを防ぐためにリダイレクト系のコマンドをすべてコメントアウトする。また、/etc/apache2/ports.confも変更する。

WordPressの設定

このままだと、wordpress側でリダイレクトの不具合が生じるので、wp-config.phpの頭に以下を追記する。

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
    && $_SERVER['HTTP_X_FORWARDED_PROTO'] === "https") {
  $_SERVER['HTTPS'] = 'on';
}

define('FORCE_SSL_LOGIN', true);
define('FORCE_SSL_ADMIN', true);

これで、一通りnginxでのリバースプロキシでapacheが動くようになる。

Let’s Encryptの設定

https://www.yoheim.net/blog.php?q=20171204
を参考に、証明書を取り直した。

# certbot certonly --webroot -w /path/to/your/www/root -d your.server.name

One thought on “自作サーバー管理記録 Vol.12 (nginx によるリバースプロキシ)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください