6


ワニスでインラインCを使用する場合、起動時に/ etc / varnish/defaultを満足させることができませんでした。

インラインCをワニスでテストしました。GeoIP検出とアンチサイトスクレイピング機能です。

DAEMON_OPTSは、他の人が正常に機能していることを示しているように見えても、常に文句を言います

私の問題は、このコマンドラインの起動が機能することです。

varnishd -f /etc/varnish/varnish-default.conf -s file,/var/lib/varnish/varnish_storage.bin,512M -T 127.0.0.1:2000 -a 0.0.0.0:8080 -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'

ただし、デフォルトの開始スクリプトから起動しようとするとエラーになります。

/ etc / default / varnishにはこれが含まれています:

DAEMON_OPTS="-a :8080 \
             -T localhost:2000 \
             -f /etc/varnish/varnish-default.conf \
             -s file,/var/lib/varnish/varnish_storage.bin,512M \
             -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'"

エラーは次のとおりです。

# /etc/init.d/varnish start
Starting HTTP accelerator: varnishd failed!
storage_file: filename: /var/lib/varnish/vbox.local/varnish_storage.bin size 512 MB.
Error:
Unknown parameter "'cc_command".

最後の行を次のように変更しようとすると:

-p cc_command='exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'"

エラーは次のとおりです。

# /etc/init.d/varnish start
Starting HTTP accelerator: varnishd failed!
storage_file: filename: /var/lib/varnish/vbox.local/varnish_storage.bin size 512 MB.
Error: Unknown storage method "hared"

'-shared'を-sharedとして解釈しようとしており、'hared'はストレージタイプではありません。

GeoIPとAnti-Site-Scrapeの両方で、正確に推奨されるデーモンオプションを使用し、
さらに\'や''の追加など、あらゆる種類のバリエーションを試しましたが、喜びはありませんでした。

これは、DAEMON_OPTSの部分を除いて、正常に機能する、私が従った命令へのリンクです。
http://drcarter.info/2010/04/how-fighting-against-scraping-using-varnish-vcl-inline-c-memcached/

私はDebianと手順に記載されている正確なDAEMON_OPTSを使用しています。

誰かがここで何が問題になっているのかについての指針を手伝ってもらえますか?

どうもありがとう!

4

4 に答える 4

11

たとえジェイコブがこれを読まなくても、未来からの訪問者は私がこれから書く内容に感謝するかもしれません.

何が問題なのかはわかっていると思いますが、少なくとも Ubuntu 11.04 と Debian Squeeze で検証された Debian 固有の問題のようです。

/etc/default/varnishを含むmy から$DAEMON_OPTSinit スクリプトまでの実行を追跡しました。init script/etc/init.d/varnishでは、start_varnishd()関数は次のとおりです。

start_varnishd() {
    log_daemon_msg "$DESC を開始しています" "$NAME"
    output=$(/bin/tempfile -s.varnish)
    if start-stop-daemon \
        --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \
        -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1; それから
        log_end_msg 0
    そうしないと
        log_end_msg 1
        猫$出力
        1番出口
    フィ
    rm $出力
}

したがって、次のように完全なstart-stop-daemonコマンドラインを出力するように変更しました。

start_varnishd() {
    log_daemon_msg "$DESC を開始しています" "$NAME"
    output=$(/bin/tempfile -s.varnish)
+ echo "start-stop-daemon --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1"
    if start-stop-daemon \
        --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \
        -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1; それから
        log_end_msg 0

そのため、コマンドラインを STDOUT にエコーし、コピーしてシェルに貼り付けました。そして、びっくり!出来た。なんてこと?

確認するためにもう一度繰り返しました。はい、動作します。うーん。これらの bash/dash コーナー ケースの別の可能性はありますか? start-stop-daemon コマンド ラインをbashに入力して、どのように反応するかを見てみましょう。

start_varnishd() {
    log_daemon_msg "$DESC を開始しています" "$NAME"
    output=$(/bin/tempfile -s.varnish)
    if bash -c "start-stop-daemon \
        --start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \
        -P ${PIDFILE} ${DAEMON_OPTS} > ${output} 2>&1"; その後
        log_end_msg 0
    そうしないと
        log_end_msg 1
        猫$出力
        1番出口
    フィ
    rm $出力
}

はい、少なくとも私の場合は問題なく動作します。これが私の関連部分です/etc/default/varnish

...
## 代替案 2、VCL を使用した構成
#
# ポート 6081 でリッスンし、localhost:6082 で管理し、転送先
# リクエストに基づいて、vcl ファイルによって選択された 1 つのコンテンツ サーバー。1GBを使用
# 固定サイズのキャッシュ ファイル。
#
DAEMON_OPTS="-a:6081 \
             -T ローカルホスト:6082 \
             -f /etc/varnish/geoip-example.vcl \
             -S /etc/varnish/secret \
             -s malloc,100M \
             -p 'cc_command=exec cc -fpic -shared -Wl,-x -L/usr/include/GeoIP.h -lGeoIP -o %o %s'"
...

コンパイル コマンドを別のシェル スクリプトに移動することで、この問題を回避しようとした投稿を見たことがあります。残念ながら、 がvar をstart-stop-daemonに渡すという事実は変わりません。その結果、オプションが壊れてしまいます。$DAEMON_OPTSdash

次のようなものになります。

-p 'cc_command=exec /etc/varnish/compile.sh %o %s'"

そして、compile.shスクリプトは次のとおりです。

#!/ビン/sh
cc -fpic -shared -Wl,-x -L/usr/include/GeoIP.h -lGeoIP -o $@

しかし、うまくいかないので、init スクリプトにパッチを当てるだけで準備完了です! この情報がお役に立てば幸いです。

于 2011-11-30T21:42:48.850 に答える
1

次を使用して試すことができます:- DAEMON_OPTS="-a :8080 \ -T localhost:2000 \ -f /etc/varnish/varnish-default.conf \ -s file,/var/lib/varnish/varnish_storage.bin,512M \ -p cc_command='exec cc -fpic -shared -Wl,-x -L/usr/include/libmemcached/memcached.h -lmemcached -o %o %s'"

于 2017-10-25T11:21:24.360 に答える
0

明らかに、DAEMON_OPTS を解釈する起動スクリプトは、(一重引用符内であっても) 空白の準備ができていません。私の Fedora (15) のインストールでは、提案された解決策は問題なく動作します。"$*"bash パラメーターは /etc/init.d/varnish と /etc/init.d/functions で渡されるため、引数は正しく解釈されdaemon()ます。

パッケージからスタートアップ スクリプトを取得しましたか、それともカスタム スクリプトを作成しましたか?

于 2011-10-16T19:34:11.013 に答える