SEO対策とセキュリティで企業をバックアップします。

ITエンジニアの技術力UPをお約束します。

WORDPRESSを使う場合のよくあるマルチWP構成をnginxで対応するには

WORDPRESSを使う場合のよくあるマルチWP構成をnginxで対応するには


nginxでWORDPRESSを単体で使う際の設定はネットを探せば沢山あるが、巷でよくあるのが1つのサイトに複数のWORDPRESSをサブフォルダーにインストールしているケース。このパターンの設定事例は少ない。通常Apacheで使う場合は本体の設定を行えばサブフォルダーに設置したWPは特に特別な設定は不要だが、それ以外のWEBサーバではサブフォルダー毎に設定は必要です。また、最近のサイトは殆どがスマホ対応といえばレスポンシブでサイトを作っているが、未だにPCとスマホを分離して作っているケースも有る。大抵の場合はUser-agentで転送する方法を使っているが、ではnginxで使う場合はどう設定したらよいかわからない人も多いと思うので設定例を紹介したいと思う。もうちょっと見直せばよかったけど。。。若干冗長な設定もあるのですがご勘弁を。。。php-fpmの設定については今回省略しています。

フォルダー構成

nginx本体設定

/etc/nginx/nginx.confの編集です。

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  70;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    gzip on;
    gzip_http_version 1.0;
    gzip_types text/plain
    text/xml
    text/css
    application/xml
    application/xhtml+xml
    application/rss+xml
    application/atom_xml
    application/javascript
    application/x-javascript
    application/x-httpd-php;
    gzip_min_length 1000;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  45;   #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

仮想サーバ本体設定WORDPRESS用

/etc/nginx/conf.d/fast.confの編集です。

    server {
        listen 80;
        server_name www.testfast.net;
        rewrite ^ https://$server_name$request_uri? permanent;
    }


    server {
        listen 443 ssl http2;
        server_name www.testfast.net;
        index index.php ;
        root /var/www/html;
        access_log /var/log/nginx/access.log main;
        error_log /var/log/nginx/error.log;
        index   index.html index.php;
        charset utf-8;

        ssl_certificate      /etc/nginx/cert_2019/full.crt;
        ssl_certificate_key  /etc/nginx/cert_2019/server.key;
        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !kECDH !DSS !MD5 !EXP !PSK !SRP !CAMELLIA !SEED';
        ssl_session_cache    builtin:1000 shared:SSL:10m;
        ssl_session_timeout  10m;
        ssl_dhparam /etc/nginx/dhparam.pem;
        ssl_stapling on;
        add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';

        location / {

           index   index.php index.html index.htm;
           #User-Agentで判断してモバイルコンテンツへ転送
           if ($http_user_agent ~* "iPhone|iPod|iPad|Android|Windows.*Phone") {
                set $flag "X";
           }
           if ($request_uri !~ ^/mobile) {
                set $flag "${flag}Z";
           }
           if ($flag = "XZ") {
                rewrite ^/(.*) https://www.testfast.net/mobile/$1 last;
           }

           try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
           root /var/www/html;

           try_files $uri =404;
           expires        off;
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  $realpath_root$fastcgi_script_name;
           fastcgi_param  DOCUMENT_ROOT  $realpath_root;
           include        fastcgi_params;
           fastcgi_param  REMOTE_ADDR      $http_x_real_ip;
           fastcgi_param  HTTPS on;
           fastcgi_pass_header "X-Accel-Redirect";
           fastcgi_pass_header "X-Accel-Buffering";
           fastcgi_pass_header "X-Accel-Charset";
           fastcgi_pass_header "X-Accel-Expires";
           fastcgi_pass_header "X-Accel-Limit-Rate";
        }
        include conf.d/sub/blog.conf;
        include conf.d/sub/community.conf;


    }

/blogフォルダーにあるWORDPRESS用設定

/etc/nginx/conf.d/sub/blog.confの編集です。

   location /blog {
        root /var/www/html;

        access_log /var/log/nginx/blog.access.log;
        error_log /var/log/nginx/blog.error.log;

        try_files $uri $uri/ /blog/index.php?q=$uri&$args;

        include conf.d/sub/common.conf;
   }

/communityフォルダーにあるWORDPRESS用設定

/etc/nginx/conf.d/sub/community.confの編集です。

   location /community {
        root /var/www/html;

        access_log /var/log/nginx/community.access.log;
        error_log /var/log/nginx/community.error.log;

        try_files $uri $uri/ /community/index.php?q=$uri&$args;

        include conf.d/sub/common.conf;
   }

アクセス制御用の共通設定

/etc/nginx/conf.d/sub/common.confの編集です。

index index.php;
charset utf-8;

# アクセス拒否設定
location ~* /(wp-config|xmlrpc)\.php {
    deny all;
}

# アクセス制限設定
location ~* /wp-login\.php|/wp-admin/((?!admin-ajax\.php).)*$ {

    allow 120.xxx.10.xxx;
    allow 127.0.0.1;
    # 上記以外はアクセス拒否
    deny all;

    include conf.d/sub/fastcgi.conf;
}

fastcgi用の共通設定

/etc/nginx/conf.d/sub/fastcgi.confの編集です。

location ~\.php$ {
    fastcgi_split_path_info ^(.+\.php)(.+)$;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    include fastcgi_params;
}

タグ: , ,