ちゃんと覚えておけよ?

忘れちゃいけない事のメモ、覚え書き

絶対出来る!さくらVPSでnginx 1.4.6 + mysql 5.5 + php-fpm 5.4でワードプレスをインストール!

■セキュリティ設定

■Firewall設定(iptables)

vi /etc/sysconfig/iptables

■80(HTTP) 21・20(FTP) 22(sshd)を解放

# firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

■iptables の再起動

/etc/init.d/iptables restart

■Nginxインストール・設定

■repo作成

# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

■nginx yum install

yum install nginx

■nginx 自動起動

chkconfig nginx on

■nginx 起動

service nginx start

ページの確認をして以下のようになればOK img-2013-02-26-14.23.501

■PHP-fpmインストール・設定

 

# cd /tmp
# wget https://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -ivh remi-release-6.rpm
# yum --enablerepo=remi install php php-fpm

■PHP-FPM 自動起動設定

chkconfig php-fpm on

■PHP-FPM 設定

cp /etc/php-fpm.d/www.conf  /etc/php-fpm.d/www.conf.org
vi /etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock

user = nginx
group = nginx

■php.iniの設定をする。

vi /etc/php.ini
default_charset = "UTF-8" ←デフォキャラ設定
post_max_size = 70M
upload_max_filesize = 60M ←1ファイルのアップロード最大サイズ
max_file_uploads = 20 ←アップロードファイル数
max_execution_time = 300 ←スクリプトの実行時間
short_open_tag = On ←ショートタグ有効
date.timezone = Asia/Tokyo
mbstring.language = Japanese

■PHP-FPMを開始

/etc/init.d/php-fpm start

■公開ディレクトリの所有者をnginxに変更

# chown -R nginx /var/www

■/etc/nginx/conf.d/default.confを開き編集

vi /etc/nginx/conf.d/default.conf

■最終設定

proxy_cache_path  /var/cache/nginx/cache1 levels=1 keys_zone=cache1:512m;
proxy_cache cache1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Server $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_valid 200 404 30m;

server {
        listen 80 default_server;
        gzip on;
        gzip_disable msie6;
        gzip_types text/css application/x-javascript;

        location ~ /\. {deny all; access_log off; log_not_found off; }
        location = /xmlrpc.php {deny all; access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                log_not_found off;
                proxy_pass https://unix:/var/run/nginx.sock;
        }

        set $do_not_cache 0;
        if ($uri ~* "\.php$") {
                set $do_not_cache 1;
        }

        set $proxy_cache_key "$scheme$proxy_host$request_uri";
//ガラケー
        if ($http_user_agent ~* "(DoCoMo|J-PHONE|Vodafone|MOT-|UP\.Browser|DDIPOCKET|ASTEL|PDXGW|Palmscape|Xiino|sharp pda browser|Windows CE|L-mode|WILLCOM|SoftBank|Semulator|Vemulator|J-EMULATOR|emobile|mixi-mobile-converter)") {
                set $proxy_cache_key "keitai::$proxy_cache_key";
        }

//スマホ
        if ($http_user_agent ~* "(Opera Mini|Android.*Mobile|NetFront|BlackBerry)") {
                set $proxy_cache_key "android::$proxy_cache_key";
        }

//タブレット
        if ($http_user_agent ~* "(Nexus 7|iPad)") {
                set $proxy_cache_key "tablet::$proxy_cache_key";
        }

//iPhoneとiPod touch
        if ($http_user_agent ~* "(iPhone|iPod)") {
                set $proxy_cache_key "iphone::$proxy_cache_key";
        }

        if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
#               set $do_not_cache 1;
                set $proxy_cache_key "$2::$proxy_cache_key";
        }

        location / {
                proxy_no_cache $do_not_cache;
                proxy_cache_bypass $do_not_cache;
                proxy_cache_key $proxy_cache_key;
                proxy_pass https://unix:/var/run/nginx.sock;
        }
}

