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
created: