Authentication Apache流量服务器转发代理基本身份验证

Authentication Apache流量服务器转发代理基本身份验证,authentication,proxy,centos6,forward,apache-traffic-server,Authentication,Proxy,Centos6,Forward,Apache Traffic Server,我正在尝试在CentOS 6上使用Apache Traffic server(ATS)设置一个具有基本代理身份验证的转发代理服务器。我已经成功地部署了SQUID和Apache httpd mod_proxy forward代理以及基本的代理身份验证,并希望对ATS进行同样的操作,以比较性能 我试图使用ATS提供的基本auth插件示例,但存在多个问题 我为CentOS 6添加了最新的epel repo,并安装了trafficserver和trafficserver-devel(需要使用ATS编译器

我正在尝试在CentOS 6上使用Apache Traffic server(ATS)设置一个具有基本代理身份验证的转发代理服务器。我已经成功地部署了SQUID和Apache httpd mod_proxy forward代理以及基本的代理身份验证,并希望对ATS进行同样的操作,以比较性能

我试图使用ATS提供的基本auth插件示例,但存在多个问题

我为CentOS 6添加了最新的epel repo,并安装了trafficserver和trafficserver-devel(需要使用ATS编译器tsxs)软件包。我将基本auth.c文件从源代码复制到我的用户目录,并尝试编译:

# tsxs -v -o /root/basic-auth.so -c /root/basic-auth.c
因此,我发现未找到文件的错误-
ts/ink\u defs.h

这个文件是通过在源代码上运行
autoconfig-if
configure
生成的,因此我继续克隆了trafficserver git repo,并在
/opt/ts/
中运行了生成几百个文件的步骤。我将它们复制到tsxs查看的目录-
/usr/include/ts/
(这是因为它是使用trafficserver devel安装时的默认位置(当我以前仅从源代码安装traffic server时,tsxs不会运行)

现在文件已经就绪,我在basic-auth.cc上再次运行了编译器。这次我在
ts.h
中收到错误,原因是sdk\u版本参数:

# tsxs -v -o basic-auth.so basic-auth.c
  compiling basic-auth.c -> basic-auth.lo
cc -I/usr/include -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -feliminate-unused-debug-symbols -fno-strict-aliasing -mcx16 -fpic -c basic-auth.c -o basic-auth.lo
In file included from basic-auth.c:30:
/usr/include/ts/ts.h:158: error: expected ‘)’ before ‘sdk_version’
In file included from /usr/include/ts/ink_defs.h:28,
                 from basic-auth.c:31:
/usr/include/ts/ink_config.h:41:26: error: ink_autoconf.h: No such file or directory
basic-auth.c: In function ‘TSPluginInit’:
basic-auth.c:222: warning: implicit declaration of function ‘TSPluginRegister’
tsxs: compilation failed: cc -I/usr/include -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -feliminate-unused-debug-symbols -fno-strict-aliasing -mcx16 -fpic -c basic-auth.c -o basic-auth.lo
我调查了
ts.h
的代码,并将其与进行了比较。您可以看到第156行发生了变化:

trafficserver-devel:

tsapi TSReturnCode TSPluginRegister(TSSDKVersion sdk_version, TSPluginRegistrationInfo plugin_info);
资料来源:

tsapi TSReturnCode TSPluginRegister(TSPluginRegistrationInfo *plugin_info);
因此,我假设版本控制存在一些问题。我用最新的源代码替换了我的ts.h版本,并再次尝试编译:它可以工作

我将.so文件复制到plugins目录,并相应地修改plugins.config和records.config。唉,当我尝试启动trafficserver时,它失败了,出现了一个分段错误:

# /usr/bin/traffic_server
traffic_server: using root directory '/usr'
[Jul 15 16:19:21.224] Server {0x7fd9458ba7e0} DEBUG: (dns) ink_dns_init: called with init_called = 0
[Jul 15 16:19:21.227] Server {0x7fd9458ba7e0} DEBUG: (dns) localhost=vmProxy1
[Jul 15 16:19:21.227] Server {0x7fd9458ba7e0} DEBUG: (dns) Round-robin nameservers = 1
traffic_server: Segmentation fault (Signal sent by the kernel [(nil)])traffic_server - STACK TRACE:
/usr/bin/traffic_server(_Z19crash_logger_invokeiP7siginfoPv+0x99)[0x4a5209]
/lib64/libpthread.so.0[0x35b600f710]
/lib64/libc.so.6[0x35b5d3362f]
/usr/lib64/trafficserver/libtsutil.so.5(_xstrdup+0x6d)[0x7fd945f2b6cd]
/usr/bin/traffic_server(TSPluginRegister+0x7c)[0x4bcb6c]
/usr/lib64/trafficserver/plugins/basic-auth.so(TSPluginInit+0x2f)[0x7fd942334e1f]
/usr/bin/traffic_server(_Z11plugin_initb+0x322)[0x4dab22]
/usr/bin/traffic_server(main+0x1424)[0x4d2754]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x35b5c1ed5d]
/usr/bin/traffic_server[0x4942a9]
Segmentation fault (core dumped)
我试图使用gdb来获得更好的调试日志,但我没有看到任何有用的东西。还有一次提到了
sdk\u版本
——但我开始认为,跳转文件并替换它们并不是它的工作方式

