読者です 読者をやめる 読者になる 読者になる

うまいぼうぶろぐ

linuxとhttpdとperlのメモ

big-ipで帯域制御 Bandwith ControllerとRate Shaping

big-ip

Bandwith Controller

Bandwidth controllers のほうが最新機能のようなのでこっちのがいいかも
Rate Shapingの後継機能のようで、共存はできない。
(どこにも割り当てていないRate Shapingの設定すら存在してはいけない)

Acceleration - Bandwith Controller

VirtualServer
advancedにしてBandwith Controllerを選択

dynamicにするとper user で設定できるみたいだけど、
そのbandwidth controller設定はvirtual serverに適用できなかった。

iruleで適用

拡張子で適用する例
https://devcentral.f5.com/wiki/iRules.BWC__policy.ashx

when HTTP_REQUEST {
  if { [HTTP::path] ends_with ".mp4" } {
    BWC::policy attach bandwidth_test1
  }
}

virtualhost名で振り分ける例

  switch -glob [string tolower [HTTP::host]] {
    "www1.example.com" {
      BWC::policy attach bandwidth_test1
    }
    "www2.example.com" {
      BWC::policy attach bandwidth_test2
    }
  }

Rate Shaping

Acceleration - Rate Shaping

http://www.f5networks.co.jp/shared/pdf/BIG-IP_TB_Rate_Shaping.pdf

適用する箇所
VirtualServer
PacketFilter
iRule

一番使うのはVirtualServerかな

VirtualServer
Acceleration - Rate Class

ガチガチに制限せず、バーストトラフィック発生時に少し余裕を持たせるのであれば
Rate 10Mbps
Ceiling 50Mbps
Burst size 5MByte
とかにすれば良さげ?(数字は適当)

awsのIP一覧

aws

https://ip-ranges.amazonaws.com/ip-ranges.json

jsonで返ってくるのでjq使うと良い。

ex: cloudfront のip prefixだけ抜く

curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service == "CLOUDFRONT") | .ip_prefix'

13.32.0.0/15
13.54.63.128/26
34.195.252.0/24
35.162.63.192/26
52.15.127.128/26
52.46.0.0/18
52.52.191.128/26
52.56.127.0/25
52.57.254.0/24
52.66.194.128/26
52.78.247.128/26
52.84.0.0/15
52.199.127.192/26
52.212.248.0/26
52.220.191.0/26
52.222.128.0/17
54.182.0.0/16
54.192.0.0/16
54.230.0.0/16
54.233.255.128/26
54.239.128.0/18
54.239.192.0/19
54.240.128.0/18
204.246.164.0/22
204.246.168.0/22
204.246.174.0/23
204.246.176.0/20
205.251.192.0/19
205.251.249.0/24
205.251.250.0/23
205.251.252.0/23
205.251.254.0/24
216.137.32.0/19

sshuttle でssh使って簡単vpn

ssh

https://github.com/apenwarr/sshuttle


ポートフォワードだと個別にport設定したり、
ブラウザのプロキシ設定いじらないとダメだけど
sshuttle の場合、iptables(macだとpfctl ?)で特定のnetwork宛の通信を
ssh経由にねじまげてくれるのでvpnのように使える。素晴らしい。

VMWareの仮想マシンのdiskを縮小してpartitionを削除する

vmware

https://www.experts-exchange.com/articles/12938/HOW-TO-Shrink-a-VMware-Virtual-Machine-Disk-VMDK-in-15-minutes.html

vCenterからいじっただけでは縮小されないので。
linux VMの対応。N GBからM GBに縮小する例。
1. 削除するpartitionをumountしてfstabから消す
2. partitionを削除(これしなくて良いかも)
3. 仮想マシンをshutdown
4. データストアの/vmname/vmname.vmdk を開く
flat.vmdkの行を変更する。
N GBの場合
1024 * 1024 * 1024 * N / 512 の値になっているので
1024 * 1024 * 1024 * M / 512 を計算してその値に変更する

# 50GB
RW 104857600 VMFS "vmname-flat.vmdk"
# 30GB
RW 62914560 VMFS "vmname-flat.vmdk"

5. 仮想マシンのデータストアを移行する

これでvmname-flat.vmdkのサイズが変更後のサイズになった。

共用サーバの接続制限で良さげなapache module - mod_vhost_maxclients

apache

ペパボの中の人さまさま。

virtualhostごとに同時アクセス数や帯域を制限するmoduleにmod_cbandがあったけど
オーバヘッドが大きいのか、設定値の30%しか速度がでないなどややわかりにくかった。

mod_vhost_maxclientsは以下のことができる。
virtualhostごとの同時アクセス数、
1IPからのアクセス数、
制限を除外する拡張子の設定、
制限しないけどログ出力だけする、など

SSLアクセラレータ(reverse proxy)配下のnginxのcache_key

SSLアクセラレータ配下のnginxで
http、httpsで個別のキャッシュにしたいときに、
この設定をいれると、一見$schemeでhttp/httpsに振り分けられて
出来そうに見えますが、このままだと同じキャッシュになります。

proxy_cache_key "$scheme://$host$request_uri";

fastcgi_cache_key
uwsgi_cache_key
も同様

nginxに復号された状態でrequestがくるのでssl用のvirtualhostの
$schemeの中身はhttpになっています。

回避するには明示的にcache_keyにhttpsと指定する必要あり。

  • http
proxy_cache_key "$scheme://$host$request_uri";
proxy_cache_key "https://$host$request_uri";

もしくはcache用の変数を1個かまして、proxy_cache_key は同じ設定にする。
($schemeは元から定義されている変数なので別に用意)

  • http
set $cache_scheme "http";
proxy_cache_key "$scheme://$host$request_uri";
set $cache_scheme "https";
proxy_cache_key "$scheme://$host$request_uri";

SSLアクセラレータ(reverse proxy)配下のnginxで"/"なしのディレクトリにアクセスされたときのredirect

nginx

hogem.hatenablog.com

だいぶ前のだけど。どうしてもSSLのままredirectさせたい場合の解決方法。

やや強引だけど。-dでrequestがdirectoryに来て、かつ
"/"がない場合はrewriteしてhttpsに飛ばす設定

if (-d $request_filename) {
  rewrite ^/(.*[^/])$ https://$host/$1/ permanent;
}

一旦httpにredirectかかっても良い場合は、
http側のvirtualhostでhttpsにredirectさせても良い。