show log include yuh

勉強したことの復習を兼ねて、IT関係(ネットワーク/サーバ/アプリケーション)についてまとめてます。たまに趣味のこと

スポンサーリンク

CentOSにおけるnginxインストールと各設定

概要

WebサーバといえばApacheが有名ですが、最近流行りにnginxについて紹介します。
ベンチマークを取ったときもこちらの方が高い数値を叩きだしていました。
※ちなみにベンチマークは"ab"コマンドを使っています。
今回記載するのは以下の設定です。
・インストール
・public_htmlの有効化
SSLの設定
PHP
・自動更新設定
・ベーシック認証
・nginxで503エラーが発生した場合

環境

CentOS 6.5

nginxインストール

レポジトリ追加

rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

パッケージインストール

yum install nginx

起動/停止/再起動コマンド

service nginx start
service nginx stop
service nginx restart

public_htmlを有効にする

vi /etc/nginx/sites-available/default
"location" の設定が色々ある場所に、以下の行を追加

  location ~ ^/~(.+?)/(.*)$ {
      alias /home/$1/public_html/$2;
  }

SSLではsecure_htmlに変更しssl.confで記入する

SSL設定

SSL証明書の発行

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

コンフィグ設定

vi /etc/nginx/conf.d/ssl.conf

 server {
    listen       443;
    server_name  x.x.x.x; ←ここをIPにしないとwikiのリンクがうまくいかない
    ssl                  on;
    ssl_certificate      /etc/nginx/conf.d/server.crt;
    ssl_certificate_key  /etc/nginx/conf.d/server.key;
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    location / {
        root   html;
        index  index.html index.htm;
    }
 }

PHPのインストール

peclコマンド使うので、必要なパッケージをインストール

yum install php-pear.noarch
yum install httpd-devel
yum install php-devel

php-fpmの設定(標準のリポジトリにはphp-fpmがないため、REMIレポジトリを追加する)

wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -ivh remi-release-6.rpm
yum install php php-fpm php-devel php-cli php-xml php-mbstring php-gd --enablerepo=remi
yum --enablerepo=remi install mysql mysql-server php php-fpm php-devel php-cli php-xml php-mysql php-mbstring php-gd

nginxのPHP設定

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

    location ~ \.php$ {
        root /home/yunabe/ssl;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        #fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

初期設定ではユーザーがApacheなのでnginxに変更しnginxで変更したUNIXソケットと拡張子の設定を行う

vi /etc/php-fpm.d/www.conf

user = nginx ←ユーザーを変更
group = nginx ←グループを変更
listen = /var/run/php-fpm/php-fpm.sock ←UNIXソケットを利用
security.limit_extensions = .php .html ←.htmlを追加
php_flag[display_errors] = on ←PHPのエラーを出力  

vi /etc/php.ini

date.timezone = Asia/Tokyo ←タイムゾーンを設定

php-fpm起動

service php-fpm start

SE linux無効化

sudo setenforce 0

高速化とベンチマークツール

apcインストール

yum install php-pecl-apc

abコマンドでベンチマークを取る場合

yum install httpd-tools ab -n 1000 -c 100 *.*.*.*

自動更新

yum-cronを導入し自動的にソフトウェアを更新

yum install yum-cron
service yum-cron start

自動起動の設定

chkconfig yum-cron on

php-fpmの起動

/etc/init.d/php-fpm start

自動起動の設定をしておく

chkconfig php-fpm on

nginxをリロードし、変更した設定を反映させます

sevice nginx restart

ベーシック認証

必要パッケージをインストール

yum install httpd-tools

nginxの設定

vi /etc/nginx/conf.d/default.conf
htpasswd -c /etc/nginx/.htpasswd <user name>

 location ~ ^/administrator/* {
   auth_basic "Restricted";
   auth_basic_user_file htpasswd;
   proxy_pass http://backend.example.com; # as you like
 }

番外 〜nginxで503エラーが発生した場合〜

再起動した途端にnginx connect() to unix:/var/run/php-fpm/php-fpm.sock failed (13: Permission denied) while connecting to upstreamとエラーが吐かれており、ずっとbad 503 gatewayが表示される場合がある
原因は、 php-fpm.sock のパーミッションがおかしいようです。

php-fpm.sock があるフォルダへ移動

cd /var/run/php-fpm

パーミッションを 666 に変更

chmod 666 php-fpm.sock

www.confファイルを探す
find / -name '*www*conf*' -print

見つかったファイル /etc/php-fpm.d/www.conf を編集(46あたり)

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
;                 mode is set to 0666
;listen.owner = www-data
;listen.group = www-data
listen.mode = 0666(先頭の";"を外し、このように設定する。)

再起動を行う

/etc/init.d/nginx restart
/etc/init.d/php-fpm restart

エラーを吐かず表示されていれば完了です。