AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-73620

jetboy's questions

Martin Hope
jetboy
Asked: 2012-10-25 14:41:23 +0800 CST

使用 Nginx/Varnish/Apache 记录客户端 IP

  • 3

我让 Nginx 作为 SSL 终结器侦听端口 443,并将未加密的流量代理到同一台服务器上的 Varnish。Varnish 3 正在处理此流量,并且流量直接通过端口 80 进入。所有流量都未加密地传递到集群中其他服务器上的 Apache 实例。Apache 实例使用 mod_rpaf 将记录的客户端 IP 替换为 X-Forwarded-For 标头的内容。

我的问题是,如果流量来自 Nginx,而“正确的”客户端 IP 被记录在 VarnishNCSA 日志中,看起来 Varnish 正在(可以理解地)用 127.0.0.1 下游替换 Nginx 的 X-Forwarded-For 标头,这是用 Apache 记录的。如果 X-Forwarded-For 已经填充,是否有一种很好的简单方法来阻止 Varnish 重写 X-Forwarded-For?

apache-2.2
  • 1 个回答
  • 4133 Views
Martin Hope
jetboy
Asked: 2012-07-25 14:51:22 +0800 CST

使用 Heartbeat 和 Pacemaker 监控 Varnish

  • 4

我有一对服务器设置为高可用性负载平衡器/反向代理。每个都运行 Ubuntu 12.04 x64 服务器、Varnish、Heartbeat 和 Pacemaker,并使用 Varnish 负载平衡后端服务器的流量。

如果任一负载均衡器发生故障,Heartbeat/Pacemaker 会将一组虚拟 IP 传输到另一台服务器,然后流量恢复。这一点工作正常。

我没有考虑的是 Varnish 是否没有在任何一台服务器上运行。目前可以在不触发 Heartbeat/Pacemaker 的任何动作的情况下停止 Varnish。我希望当前服务器上缺少可操作的 Varnish 以触发向备份的移动(而不是尝试重新启动 Varnish),但我正在努力寻找任何类型的在线指导。谁能帮忙?

编辑达夫后的帮助:

我最终得到的结果与我最初的请求有点不同:Pacemaker 尝试重新启动 Varnish 一次,如果失败,它会将所有资源移动到被动节点。

我的设置是两台服务器,serverA(主动)和 serverB(被动)。我假设消息传递层(Heartbeat 或 Corosync)已经设置好并可以正常工作。为了让 Pacemaker 控制 Varnish,我们需要修复 Ubuntu 的 Varnish init 脚本:

sudo vim /etc/init.d/varnish

代替:

--start --quiet --pidfile ${PIDFILE} --exec ${DAEMON} -- \

在 start_varnish_d() 函数中:

--start --quiet --pidfile ${PIDFILE} --oknodo --exec ${DAEMON} -- \

所以它按照此处概述的规则工作。现在使用两个虚拟 IP 在 serverA 上设置一个基本的 Pacemaker 集群:

sudo crm configure property no-quorum-policy=ignore
sudo crm configure property stonith-enabled=false
sudo crm configure primitive virtual_ip_1 ocf:heartbeat:IPaddr params ip="192.168.1.134" nic="eth1" cidr_netmask="24" broadcast="192.168.1.255" op monitor interval="10s" timeout="20s"
sudo crm configure primitive virtual_ip_2 ocf:heartbeat:IPaddr params ip="192.168.1.135" nic="eth1" cidr_netmask="24" broadcast="192.168.1.255" op monitor interval="10s" timeout="20s"

为 Varnish 添加一个原语,提供监控频率,以及启动和停止 Varnish 的大量时间:

sudo crm configure primitive varnish lsb:varnish op monitor interval="10s" timeout="20s" op
start interval="0" timeout="15s" op stop interval="0" timeout="15s"

将 varnish 基元与虚拟 IP 分组,以便 Pacemaker 在发生故障时将所有资源迁移到被动节点:

sudo crm configure group cluster virtual_ip_1 virtual_ip_2 varnish

设置迁移阈值,以便 Pacemaker 在将所有资源移动到被动节点之前容忍两次故障。对于 Varnish,这意味着一次初始失败,再加上一次失败的重启尝试:

sudo crm_attribute --type rsc_defaults --attr-name migration-threshold --attr-value 2

设置失败超时。这似乎做了两件事:

  1. 在迁移到被动节点之前,为 Pacemaker 提供一次 Varnish 重启尝试的时间。

  2. 防止失败的节点在 30 秒后被标记为失败,允许将资源移回它,而无需在失败后手动运行 crm 资源清理清漆。这对我的设置来说是件好事,因为我没有在节点上设置任何权重,但在不同的环境中这可能是一个非常糟糕的主意。

sudo crm_attribute --type rsc_defaults --attr-name failure-timeout --attr-value 30s

就是这样,但请参阅下面达夫的回答以获取有关粘性的评论,我最终没有使用它。我能看到的唯一缺点是,如果您手动将节点置于待机状态,Pacemaker 将关闭该节点上的 Varnish,从而清除内存中的缓存。对我来说,这不是什么大不了的事。

