nginx で SSL振り分け

 ログインページや管理画面など、セキュアにしたいページにだけSSLをかける。というのを nginx でやる方法。

 たとえば、/admin 以下、 /login 以下をSSLにして、それ意外のページは非SSLにしたい場合です。細かい設定は端折って、upstream appserver でバックエンドのサーバが設定されてるときです。

    # HTTP setting
    server {
        listen       80;
        server_name  localhost;
 
        location ~ ^/(admin|login) {
            rewrite ^(.*) https://$http_host$1;
            break;
        }
 
        location / {
            proxy_pass http://appserver;
        }
    }
 
    # HTTPS setting
    server {
        listen       443;
        server_name  localhost;
 
        ssl                  on;
        ssl_certificate      server.pem;
        ssl_certificate_key  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 ~ ^/(admin|login) {
            proxy_pass http://appserver;
            break;
        }
 
        location / {
            rewrite ^(.*) http://$http_host$1;
        }
    }

 こんな感じにすると、http://host/login とかでアクセスが来ると、 https://host/login にリダイレクトされます。逆に、 https://host/top でアクセスが来ると、http://host/top にリダイレクトされます。

 break; とすると、それ以降のマッチングは行われないので、書いとくといいですね。

nginx で SSL振り分け

monit5.1.1のインストール

 CentOS5.6 で、monit5.1.1 をインストールしようとしたら、make でエラーが出てしまった。

% ./configure --prefix=/usr/local
% make
** 中略 **
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libpthread.a when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/libpam.so when searching for -lpam
/usr/bin/ld: skipping incompatible /usr/lib/libcrypt.so when searching for -lcrypt
/usr/bin/ld: skipping incompatible /usr/lib/libcrypt.a when searching for -lcrypt
/usr/bin/ld: skipping incompatible /usr/lib/libresolv.so when searching for -lresolv
/usr/bin/ld: skipping incompatible /usr/lib/libresolv.a when searching for -lresolv
/usr/bin/ld: skipping incompatible /usr/lib/libnsl.so when searching for -lnsl
/usr/bin/ld: skipping incompatible /usr/lib/libnsl.a when searching for -lnsl
/usr/bin/ld: skipping incompatible /usr/lib/libssl.so when searching for -lssl
/usr/bin/ld: skipping incompatible /usr/lib/libssl.a when searching for -lssl
/usr/bin/ld: skipping incompatible /usr/lib/libcrypto.so when searching for -lcrypto
/usr/bin/ld: skipping incompatible /usr/lib/libcrypto.a when searching for -lcrypto
/usr/bin/ld: skipping incompatible /usr/lib/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc

どうも、32bit と 64bit がごっちゃになってることが原因らしい。32bitのライブラリで64bitのコンパイルをしようとしている?のかな…?

Makefile をいじることで回避しました。

% ./configure --prefix=/usr/local
% vi Makefile

LIB = -lfl -lpthread -lpam -lcrypt -lresolv -lnsl -L/usr/lib -lssl -lcrypto

LIB = -lfl -lpthread -lpam -lcrypt -lresolv -lnsl -L/usr/lib64 -lssl -lcrypto

として、/usr/lib ではなく /usr/lib64 を使うように変更しました。これで無事コンパイルが通りました。

monit5.1.1のインストール

ssh の多段ログイン

connect を使うと、.ssh/config にちょろっと書くだけで簡単に多段ログインできます。

自分のマシン -> serverA -> serverB とつなぎたいときは、serverA に connect をインストールして置いて、自分のマシンの .ssh/config に例えば以下のように書きます。

Host serverA
   User chihaya
   HostName ***.***.***.***
 Host serverB
   User kisaragi
   ProxyCommand ssh serverA connect 192.168.1.10 %p

serverBが、外から見えないところに居ても、serverAから見えればつながります。自分のマシンの公開鍵をserverBに登録しているような場合でも、serverAに何もおかずに鍵認証が出来ます。便利です。

ssh の多段ログイン