Starting program: /usr/bin/traffic_server
[Thread debugging using libthread_db enabled]
traffic_server: using root directory '/usr'
[New Thread 0x7ffff7704700 (LWP 19967)]
[Jul 15 16:18:28.841] Server {0x7ffff77777e0} DEBUG: (dns) ink_dns_init: called with init_called = 0
[New Thread 0x7ffff68ff700 (LWP 19968)]
[New Thread 0x7ffff67fe700 (LWP 19969)]
[Jul 15 16:18:28.844] Server {0x7ffff77777e0} DEBUG: (dns) localhost=vmProxy1
[Jul 15 16:18:28.844] Server {0x7ffff77777e0} DEBUG: (dns) Round-robin nameservers = 1
[New Thread 0x7ffff46f5700 (LWP 19970)]
[New Thread 0x7ffff44f3700 (LWP 19971)]

Program received signal SIGSEGV, Segmentation fault.
__strlen_sse42 () at ../sysdeps/x86_64/multiarch/strlen-sse4.S:32
32              pcmpeqb (%rdi), %xmm1
Missing separate debuginfos, use: debuginfo-install tcl-8.5.7-6.el6.x86_64
(gdb) bt
#0  __strlen_sse42 () at ../sysdeps/x86_64/multiarch/strlen-sse4.S:32
#1  0x00007ffff7de86cd in _xstrdup (str=0xd46e3934ae7d6389 <Address 0xd46e3934ae7d6389 out of bounds>, length=-1)
    at ink_memory.cc:231
#2  0x00000000004bcb6c in TSPluginRegister (sdk_version=<value optimized out>, plugin_info=0x7fffffffcc50)
    at InkAPI.cc:1803
#3  0x00007ffff41f1e1f in TSPluginInit (argc=<value optimized out>, argv=<value optimized out>) at /root/basic-auth.c:222
#4  0x00000000004dab22 in plugin_load (validateOnly=false) at Plugin.cc:114
#5  plugin_init (validateOnly=false) at Plugin.cc:265
#6  0x00000000004d2754 in main (argv=<value optimized out>) at Main.cc:1714
启动程序:/usr/bin/traffic\u服务器
[已启用使用libthread_db的线程调试]
流量\u服务器:使用根目录“/usr”
[新螺纹0x7ffff7704700(LWP 19967)]
[Jul 15 16:18:28.841]服务器{0x7ffff77777e0}调试:(dns)ink_dns_init:使用init调用_called=0
[新螺纹0x7ffff68ff700(LWP 19968)]
[新螺纹0x7ffff67fe700(LWP 19969)]
[Jul 15 16:18:28.844]服务器{0x7ffff77777e0}调试:(dns)localhost=vmProxy1
[Jul 15 16:18:28.844]服务器{0x7ffff77777e0}调试:(dns)循环名称服务器=1
[新螺纹0x7ffff46f5700(LWP 19970)]
[新螺纹0x7ffff44f3700(LWP 19971)]
程序接收信号SIGSEGV,分段故障。
__strlen_sse42()位于../sysdeps/x86_64/multiarch/strlen-sse4.S:32
32 pcmpeqb(%rdi),%xmm1
缺少单独的debuginfo,请使用:debuginfo安装tcl-8.5.7-6.el6.x86_64
(gdb)英国电信
#0_ustrlen_sse42(),位于../sysdeps/x86_64/multiarch/strlen-sse4.S:32
#1 0x00007FF7DE86CD在xstrdup中(str=0xd46e3934ae7d6389,长度=-1)
在ink_内存中。抄送:231
#TSPluginRegister中的2 0x00000000004bcb6c(sdk_版本=,插件_信息=0x7FFFFFCC50)
在InkAPI.cc:1803
#位于/root/basic auth.c:222的TSPluginInit(argc=,argv=)中的3 0x00007ffff41f1e1f
#在plugin.cc:114处加载plugin_(validateOnly=false)中的4 0x00000000004dab22
#5 plugin_init(validateOnly=false)位于plugin.cc:265
#main中的6 0x00000000004d2754(argv=)位于main。cc:1714

非常感谢关于我可能做错了什么的任何提示或提示。

是的,这有点不幸,但源代码树中的示例并不打算用tsxs编译。您需要对代码进行一些更改才能使其正常工作。例如,请参阅我对版本所做的git提交。c示例:

diff --git a/example/version/version.c b/example/version/version.c
index f5c8126..4020a0c 100644
--- a/example/version/version.c
+++ b/example/version/version.c
@@ -24,10 +24,9 @@
 #include <stdio.h>

 #include "ts/ts.h"
-#include "ts/ink_defs.h"

 void
-TSPluginInit(int argc ATS_UNUSED, const char *argv[] ATS_UNUSED)
+TSPluginInit(int argc , const char *argv[])
 {
   TSPluginRegistrationInfo info;
diff--git a/example/version/version.cb/example/version/version.c
索引f5c8126..4020a0c 100644
---a/example/version/version.c
+++b/example/version/version.c
@@ -24,10 +24,9 @@
#包括
#包括“ts/ts.h”
-#包括“ts/ink_defs.h”
无效的
-TSPluginInit(int argc ATS_UNUSED,const char*argv[]ATS_UNUSED)
+TSPluginInit(int argc,const char*argv[])
{
TSPluginRegistrationInfo信息;
至于版本信息,ATS v6.0.0中删除了此项,这意味着也需要修改较旧的插件来删除它。这也使得以前构建的二进制文件不兼容。可能还有比TSX更好的工具可供使用,包括pkgconfig支持和traffic_布局