ネットワーク > Webサーバー > Nginx
Nginxは、最近人気のWebサーバソフトです。Apacheの代わりに使われだしています。
nginx(「エンジンエックス」と発音) は、軽量高性能なWebサーバ/リバースプロキシであり、同時に電子メール(IMAP/POP3)プロキシである。BSD系ライセンスでリリースされている。Unix系、Linux、BSD系、Mac OS X、Solaris、Microsoft Windows(Cygwinを使用)で動作する。
#html{{
table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4048702270/vertex9-22/" target="_blank"><img src="" border="0"></a></td><td> </td><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4048702270/vertex9-22/" target="_blank">ハイパフォーマンスHTTPサーバ Nginx入門</a><br>Clement Nedelcu<br>アスキー・メディアワークス<br>2011-04-21<br>¥ 3240</td></tr></table>
}}
NginxをCentOSにソースコードからコンパイルして、手動でインストールする手順のまとめ
(参考)
Nginx最新安定版(stable)を公式サイトからダウンロードします。
(例) Stable version nginx-1.2.6
$ cd /tmp
$ wget http://nginx.org/download/nginx-1.2.6.tar.gz(wgetコマンドがインストールされていない場合は、「sudo yum install wget」)
$ tar zxf nginx-1.2.6.tar.gz
$ cd nginx-1.2.6
$ sudo useradd -s/sbin/nologin -d/usr/local/nginx -M nginx
$ sudo yum install gcc $ sudo yum install pcre pcre-devel $ sudo yum install zlib zlib-devel $ sudo yum install openssl openssl-devel
$ ./configure --prefix=/usr/local/nginx-1.2.6 --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module
$ make $ sudo make install
ln -s /usr/local/nginx-1.2.6 /usr/local/nginx
Nginxをソースからインストールした場合は、起動スクリプトが作成されないので自作します。
# vi /etc/init.d/nginx
#!/bin/sh # # nginx - this script starts and stops the nginx daemon # cf. http://www.happytrap.jp/blogs/2012/02/23/8243/ # # chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse # proxy and IMAP/POP3 proxy server # processname: nginx # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" lockfile=/usr/local/nginx/logs/nginx.lock start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac
$ sudo chmod +x /etc/init.d/nginx
$ sudo chkconfig --add nginx $ sudo chkconfig nginx onこれで、serviceコマンドでも起動・終了・再起動が実行できるようになります。
$ sudo chkconfig --list nginxこれで、
$ sudo service nginx configtest
$ sudo service nginx start
$ sudo service nginx stop
$ sudo service nginx restart
バーチャルホスト設定ファイルの置き場を作る
バーチャルホストの設定は、nginx のインストールディレクトリにある nginx.conf に記述する。
このファイルに各ドメインの設定をそのままベタ書きしてもいいのだけど、そうすると管理が煩わしくなるので、ドメインごとに設定ファイルを作り、nginx.conf から読み込ませるようにする。
まず、nginxのインストールディレクトリにドメイン毎の設定ファイルを収めるディレクトリを作る。sudo mkdir /usr/local/nginx/sites-available sudo mkdir /usr/local/nginx/sites-enabledApache2 風の構成。
sites-available にドメイン毎の設定ファイルを置き、sites-enabled からシンボリックリンクを張り、nginx.conf からは sites-enabled を読み込ませるようにする。
こういうふうにしておくメリットは、いくつかある。
・バーチャルホストの使用/不使用を簡単に切り替えられる。
・あるドメインの利用を一時的に止めるときは、単にシンボリックリンクを削除するだけで済むし、再開するときはリンクを作り直すだけでいい。
・あるドメインが別のサーバに引越す際に、設定ファイルをそのまま持ち越せる。
・ドメイン毎に設定ファイルが分かれているため、編集失敗の影響が他に及びにくい。
ディレクトリを作ったら、nginx.conf の httpセクションに次の1行を加える。include /usr/local/nginx/sites-enabled/*;記述場所は、33行目の「#gzip on;」の後あたりが分かりやすい。(serverセクションの中に入れてはいけない。)
なるほど~!(・∀・)
バーチャルホストの数が少なくて、手動で管理するなら、この手法で十分でしょう。
(=もっと多くなったら、RDBを使って管理した方が良い?)
上記の方法をちょっと手直しするなら、自分の環境だと、「/usr/local/nginx」自体がシンボリックリンクになっているので、バーチャルホストの設定ファイル置き場は、「home」ディレクトリーに「nginx」というユーザーのディレクトリーを作り、そこの置くとかが良いかな?
# cd /home # mkdir nginx # chown nginx:nginx nginx # chmod 0700 nginx
# ls -la drwx------ 2 nginx nginx 4096 Jul 14 15:06 nginx
# mkdir /home/nginx/conf/sites-available # mkdir /home/nginx/conf/sites-enabled
# vi /usr/local/nginx/conf/nginx.conf include /home/nginx/conf/sites-enabled/*;
というかんじでOK。
(Linuxコマンドの復習)
$ cp file1 file2
$ ln -s リンク元 リンク先
$ su ← サーバー管理者になる $ cd /home/nginx/conf/sites-available $ cp virtualhost_template.conf virtualhost_subdomain.conf ← テンプレートをコピーする $ chown nginx:nginx virtualhost_subdomain.conf ← 属性を変更する $ vi virtualhost_subdomain.conf ← 設定ファイルの中身を編集する
ln -s リンク元 リンク先
$ ln -s /home/nginx/conf/sites-available/virtualhost_subdomain.conf /home/nginx/conf/sites-enabled/virtualhost_subdomain.conf
$ cd /…/public_html/ ←Web用の公開ディレクトリーへ移動 $ mkdir subdomain $ chown nginx:nginx subdomain ← subdomainを利用する作業用ユーザー名(例:nginx)に合わせる
$ service nginx configtest ← 設定ファイルの文法チェック(念のため。エラー出たら中身を確認) $ service nginx restart ← 再起動
Nginxの設定ファイルを編集して、serverセクションにあるfastcgi_read_timeoutの秒数を増やせば、504 Gateway Time-outが解決するみたいです。
(参考)
解決方法
結論的にはNginxの設定ファイルでserverセクションに fastcgi_read_timeout 1000; とか追記したら行けるようになりました。
→1000秒(16分40秒)もかかる処理って、どんだけwww
server { listen 80; server_name example.com; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log info; root /var/www/nginx; # デフォルト 60秒を120秒までアップします。 fastcgi_read_timeout 120; ... }
最初に試してほしい対処法は処理の実行時間を延ばすことです。 必要な設定は以下の3つになります。 • php.ini max_execution_time = 180 • php-fpm.conf request_terminate_timeout 180 • nginx.conf fastcgi_read_timeout 180
単純に解決しない場合は、Nginxの他に、PHPやPHP-FPMの設定など、他の場所も確認する必要もありそうですね。
NginxをUbuntuにインストールのページを参照してください。