Articles of 反向代理

ARR反向代理到Azure云服务中的Azure网站

我正在尝试将www.contoso.com/blog/重写为wordpress Azure网站(contosoblog.azurewebsites.net)。 我已经完全configuration了所有入站和出站规则,并且在开发机器上进行了本地testing,并且可以确认它的工作原理 – 例如,将www.contoso.com设置为指向主机上的127.0.0.1,然后打开www.contoso.com/博客/并可以确认它加载WordPress的网站。 我已经按照networking中的说明在Azure Cloud Service中使用启动任务来安装WebFarm Framework + ARR,并且通过远程处理实例,我可以看到WFF和ARR已正确安装。 使用与我的开发环境相同的重写规则configuration站点,当我点击www.contoso.com/blog/时,出现404错误。 我认为我得到404的唯一方法是如果重写没有发生,所以我打了失败的请求跟踪,并通过日志查看,我看到重写规则确实被击中,url被重写,但在中间的某个地方的日志中有一个ARR_WEBFARM_NOT_ROUTED错误,并且URL随后被重写回到原始请求。 我到处search,ARR_WEBFARM_NOT_ROUTED似乎只生成1-2页的Googlesearch结果,没有任何有用的信息。 我有一个预感,它与云服务的configuration有关,所以我启动了一个新的Azure虚拟机,configuration了一个IISangular色并设置了WebFarm + ARR。 在该服务器上,一切工作正常。 有人能指出我如何解决我的问题的正确方向,或者甚至可能吗?

Apache 2.4代理外部,redirect为内部

我试图设置一个反向代理,只允许几个select的IP范围代理到一个内部主机,而我想任何其他人不在IP范围内redirect到我们的内部命名的主机。 在这个设置中,Web服务将工作,而没有VPN的人进入我们的networking将不能够导航到内部资源。 我一直试图得到这个工作没有运气,我的部分configuration目前如下: ProxyRequests Off <Proxy *> Allow from all </Proxy> <Location /> Allow From xxx.xxx.xxx.xxx/24 1xxx.xxx.xxx.xxx/23 Deny From All ProxyPass http://server.local.corp:8000/ ProxyPassReverse http://server.local.corp:8000/ </Location> 这个configuration似乎很好地阻止其他IP范围能够代理,但我不清楚我可以如何为其他人添加一个redirect语句。 编辑从第一个答案我的代码现在看起来像这样: <If "%{REMOTE_ADDR} -ipmatch 'xxx.xxx.xxx.xxx/24'"> ProxyPass / http://server.local.corp:8000/ ProxyPassReverse / http://server.local.corp:8000/ </If> 而且apache在重新启动时会抛出以下错误: ProxyPass cannot occur within <If> section Action 'configtest' failed. The Apache error log may have more […]

根据客户端证书设置标题

我有Apache作为内部服务器的反向代理运行。 用户点击代理需要使用客户端证书。 在内部服务器上,有一个Web应用程序可以使用HTTP标头来validation用户。 我希望代理提供基于客户端证书的头。 标题值是用户的ID。 理想情况下,我会有一个文本文件映射用户ID证书。 据我所知,我需要RewriteMap而不是头文件。 # Somehow lookup USERID given SSL_CLIENT_S_DN RequestHeader set X-User-ID %{USERID} 我想避免一大堆SetEnvIf需要重新启动服务器来更改,例如: SetEnvIf SSL_CLIENT_S_DN [User 1's SSL_CLIENT_S_DN] USERID=12 SetEnvIf SSL_CLIENT_S_DN [User 2's SSL_CLIENT_S_DN] USERID=34 SetEnvIf SSL_CLIENT_S_DN [User 3's SSL_CLIENT_S_DN] USERID=56 … 有没有一种好的方法可以避免用户需要进行两次实质性的validation?

使用直接服务器返回转发HTTP请求

我有服务器分布在几个数据中心,每个存储不同的文件。 我希望用户能够通过单个域访问所有服务器上的文件,并让各个服务器直接将文件返回给用户。 下面是一个简单的例子:1)用户的浏览器请求http://www.example.com/files/file1.zip 2)根据example.com的DNS Alogging,请求转到服务器A. 3)服务器A分析请求,并确定/files/file1.zip存储在服务器B上。4)服务器A将请求转发给服务器B. 5)服务器B将文件1.zip直接返回给用户而不经过服务器一个。 注意:步骤4和步骤5必须对用户透明,并且不能涉及向用户发送redirect,因为这会违反单个域的要求。 从我的研究中,我想要实现的是所谓的“直接服务器返回”,这是负载均衡的常见设置。 它有时也被称为半反向代理。 对于第4步,这听起来像我需要做MAC地址转换,然后将请求传回networking和服务器networking外的服务器将需要隧道。 对于第5步,我只需要configuration服务器B,根据负载平衡设置中的真实服务器。 也就是说,服务器B在回环接口上应该有服务器A的IP地址,并且不应该回答该IP地址的任何ARP请求。 我的问题是如何真正实现第4步? 我发现有很多硬件和软件可以在第4层进行简单的负载均衡,但这些解决scheme不足,无法处理我所需的自定义路由。 看来我需要推出我自己的解决scheme。 理想情况下,我想在Web服务器级别进行路由/转发,即在PHP或C#/ ASP.net中。 不过,我打算在Apache或IIS等较低级别上进行操作,或者在更低的级别上进行操作,即在所有操作之前使用自定义代理服务。 谢谢。

