Squidを使用するときにはここに気をつけろ!
皆さんこんにちは。Nonです。
実は私、Qittaにもしばしば投稿しておりまして、そちらがここになります。
ある時、Squid使用中に、ハマったことがありまして、今でもちょいちょいハマる場所なので、備忘録ついてでに書いておくこととしましょう。
結論
if (nt == NULL) /* empty line */
continue;
*nt = '\0'; /* null-terminate the address */
debugs(1, 5, "etc_hosts: address is '" << addr << "'");
lt = nt + 1;
SBufList hosts;
一応念のためと思って squid のソースを読んでみたら、
なんと squid は libc を使わず独自に /etc/hosts を parse していて、
そこでは行頭にスペースやタブがあると、アドレスが書いてないものとみなされてしまうコードになっていました。
この辺です:
https://github.com/squid-cache/squid/blob/d429cbd0e4d86d4af54ed50e499da14039ff7429/src/tools.cc#L954
これはビックリ。
というわけで、行頭のスペースないしTABが squid 限定で犯人でした。
この回答くれた方には恩しか感じません。僕は完全にSquidの設定ばかりを疑っていました。
注意点
文字コードや、改行ではない。
文字コードに依存する文字がhosts
の中に記述されていれば関係あるかもしれません。
しかし、hosts
は基本的に英数字しか書きませんので、問題ないかと。
なんかいい方法ないですか??
自作アプリでローカルWEBサーバーにアクセスする際、Squidでリバースプロキシ立てちゃう方法をよく使用します。
この手法してるとあらぬトラブルに巻き込まれるので、なんかいい方法ありませんか?
ちなみに、エミュレーターで無理くりするあの感じが嫌なので、実機を使用しています。
最後に
ちょっと短いけど今日はここまで。
たまには過去の資産をまとめることも悪くないですね。
こういうリメイク記事も作成していくかもしれません。
にしてもコード読んで解決とは・・・世の中にはすごい人がたくさんいますね。