server {
    listen       unix:/var/run/nginx.sock;
    server_name  ora.geo.jp;
    try_files $uri $uri/ /index.php;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /var/www/wordpress;
        index  index.php;
    if (-f $request_filename) {
            expires 30d;
        break;
        }
        if (!-e $request_filename) {
                rewrite ^.+?($/-.*) $1 last;
                rewrite ^.+?(/.*\.php)$ $1 last;
                rewrite ^ /index.php last;
        }
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    root /var/www/wordpress;
    expires 24h;
    log_not_found off;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   https://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/wordpress;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

設定ファイルは冒頭にあるプロキシ関連の各種設定と、2つの「server」設定で構成されている。 プロキシ各種設定 プロキシ設定でポイントとなるのは、「proxy_cache_path」と「proxy_cache_valid」である。「proxy_cache_path」ではキャッシュしたファイルが保管されるパスと、キャッシュゾーンの名前、容量を指定する。ここでは「cache1」のプロキシキャッシュ保管場所として「/var/cache/nginx/cache1」を指定し、その容量は512MB、キャッシュをファイルで格納する際にキーを1階層のディレクトリごとに分けて格納する、という設定を行っている。 「proxy_cache」では利用するキャッシュゾーンの名前を指定する。「proxy_cache_valid」はステータスコードごとにどのくらいの間キャッシュを保持するかを設定するものだ。ここではステータスコードが通常応答の「200」と、ファイルが存在しない「404」の場合30分間キャッシュを保持する、という設定になる。

WPのプラグインで「WPtouch」や「iwphone」、「ktai style」などユーザーエージェントを見てページを振り分け出来るようにUAに合わせてキャッシュを作製するように設定した。

■nginx を再起動し反映させる

service nginx restart

■Mysql 5.5 とphpMyadmin 4.1のインストールと設定

■Remiリポジトリでインストール

yum --enablerepo=remi install mysql-server php-mysql phpmyadmin

■mysqlの自動起動設定

chkconfig mysqld on

■mysql初期設定

# /usr/bin/mysqladmin -u root password 'new-pass'

■データベースにログイン

# mysql -u root -p
Enter password:(打ち込んでも表示されません)

■データベース作製

mysql> CREATE DATABASE wp;

■作ったデータベースにパスワードを設定する。

mysql> GRANT ALL PRIVILEGES ON wp.* TO wp@localhost IDENTIFIED BY "パスワード";

■データベースから離脱

mysql> quit

■mysql_secure_installation コマンドを実行できるので実行します。

mysql_secure_installation

いくつか質問されるのですが、ここでは以下のように回答しました。

Change the root password? [Y/n] n              # パスを変えるならy
Remove anonymous users? [Y/n] Y                # 匿名ユーザを削除
Disallow root login remotely? [Y/n] Y          # root ユーザでのリモートからのログインを禁止
Remove test database and access to it? [Y/n] Y # test データベースを削除
Reload privilege tables now? [Y/n] Y           # 権限テーブルをリロード

これでインストールは完了です。

■WordPressのインストール

# cd /var/www/
# wget https://ja.wordpress.org/wordpress-3.8.1-ja.tar.gz
# tar zxvf wordpress-3.8.1-ja.tar.gz
# chown -R nginx /var/www

■ページにアクセスして以下の画面が出たら完了 rewr ■404ページをキャッシュする WordPressでは404ページの処理が比較的重い。そのため、不正アタックのようなアクセスや不正URLへのアクセス、リンク切れURLへのボットアクセスも負荷となってしまう。404ページをどのようにキャッシュしておくかが負荷軽減のポイントとなるが、WordPressが出力する404ページのHTTPヘッダーでは「Cache-Control:no-cache」などのキャッシュを禁止するヘッダーが送出され、プロキシサーバーではページをキャッシュできない。そこで、プロキシ構成にする場合はWordPressのコードを変更し、404ページでこのヘッダーを送出しないよう修正しておく。具体的には、wp-includes/class-wp.phpファイルの506行目をコメントアウトする。

vi /var/www/wordpress/wp-includes/class-wp.php
                 // Guess it's time to 404.←これを検索
                 $wp_query->set_404();
                 status_header( 404 );
 //              nocache_headers();
         }

このnocache_headers()をコメントアウトすることで「Cache-Control:no-cache, must-revalidate, max-age=0」などのヘッダーが送出されず、nginxのプロキシでキャッシュされるようになる。

■プロキシキャッシュを削除できるようにする(今はプラグインあり)

ここでは「require_once( ‘./admin.php’ );」でWordPressによるアクセス制限を有効にし、続けてsystem関数でrmコマンドを発行している。「https://○○○○.com/wp-admin/clear-cache.php」といったURLにWebブラウザでアクセスしてこのスクリプトを実行すれことで、プロキシのキャッシュを削除できる。 /var/www/wordpress/wp-admin/clear-cache.php

<?php
require_once( './admin.php' );
system( "/bin/rm -rf /var/cache/nginx/cache1/*" );
?>
clear cache

■phpMyAdminの設定をする。

新規にphpmyadmin.confのファイルを作成する。

vi /etc/nginx/conf.d/phpmyadmin.conf

以下コピペして、[server_name]の部分を自分の環境に合わせる。

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

       location / {
                root /usr/share/phpMyAdmin;
                index index.php;
                }

        location ~ \.php$ {
                fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /usr/share/phpMyAdmin/$fastcgi_script_name;
                include fastcgi_params;
        }
}

nginxを再起動する。

/etc/init.d/nginx restart

「https://phpmyadmin.○○○.com」にアクセスして以下の様な画面になれば完了 phpmyadmin

Comment

*