Pages

ラベル nginx の投稿を表示しています。 すべての投稿を表示
ラベル nginx の投稿を表示しています。 すべての投稿を表示

2011/07/18

nginxのupstreamから502を対象外にする

railsをunicornでrackupする際、よくunixsocket経由でnginxをフロントに使う。
で、それをバックエンドにしてさらにNginxでロードシェアする時の設定。
 

画像:nginx-nginx-unicorn_01
 

2011/05/03

Nginxのログをmongodbに入れるために

mongoimportが便利でmongodbが柔軟なので、ログを入れたくなる。
取り急ぎWebのログでもいれちゃうか、というお話。
 

HTTPサーバのアクセスログはそれなりの解析ツールもあるんだが、あえてMongoDBに突っ込んでみよう。

2011/04/05

nginxのログをsyslogに投げる

名前つきパイプの例、古典的なやり方。

rm /var/log/nginx/access.log
mkfifo /var/log/nginx/access.log




パイプの取り出し側にはそれなりに工夫が必要だと思うが、
とりあえずnginxを起動してから。
# cat /var/log/nginx/access.log | logger -p local4.info


とすると、loggerがsyslogに投げてくれる。

1301982441 local4.info prox01 "xx.xxx.xxx.xxx - - [05/Apr/2011:14:47:21 +0900] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0""

(フォーマットは少々いじっている。)


syslog-ngならsourceに指定することもできそうだ。


ただこれをやると、nginxがパイプの処理を待つようになっちゃうので使いどころ注意。

2011/03/31

PPA版Nginxのコンフィグオプションをチェック

Ubuntu10.10(maverick)などでnginxを使う場合は、公式が用意しているLaunchPadのPPAからStableを使うのがよさそうだ。

インストールして、どんなモジュールが使えるかチェックした。

# nginx -V
nginx version: nginx/0.8.54
TLS SNI support enabled
configure arguments:\
--conf-path=/etc/nginx/nginx.conf\
--error-log-path=/var/log/nginx/error.log\
--http-client-body-temp-path=/var/lib/nginx/body\
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi\
--http-log-path=/var/log/nginx/access.log\
--http-proxy-temp-path=/var/lib/nginx/proxy\
--http-scgi-temp-path=/var/lib/nginx/scgi\
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi\
--lock-path=/var/lock/nginx.lock\
--pid-path=/var/run/nginx.pid\
--with-debug\
--with-http_addition_module\
--with-http_dav_module\
--with-http_geoip_module\
--with-http_gzip_static_module\
--with-http_image_filter_module\
--with-http_realip_module\
--with-http_stub_status_module\
--with-http_ssl_module\
--with-http_sub_module\
--with-http_xslt_module\
--with-ipv6\
--with-sha1=/usr/include/openssl\
--with-md5=/usr/include/openssl\
--with-mail\
--with-mail_ssl_module\
--add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-echo\
--add-module=/build/buildd/nginx-0.8.54/debian/modules/nginx-upstream-fair


主要なモジュールに加え、サードパーティのモジュールも入ってますね。
Fairが使えるのは嬉しいのかもしれない。

Nginx用の a2ensite, a2dissite がないのでツールを作る

最近ChefのCookbookを触っているが、Rubyをちゃんと読めるほうが都合がよいので練習がてら。

ubuntuなどのdeb系はapache httpdのサイト管理がよく作られており、サイト単位の有効無効を a2ensite, a2dissiteというツールで切り替えるように工夫がされています。

Nginxでもコマンドでサイト管理やりたいなあと思い作成。
 



使い方


3つのメソッド(サブコマンド)を持ちます、オプションなしでたたくと一応使い方を出すようにしました。


  • list:sites-available にあるコンフィグファイルをリストアップ。
    現在有効なものは+(プラス)を、無効なサイトは-(マイナス)を付与して表示。

  • enable {configfile}:sites-enabled にリンクを作成してnginxをリロード。

  • disable {configfile}:sites-enabled からリンクを削除してnginxをリロード。


 


コマンド例


ngsitectl.rb disable default

とか

ngctlにエイリアスして
ngctl enable example.com

このようにします。


リストはこんな感じで出します。
# ngctl list
- example.com
+ 8082
+ rprox.conf
+ 8081
- default
+ 8083
+ ssl_rprox.conf




リロードがいやな人はコメントアウトしたりgracefulに相当する手続きがあるのでそれを変わりに仕込みましょう。
この辺は改良の余地が大きいですね。
 

コード


自分でつかうのでGithubにも置いてます。
https://github.com/sawanoboly/optools/blob/master/ngsitectl.rb
うちはハイライトしてないからGithubのほうが見やすいですね。

そうそう、1.9.2 p180 で作っているので他のVerについては動くか見てないです。

ngsitectl.rb
#!/usr/bin/env ruby
# encording: utf-8

## Const
AvailDir = "/etc/nginx/sites-available/"
EnableDir = "/etc/nginx/sites-enabled/"


# list up all site and add "+" for enable sites.
def list(sitename)
sitesall = Dir.entries(AvailDir)

# exclude dots
sites = sitesall.select{|elem| elem != "." and elem !=".."}

# enabled sites check.
sites.each do |site|
if File.exist?(EnableDir + site) then
puts "+ " + site
else
puts "- " + site
# File.symlink(AvailDir + site, EnableDir + site)
end
end
end

def enable(sitename)
if File.exist?(EnableDir + sitename) then
puts "Site:" + sitename + " is already enabled.\nDo nothing."
elsif File.exist?(AvailDir + sitename) then
puts "enable: " + sitename
File.symlink(AvailDir + sitename, EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end

def disable(sitename)
if File.exist?(AvailDir + sitename) then
if File.exist?(EnableDir + sitename) then
puts "disable: " + sitename
File.unlink(EnableDir + sitename)
puts `/etc/init.d/nginx reload`
else
puts "Site:" + sitename + " is already disabled.\nDo nothing."
end
else
puts "Site:" + sitename + " Config not found."
end
list(sitename)
end


begin
method(ARGV[0]).call(ARGV[1])
rescue TypeError => ex then
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
rescue => ex
puts "Exception " + "#{ex.class}"
puts "#{ex.message}"
puts
puts <<"HEREDOCS"
Nginx site control script.
Usage:
list: list all available sites
enable {sitename}: enable site and reload nginx
disable {sitename}: disable site and reload nginx
HEREDOCS
end