PC-UNIXに関する記事など

Nginx をソースからインストール

Nginx とは

オープンソースのハイパフォーマンスHTTPサーバ及びリバースプロキシで、その高いパフォーマンスと安定性、豊富な機能、設定の容易さ、消費リソースの低さで知られています。
Nginxは従来のwwwサーバとは異なり、リクエストの処理をスレッドに依存していない代わりにスケーラブルな(非同期の)イベント駆動アーキテクチャを採用しています。
このアーキテクチャはメモリ使用量が少ないだけでなく、最も重要な事として、稼働時のメモリ使用量が予測可能であるということです。
Nginx は小規模な VPS から大規模なサーバからなるクラスタまで対応する拡張性を備えています。

ダウンロード

http://wiki.nginx.org/InstallJa

安定版

Nginx 1.0.12
2012年2月6日

http://nginx.org/download/nginx-1.0.12.tar.gz

インストール

nginx はインストール時に必要な機能をコンパイル時に指定します。apacheのように後からモジュールのみインストールする事はできません。
今回は /usr/local/nginx 配下にインストールします。

$ tar zxvf nginx-1.0.12.tar.gz
$ cd nginx-1.0.12


$ ./configure --prefix=/usr/local/nginx-1012 \
--user=www \
--group=www \
--pid-path=/var/run/nginx.pid \
--error-log-path=/var/log/nginx/error_log \
--http-log-path=/var/log/nginx/access_log \
--lock-path=/var/run/nginx.lock \
--with-http_ssl_module          \
--with-http_realip_module       \
--with-http_addition_module     \
--with-http_image_filter_module \
--with-http_geoip_module        \
--with-http_sub_module          \
--with-http_dav_module          \
--with-http_flv_module          \
--with-http_mp4_module          \
--with-http_gzip_static_module  \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_stub_status_module \

$ make

$ sudo make install
$ sudo ln -s /usr/local/nginx-1012 /usr/local/nginx

nginx設定ファイル

/usr/local/nginx/conf/nginx.conf

このコンフィグはポート80でlistenして起動させ /hello にアクセスがあるとバックエンドの http://127.0.0.1:8089 リバースプロクシする設定です。

nginxでの設定ファイルの書き方は他のwebサーバ(apache)等と比較しても大変分かりやすく楽に設定が書く事が出来ます。

user  www;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    upstream backend {
        server localhost:8089;
    }

    server {
        listen       80;
        server_name  localhost;

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

        location /hello {

            proxy_pass http://backend;
            proxy_redirect     off;

            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

FreeBSD用 rc.d スタートアップスクリプト

/usr/local/rc.d/nginx

#!/bin/sh
# $FreeBSD: ports/www/nginx/files/nginx.sh.in,v 1.11 2012/02/28 10:26:18 osa Exp $

# PROVIDE: nginx
# REQUIRE: LOGIN cleanvar
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable nginx:
# nginx_enable (bool):          Set to "NO" by default.
#                               Set it to "YES" to enable nginx
# nginx_profiles (str):         Set to "" by default.
#                               Define your profiles here.
# nginxlimits_enable (bool):    Set to "NO" by default.
#                               Set it to yes to run `limits $limits_args`
#                               just before nginx starts.
# nginx_flags (str):            Set to "" by default.
#                               Extra flags passed to start command.
# nginxlimits_args (str):       Default to "-e -U %%WWWOWN%%"
#                               Arguments of pre-start limits run.

. /etc/rc.subr

name="nginx"
rcvar=nginx_enable

start_precmd="nginx_precmd"
restart_precmd="nginx_checkconfig"
reload_precmd="nginx_checkconfig"
configtest_cmd="nginx_checkconfig"
gracefulstop_cmd="nginx_gracefulstop"
upgrade_precmd="nginx_checkconfig"
upgrade_cmd="nginx_upgrade"
command="/usr/local/nginx/sbin/nginx"
_pidprefix="/var/run/nginx"
pidfile="${_pidprefix}.pid"
required_files=/usr/local/nginx/conf/nginx.conf
extra_commands="reload configtest upgrade gracefulstop"

[ -z "$nginx_enable" ]          && nginx_enable="NO"
[ -z "$nginxlimits_enable" ]    && nginxlimits_enable="NO"
[ -z "$nginxlimits_args" ]      && nginxlimits_args="-e -U %%WWWOWN%%"

load_rc_config $name

if [ -n "$2" ]; then
        profile="$2"
        if [ "x${nginx_profiles}" != "x" ]; then
                pidfile="${_pidprefix}.${profile}.pid"
                eval nginx_configfile="\${nginx_${profile}_configfile:-}"
                if [ "x${nginx_configfile}" = "x" ]; then
                        echo "You must define a configuration file (nginx_${profile}_configfile)"
                        exit 1
                fi
                required_files="${nginx_configfile}"
                eval nginx_enable="\${nginx_${profile}_enable:-${nginx_enable}}"
                eval nginx_flags="\${nginx_${profile}_flags:-${nginx_flags}}"
                eval nginxlimits_enable="\${nginxlimits_${profile}_enable:-${nginxlimits_enable}}"
                eval nginxlimits_args="\${nginxlimits_${profile}_args:-${nginxlimits_args}}"
                nginx_flags="-c ${nginx_configfile} -g \"pid ${pidfile};\" ${nginx_flags}"
        else
                echo "$0: extra argument ignored"
        fi
else
        if [ "x${nginx_profiles}" != "x" -a "x$1" != "x" ]; then
                for profile in ${nginx_profiles}; do
                        echo "===> nginx profile: ${profile}"
                        /usr/local/etc/rc.d/nginx $1 ${profile}
                        retcode="$?"
                        if [ "0${retcode}" -ne 0 ]; then
                                failed="${profile} (${retcode}) ${failed:-}"
                        else
                                success="${profile} ${success:-}"
                        fi
                done
                exit 0
        fi
fi

nginx_checkconfig()
{
        echo "Performing sanity check on nginx configuration:"
        eval ${command} ${nginx_flags} -t
}

nginx_gracefulstop()
{
        echo "Performing a graceful stop:"
        sig_stop="QUIT"
        run_rc_command ${rc_prefix}stop $rc_extra_args || return 1
}

nginx_upgrade()
{
        echo "Upgrading nginx binary:"

        reload_precmd=""
        sig_reload="USR2"
        run_rc_command ${rc_prefix}reload $rc_extra_args || return 1

        sleep 1

        echo "Stopping old binary:"

        sig_reload="QUIT"
        pidfile="$pidfile.oldbin"
        run_rc_command ${rc_prefix}reload $rc_extra_args || return 1
}

nginx_precmd()
{
        nginx_checkconfig

        if checkyesno nginxlimits_enable
        then
                eval `/usr/bin/limits ${nginxlimits_args}` 2>/dev/null
        else
                return 0
        fi
}

run_rc_command "$1"

自動起動設定

/etc/rc.conf

nginx_enable="YES"

nginx 起動・ストップ・再起動

$ sudo /usr/local/etc/rc.d/nginx start
$ sudo /usr/local/etc/rc.d/nginx stop
$ sudo /usr/local/etc/rc.d/nginx restart

このエントリーをはてなブックマークに追加

トップ  »  FreeBSD  »  Nginx をソースからインストール

トラックバック(0)

トラックバックURL: http://www.omakase.org/mt/mt-tb.cgi/80

コメントする

カテゴリFreeBSDの記事一覧