概要
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
エラーを吐かず表示されていれば完了です。