ログインページや管理画面など、セキュアにしたいページにだけ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;
と書くと、それ以降のマッチングは行われないので、書いておくといいですね。