是否有可能使用一个haproxy进程负载平衡多个协议/端口?

我有haproxy为我们工作。 但现在有两个haproxy进程正在运行。 一个用于HTTP,另一个用于TCP(RTMP)。 我已经尝试在一个configuration文件中configuration两个代理,但haproxy只处理HTTP。 我的configuration文件: global log 127.0.0.1 local0 log 127.0.0.1 local1 notice #daemon debug user haproxy group haproxy maxconn 4096 defaults log global mode tcp option tcplog option dontlognull option redispatch retries 3 maxconn 2000 contimeout 10000 clitimeout 50000 srvtimeout 50000 listen http :80 mode tcp balance roundrobin server h1 xxx.xxx.xxx.xxx:80 check server h2 […]

Nginx可以caching包含X-Accel-Redirect头的上游响应吗?

我正在使用nginx作为应用程序服务器前面的反向代理。 应用程序响应一个X-Accel-Redirect头文件,告诉nginx要提供哪个静态文件。 我希望能够做的是让nginxcaching一些上游回应,所以它可以提供正确的文件,而无需点击应用服务器。 不幸的是,这不起作用:nginx似乎拒绝用X-Accel-Redirect头caching任何响应。 如果我不使用X-Accel-Redirect并让应用程序服务器返回文件本身,那么caching完美无缺。 然而,这并不是非常有效,因为应用程序服务器必须从磁盘读取文件并将其发送给nginx,nginx然后将文件写回磁盘(在其caching中)并将其发送到客户端。 这里是我的nginxconfiguration的精简版本: proxy_cache_path /tmp/nginx-cache keys_zone=testzone:10m; server { location / { proxy_cache testzone; proxy_pass http://localhost:8000/; } location /static-files/ { internal; alias /var/static-files/; } } 有谁知道我试图做什么是可能的? 我的怀疑是,当nginx发现X-Accel-Redirect头部时,它立即跳转到处理提供的URI并跳过正常的caching逻辑,但是确认这个会很好。

nginxredirect回remote_addr IP

我试图设置nginx 1.0.12作为Apache 2.2.15的代理,但面临一个奇怪的问题。 我连续三天无法解决。 我有testing网站ccraft.info并已安装roundcube / roundcube子目录。 所以这里是问题: 如果您尝试打开http://c-craft.info/roundcube,您将得到奇怪的redirect到您自己的IP地址。 所以似乎nginx试图从remote_addr下载静态文件。 但是,如果你将添加尾随斜线像圆形/这将工作。 另一个例子:尝试打开http://www.contra.lv – 你也将redirect回你自己的IP地址,并再次尝试从remote_addr下载静态文件。 有趣的是,通过Apache连接工程很好: c-craft.info:9091/roundcube contra.lv:9091 我真的需要你的build议如何解决它,因为我卡住…这是我目前的configuration文件: nginx.conf user nginx; worker_processes 2; pid /var/run/nginx.pid; events { worker_connections 2048; use epoll; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr – $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log; error_log […]

Nginx作为反向代理:如何正确configuration网关超时?

我们已经将Nginxconfiguration为Apache服务器场的反向代理,但是我遇到了网关超时问题。 我们的目标是:“在一秒内发送请求,但如果真的需要更长的时间,则无论如何都要发送”,这对我来说意味着“尝试第一个上游的Apache服务器最多500毫秒,如果我们得到一个超时/一个错误,尝试下一个,直到我们终于成功。“ 现在我们的相关configuration是这样的: location @proxy { proxy_pass http://apache$request_uri; proxy_connect_timeout 1s; proxy_read_timeout 2s; } […] upstream apache { server 127.0.0.1:8001 max_fails=1 fail_timeout=10s; server 10.1.xx:8001 max_fails=1 fail_timeout=10s backup; server 10.1.xx:8001 max_fails=1 fail_timeout=10s backup; server 10.1.xx:8001 max_fails=1 fail_timeout=10s backup; } 这里的问题是,nginx似乎误解了这一点:“尝试在一秒钟内从整个上游集群获得响应,如果我们不这样做,就会发出50倍的错误 – 没有任何限制尝试任何上游服务器的时间限制”显然不是我们想到的。 有没有办法让nginx做我们想要的?

鱿鱼代理不caching任何东西

squid.conf中: http_access allow all # Squid normally listens to port 3128 http_port 3128 accel defaultsite=localhost no-vhost cache_peer localhost parent 80 0 no-query originserver name=myAccel cache_peer_access myAccel allow all # Uncomment and adjust the following to add a disk cache directory. cache_dir ufs /usr/local/var/cache/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir […]

在由nginx代理的机器上设置cookie时出现问题

对于我的一个项目,我需要连接一个长长的机器链,它们本质上代表了彼此的HTTP请求。 它是这样的: Web客户端 – A – B / C – D 当浏览器发出请求时,它首先通过位于用户本地机器上的瘦PHP代理层,其目的是为了解决跨域请求等问题。 它代理机器B – 只是一个nginx实例,它将URL和代理重写为C.在代理D之前,C做了一些必要的修改,获得响应并将其返回给Web客户机。 D是一个无法触及的远程服务API。 我在机器C上设置会话cookie时遇到了问题,它一直到原来的请求。 尽pipe设置cookie是可能的,但是当有新的请求时,Chromenetworking检查器中不可见,并且当我尝试从显然不存在的cookie中获取值时,节点C返回nullpointerexception。 我想,它归结为调整nginx代理请求的方式。