Varnishで443ポートもリッスンする
なんだかんだで、ちょろちょろとVarnishさんを触っています。
VarnishさんでSSL関連が触れないのは、皆さん周知の事実だと思いますが、
なにもしなくていいから、バックエンドにそのまま流してくれと、(バックエンド側でSSL紐解けば)というのをやってみたかったので、試した所、
翌々考えたら、80ポートしかリッスンさせてなかったので(気づくのにちょっと時間かかったw)未来の自分への備忘録。
(タダの恥さらしの記録ですねー( ゚ ρ ゚ ))
■環境
Scientific Linux
■Varnish
3.0.4 (rpmパッケージを作って、導入しています。理由は、また次の機会にでも。。。)
yum等で導入した場合、パッケージに入っているinitscriptは、/etc/sysconfig/varnish の内容を読んでいることが確認できます。
んで、最初の状況がこれ。リッスンポートを80に変えただけの標準ですねー。
変えたとこ
#VARNISH_LISTEN_PORT=6081 VARNISH_LISTEN_PORT=80
全部
# Configuration file for varnish # # /etc/init.d/varnish expects the variable $DAEMON_OPTS to be set from this # shell script fragment. # # Maximum number of open files (for ulimit -n) NFILES=131072 # Locked shared memory (for ulimit -l) # Default log size is 82MB + header MEMLOCK=82000 # Maximum number of threads (for ulimit -u) NPROCS="unlimited" # Maximum size of corefile (for ulimit -c). Default in Fedora is 0 # DAEMON_COREFILE_LIMIT="unlimited" # Set this to 1 to make init script reload try to switch vcl without restart. # To make this work, you need to set the following variables # explicit: VARNISH_VCL_CONF, VARNISH_ADMIN_LISTEN_ADDRESS, # VARNISH_ADMIN_LISTEN_PORT, VARNISH_SECRET_FILE, or in short, # use Alternative 3, Advanced configuration, below RELOAD_VCL=1 # This file contains 4 alternatives, please use only one. ## Alternative 1, Minimal configuration, no VCL # # Listen on port 6081, administration on localhost:6082, and forward to # content server on localhost:8080. Use a fixed-size cache file. # #DAEMON_OPTS="-a :6081 \ # -T localhost:6082 \ # -b localhost:8080 \ # -u varnish -g varnish \ # -s file,/var/lib/varnish/varnish_storage.bin,1G" ## Alternative 2, Configuration with VCL # # Listen on port 6081, administration on localhost:6082, and forward to # one content server selected by the vcl file, based on the request. Use a # fixed-size cache file. # #DAEMON_OPTS="-a :6081 \ # -T localhost:6082 \ # -f /etc/varnish/default.vcl \ # -u varnish -g varnish \ # -S /etc/varnish/secret \ # -s file,/var/lib/varnish/varnish_storage.bin,1G" ## Alternative 3, Advanced configuration # # See varnishd(1) for more information. # # # Main configuration file. You probably want to change it :) VARNISH_VCL_CONF=/etc/varnish/default.vcl # # # Default address and port to bind to # # Blank address means all IPv4 and IPv6 interfaces, otherwise specify # # a host name, an IPv4 dotted quad, or an IPv6 address in brackets. # VARNISH_LISTEN_ADDRESS= #VARNISH_LISTEN_PORT=6081 VARNISH_LISTEN_PORT=80 # # # Telnet admin interface listen address and port VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1 VARNISH_ADMIN_LISTEN_PORT=6082 # # # Shared secret file for admin interface VARNISH_SECRET_FILE=/etc/varnish/secret # # # The minimum number of worker threads to start VARNISH_MIN_THREADS=50 # # # The Maximum number of worker threads to start VARNISH_MAX_THREADS=1000 # # # Idle timeout for worker threads VARNISH_THREAD_TIMEOUT=120 # # # Cache file location VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin # # # Cache file size: in bytes, optionally using k / M / G / T suffix, # # or in percentage of available disk space using the % suffix. VARNISH_STORAGE_SIZE=1G # # # Backend storage specification VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}" # # # Default TTL used when the backend does not specify one VARNISH_TTL=120 # # # DAEMON_OPTS is used by the init script. If you add or remove options, make # # sure you update this section, too. DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \ -f ${VARNISH_VCL_CONF} \ -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \ -t ${VARNISH_TTL} \ -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \ -u varnish -g varnish \ -S ${VARNISH_SECRET_FILE} \ -s ${VARNISH_STORAGE}" # ## Alternative 4, Do It Yourself. See varnishd(1) for more information. # # DAEMON_OPTS=""
で、LISTENポートに追加したらいいんだろうなぁーっと思って、カンマで区切って443だとダメなんですねー。
-a オプションで、127.0.0.1:80とかで起動する必要がありますので。。。
なので、ダメなこなんで、
VARNISH_LISTEN_PORT=:80,:443
って書いちゃったんですねー。。。 configtestしても、こんなとこチェックしてくれるわけもなく。。。
起動方法なので、restartをかけたところ、エラーですねー。。。
なぜかというと。。。重要なのは、DAEMONS_OPTが起動オプションですが、
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
に記載されている${VARNISH_LISTEN_PORT}の前に「:」あるじゃん!!っていうのがあるからです。。。orz(はい、アラート鳴らしてしまいました。。。)
このまま、DAEMON_OPTS書きなおさないなら、以下のように書く必要があります。
VARNISH_LISTEN_PORT=80,:443
でも、どうせなら、標準で、
VARNISH_LISTEN_PORT=:80,:443
して、
DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}${VARNISH_LISTEN_PORT} \
このほうが、綺麗じゃね??とか思った次第であります。
アラート鳴らしてごめんなさい。。。m(_ _)m
ちなみに、443ポートはpipeをさせていますが、途中で接続が切られています。
(バックエンド側の問題なのか、切り分けができていません。テストに使ったバックエンドがTeraStationというw)
varnishlog眺めてると、
varnishlog 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477969 1.0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477972 1.0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477975 1.0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477978 1.0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477981 1.0 14 SessionOpen c xxx.xxx.xxx.xxx 62894 :443 14 Debug c herding 14 SessionClose c timeout 14 StatSess c xxx.xxx.xxx.xxx 62894 0 1 0 0 0 0 0 0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477984 1.0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477987 1.0 14 SessionOpen c xxx.xxx.xxx.xxx 63009 :443 14 Debug c herding 14 SessionClose c timeout 14 StatSess c xxx.xxx.xxx.xxx 63009 0 1 0 0 0 0 0 0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477990 1.0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477993 1.0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477996 1.0 0 CLI - Rd ping 0 CLI - Wr 200 19 PONG 1378477999 1.0
何か、良い切り分け方法や、これじゃできてないよ、みたいなのがあれば、ご教授下さいませ m(_ _)m