varnish
  • 1 个回答
  • 2443 Views
Martin Hope
jetboy
Asked: 2012-06-26 13:41:19 +0800 CST

管道清漆日志到 rotatelogs 的语法

  • 3

Ubuntu 12.04 服务器 x64,清漆 3.0.2

我正在尝试通过 Apache 的 rotatelogs 传输 varnishncsa 的日志,并从 shell 运行,一切正常:

sudo varnishncsa -a -P /var/run/varnishncsa/varnishncsa.pid |/usr/sbin/rotatelogs /var/log/varnish/varnish.log.%Y%m%d%H 3600

在 /var/log/varnish 中创建一个新的日志文件,每小时轮换一次(3600 秒)。但是,我正在努力让事情在 /etc/init.d/varnishncsa 中以相同的方式工作:

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME/$NAME.pid
LOGFILE=/var/log/varnish/varnishncsa.log
USER=varnishlog

DAEMON_OPTS="-a -P ${PIDFILE}"
DAEMON_PIPE="|/usr/sbin/rotatelogs /var/log/varnish/varnish.log.%Y%m%d%H 3600"

...

start_varnishncsa() {
    output=$(/bin/tempfile -s.varnish)
    log_daemon_msg "Starting $DESC" "$NAME"
    create_pid_directory
    if start-stop-daemon --start --verbose --pidfile ${PIDFILE} \
        --chuid $USER --exec ${DAEMON} -- ${DAEMON_OPTS} \
        > ${output} 2>&1; then
        log_end_msg 0
    else
        log_end_msg 1
        cat $output
        exit 1
    fi
    rm $output
}

我应该把 DAEMON_PIPE 放在上面代码的什么地方?我在结束时尝试过:

if start-stop-daemon --start --verbose --pidfile ${PIDFILE}

这是额外的命令行参数通常去的地方,但它不会创建日志文件。

apache-2.2 log-files shell varnish
  • 1 个回答
  • 1017 Views
Martin Hope
jetboy
Asked: 2012-06-25 15:42:03 +0800 CST

仅使用 varnishncsa 记录命中

  • 1

默认情况下,varnishncsa 记录命中和未命中。因为我已经在我的后端服务器日志中记录了未命中,所以我希望只在 varnishncsa 中记录命中以删除重复并减小日志文件的大小。有没有人设法做到这一点?

我在 Ubuntu 12.04 Server x64 上运行 Varnish 3.0.2。

varnish
  • 1 个回答
  • 3644 Views
Martin Hope
jetboy
Asked: 2012-05-20 15:08:59 +0800 CST

有没有人设法在 Ubuntu 12.04 上构建 php5-xapian?

  • 4

由于 Xapian 已从 Ubuntu 存储库中删除,我正在尝试根据此处的说明构建我自己的 .deb:

http://article.gmane.org/gmane.comp.search.xapian.general/8855

http://beeznest.wordpress.com/2011/07/06/howto-build-your-own-binaries-of-php-xapian-bindings-for-debian/

我只能通过省略“rm debian/control”来让事情在最初几秒钟之后取得进展,但如果我这样做,看起来 Python 和 Ruby 绑定正在构建并正确传递它们的 smoketest 版本。

但是,构建的 PHP 部分因以下错误而失败:

/home/charlie/xapian-bindings-1.2.8/php/smoketest.php:38: include(xapian.php): failed to open stream: No such file or directory
FAIL: smoketest.php

/home/charlie/xapian-bindings-1.2.8/php/php5/ 中有一个 xapian.php 文件,但如果我将其复制到 /home/charlie/xapian-bindings-1.2.8/php/ 或将路径更改为它在 smoketest.php 中,构建在开始附近失败:

dpkg-source: error: aborting due to unexpected upstream changes

不幸的是,我已经脱离了从源头构建的舒适区。有人有什么想法吗?

编辑詹姆斯的回答:

如果我完全按照说明进行操作,则可以正常构建。我最初在测试 VM 上构建它,但由于未安装 PHP 本身,因此没有构建 PHP 包。明显的陷阱,但值得一提。

安装产生了以下错误:

Setting up php5-xapian (1.2.8-1) ...
Processing triggers for libapache2-mod-php5 ...
dpkg (subprocess): unable to execute installed post-installation script (/var/lib/dpkg/info/libapache2-mod-php5.postinst): Permission denied                                                               ssion denied
dpkg: error processing libapache2-mod-php5 (--install):
 subprocess installed post-installation script returned error exit status 2
Errors were encountered while processing:
 libapache2-mod-php5

它只是一个用于重新启动 Apache 的脚本。在运行 sudo dpkg -i php5-xapian_*.deb 之前停止 Apache 可以防止错误。Xapian 现在出现在 phpinfo() 中。任务完成。谢谢。

ubuntu xapian
  • 1 个回答
  • 1267 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve