DelegateからNginxへのリバースプロキシ切り替え

現状ではDelegateをリバースプロキシとして利用しているのだが、サーバー変更に伴ってNginxへと変更することとなった。

そこでプロキシ設定を行ったが、そのように動作しなかった。

server{
    server_name    journal.reasonset.net;

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location / {
        proxy_pass http://path.to.blog/;
    }
}

これは少し複雑な問題のようだ。

WordPress上でサイトアドレスとしてjournal.reasonset.netを設定した場合、301ループとなりjournal.reasonset.netがリクエストされ続ける。
サイトアドレスを設定しなければDelegateでは動作する。

一方で、Nginxでは「無効なURLです」とrejectされてしまう。

これは恐らくDelegate上でHostヘッダを明示していないため、値としてプロキシが要求する際のpath.to.blogが使われるのに対して、Nginxでは明示しなくてもjournal.reasonset.netを要求するという違いからくるのだろう。

解決方法はふたつある。

ひとつはWordPress上でサイトアドレスにjournal.reasonset.netを設定し、
Delegateにおいても

HTTPCONF=kill-qhead:Host
HTTPCONF=add-qhead:Host:journal.reasonset.net

とするか、もしくはNginx上で

proxy_set_header    Host    path.to.blog;

とするかだ。

Blink系ブラウザのSEGV(Core Dump, Memory Corruption)について

Linux上で特定のユーザーにおいてBlink系のブラウザ(Chromium, Opera, Vivaldi等)全てでページクラッシュする、という問題に遭遇している。

この問題は「再現したもの」だか、再現が不定で、特定には至っていない。

状況としては、いずれのブラウザにおいてもページクラッシュを発生する。発生しやすいページはある(最も発生しやすいのはねとらぼであり、Facebookも非常に発生しやすい)が、常に発生するわけではなく、F5連打で解消することもある。 発生タイミングも一定ではなく、すぐにクラッシュすることもあれば、閲覧している間にクラッシュすることもあるし、操作中にクラッシュすることもある

クラッシュメッセージは以下。

../../third_party/tcmalloc/chromium/src/free_list.h:118] Memory corruption detected. 
Received signal 11 SEGV_MAPERR 000000000039
#0 0x563bd9056f06 <unknown>
#1 0x563bd90572b9 <unknown>
#2 0x2af9899f3940 <unknown>
#3 0x563bd7695660 <unknown>
#4 0x563bd7698f62 <unknown>
#5 0x563bdd769f4a <unknown>
#6 0x563bd90e52f9 malloc
#7 0x563bd95f1019 <unknown>
#8 0x563bd9817c22 <unknown>
#9 0x563bd9817f14 <unknown>
#10 0x563bd96a3348 <unknown>
#11 0x563bd96a3617 <unknown>
#12 0x563bd96a4112 <unknown>
#13 0x563bd96a4d13 <unknown>
#14 0x563bd96a5542 <unknown>
#15 0x563bd9648996 <unknown>
#16 0x563bd960b2a4 <unknown>
#17 0x563bd9691067 <unknown>
#18 0x563bd981f3ed <unknown>
#19 0x563bd960f5e5 <unknown>
#20 0x563bd960f69d <unknown>
#21 0x563bd9ca0268 <unknown>
#22 0x563bd9c9f1bb <unknown>
#23 0x563bd9ca0c6b <unknown>
#24 0x563bd9ca0fad <unknown>
#25 0x563bd9ca07db <unknown>
#26 0x563bd9ca3fbe <unknown>
#27 0x563bd9ca2e0f <unknown>
#28 0x563bd9ca34f3 <unknown>
#29 0x563bd9ca3639 <unknown>
#30 0x563bd9cd4664 ../../third_party/tcmalloc/chromium/src/free_list.h:118] Memory corruption detected. 

このバグのややこしさは以下の通りだ

  • 特定ユーザーでしか発生しない
  • ユーザー固有のファイルを全て削除しても発生する
  • システムを再インストールした場合でもホームディレクトリを全て書き戻すと発生する
  • プロファイルやソフトウェアに関係なく発生する
  • 発生していないユーザーを、ファイルリネームとvipwを使ってすり替えても発生する
  • 特定ユーザー固有のこととして、ホームディレクトリ以下に別ファイルシステム(btrfs)をマウントしているが、straceで見てもそのファイルシステムへのアクセスはない
  • 再現条件がランダムに見える
  • この事象自体は以前にも発生したことがある

トレースログを見ても解決にはつながらず、かなりお手上げである。

幼少プログラマは大卒プログラマに追い越される運命にあるのは本当か

Twitterでこんな発言が軽くバズった。

Togetter

2歳からプログラミングを始めた幼少の転載で、今はそうでもない私が反論しよう。

基本的にプログラミングというのは、素質の問題と、経験の問題がある。
幼少からピアノを習っている子は音楽の授業なんてりんごが食べ物であると習うくらい退屈なことだが、普通の子にとっては旋律的短調だの弱起だの言われても呪文でしかない。
大学の情報科でも学生のレベルは天から地まで様々だ。

私には似た境遇の友人がいた。
私は勉学以外を求めて音楽家になり、彼は勉学を求めて一流大の情報科に行った。
私達は大学の勉強は私達のレベルには届かないと考えていたし、事実彼は大学での学びはひたすらに消化し、自身の努力でレベルを上げた。

私はコンピュータに関する努力を怠ったが、大学卒業時点ではまだ私が優位だった。

そもそもプログラミングの世界では、教わることでできるようになるレベルはまだスタート地点にも立っていない。それはアビバの生徒レベルだ。
だから、独学か、誰かに教わっているかということは瑣末なことで、その気になれば1年で埋まる話でしかない。というより、教わらなければ学べない人は、多分先は知れている。好奇心で自分から動かないプログラマなんて、雑魚だからだ。

ただし、環境が許さず関心も失って一度はドロップアウトした私のように、努力を続けることは当たり前に差になる。慢心し、努力を放棄すればやがては脱落するのはどの世界でも同じだ。