标签: reverse-proxy

CouchDB复制在代理后面无法正常工作

注意:根据新信息进行了一些更新.旧观点已添加为以下评论. 注意:根据新信息进行一些更新(再次).旧的想法已被添加为下面的评论(再次).

我们在Apache反向代理后面的不同计算机上运行两个CouchDB实例.尝试在两个实例之间复制时:

curl -X POST http://user:pass@localhost/couchdb/_replicate -d '{ "source": "db1", "target": "http://user:pass@10.1.100.59/couchdb/db1" }' --header "Content-Type: application/json"
Run Code Online (Sandbox Code Playgroud)

(我们开始使用curl来调试问题)

我们收到类似于的错误:

{"error":"case_clause","reason":"{error,\n    {{bad_return_value,\n         {invalid_json,\n             <<\"<!DOCTYPE HTML PUBLIC \\\"-//IETF//DTD HTML 2.0//EN\\\">\\n<html><head>\\n<title>404 Not Found</title>\\n</head><body>\\n<h1>Not Found</h1>\\n<p>The requested URL /couchdb/db1/_local/01e935dcd2193b87af34c9b449ae2e20 was not found on this server.</p>\\n<hr>\\n<address>Apache/2.2.3 (Red Hat) Server at 10.1.100.59 Port 80</address>\\n</body></html>\\n\">>}},\n     {child,undefined,\"01e935dcd2193b87af34c9b449ae2e20\",\n         {gen_server,start_link,\n             [couch_rep,\n              [\"01e935dcd2193b87af34c9b449ae2e20\",\n               {[{<<\"source\">>,<<\"db1\">>},\n                 {<<\"target\">>,\n                  <<\"http://user:pass@10.1.100.59/couchdb/db1\">>}]},\n               {user_ctx,<<\"user\">>,\n                   [<<\"_admin\">>],\n                   <<\"{couch_httpd_auth, default_authentication_handler}\">>}],\n              []]},\n         temporary,1,worker,\n         [couch_rep]}}}"}
Run Code Online (Sandbox Code Playgroud)

因此,经过进一步的研究,似乎apache在不尝试访问CouchDB的情况下返回此错误(根据日志文件).在提供以下URL时要清楚

/couchdb/db1/_local/01e935dcd2193b87af34c9b449ae2e20
Run Code Online (Sandbox Code Playgroud)

Apache将请求传递给CouchDB并返回CouchDB的404错误.另一方面,当发生复制时,实际传递的URL是

/couchdb/db1/_local%2F01e935dcd2193b87af34c9b449ae2e20
Run Code Online (Sandbox Code Playgroud)

哪个apache确定是一个丢失的文档,并返回自己的404错误,没有将请求传递给CouchDB.这至少给了我一些新的线索,但如果有人有一个答案,我仍然可以使用帮助.

apache couchdb reverse-proxy

6
推荐指数
1
解决办法
3153
查看次数

如何设置在Apache反向代理后面的子目录上播放?

我有一个Apache 2前端,它提供两种请求:

  • 对根文件夹的请求(例如http://mysite.com/http://mysite.com/help)由apache本身(PHP/Wordpress)提供.
  • 对'/ playapp'子文件夹的特定请求将转发到Play!通过mod-proxy通过反向代理:

MOD-proxy.conf

ProxyPass        /playapp/ http://localhost:9000/
ProxyPassReverse /playapp/ http://localhost:9000/
Run Code Online (Sandbox Code Playgroud)

最终结果是请求说http://mysite.com/playapp/Controller/action到达Play服务器http://localhost:9000/Controller/action

现在,玩!正确提供页面,但所有链接,包括javascript,css和其他页面的链接都被破坏.例如,如果视图使用:

#{stylesheet 'style.css' /}
Run Code Online (Sandbox Code Playgroud)

然后渲染的结果是

<link rel="stylesheet" type="text/css" href="/public/stylesheets/style.css" charset="utf-8" ></link>
Run Code Online (Sandbox Code Playgroud)

所以最终用户尝试抓取http://mysite.com/public/stylesheets/style.css,返回404,因为它实际上不是Play的一部分!应用程序.

在这里配置Apache + Play的正确方法是什么?

我正在寻找的结果是Play!在最终呈现的HTML中返回诸如此类的URL(或者可能为Apache重写URL):http://mysite.com/playapp/public/stylesheets/style.css

此外,我确实需要一些能力链接Play应用程序之外.例如,我希望将主路由(/)映射到我的绝对根(http://mysite.com/),而不是Play的根.

java apache reverse-proxy playframework

6
推荐指数
1
解决办法
7361
查看次数

如何使用Rack Middleware代理AJAX请求?

我正在开发一个Rails应用程序,它使用API​​后端来处理用Sinatra编写的AJAX请求.

API与Rails分开运行:

Rails: localhost:3000
API: localhost:9393

在生产中,我们将使用nginx代理对API的请求.

问题是我们在开发模式下没有nginx,我们使用的是瘦身.所以我需要某种Rack中间件,我可以在开发模式中添加它来代理我的请求.

有人能给我一个如何做到这一点的例子吗?

ajax reverse-proxy ruby-on-rails sinatra ruby-on-rails-3

6
推荐指数
1
解决办法
1382
查看次数

是否可以在ProxyPass/ProxyPassReverse中使用相对路径?

例如,httpd.conf中有以下配置:

ProxyPass app   http://somehost:someport/App_1   
ProxyPassReverse app   http://somehost:someport/App_1   
Run Code Online (Sandbox Code Playgroud)

现在我应该使用绝对网址将请求从"/ myapp"转发到"/ app":

<Location /myapp >   
   ProxyPass http://localhost:8080/app
   ProxyPassReverse http://localhost:8080/app
</Location>
Run Code Online (Sandbox Code Playgroud)

是否可以在ProxyPass/ProxyPassReverse中使用相对路径?

<Location /myapp >  
   ProxyPass /app  
   ProxyPassReverse /app  
</Location>  
Run Code Online (Sandbox Code Playgroud)

apache proxy reverse-proxy apache2

6
推荐指数
1
解决办法
2万
查看次数

url在应用程序池中重写和ARR

我试图弄清楚如何使用URL重写和应用程序请求路由(ARR)来重写同一服务器上的不同应用程序池.

在简化版本中,这就是我所拥有的:REST服务API使用2个虚拟目录Service.A和B实现,因此虚拟目录是访问资源A和B的URL的一部分

获取[https://] api.mycompany.com/Service.A/A

获取[https://] api.mycompany.com/Service.B/B

我想要实现的是为没有虚拟目录名的api提供一个外部URL,显然不需要进行代码重构(合并解决方案文件和构建)

获取[https://] api.mycompany.com/A

获取[https://] api.mycompany.com/B

我实现了一个url重写规则来匹配路径中的/ A并用/Service.A/A替换,在默认网站级别的web.config中使用这样的代码,这很好.

    <rewrite>

            <rule name="AddServicePrefix" enabled="true">

                <match url="^A[/]?.*" />

                <action type="Rewrite" url="/Service.A/{R:0}" />

            </rule>

    </rewrite>
Run Code Online (Sandbox Code Playgroud)

问题是,当我为Service.A(从默认网站的应用程序池)分配不同的应用程序池时,这将立即失败并出现403错误,但这是我们要求运行应用程序/虚拟目录的要求在不同的应用程序池下,以最小化任何池出现故障或回收时的影响.

我做了一些研究.下面的上一篇文章基本上说"如果你想将请求重新路由到另一个应用程序池,你必须跳一跳,无论是跳过winsock还是命名管道还是其他什么"没有太多细节.我也通过ARR指南,但无法弄清楚如何在这种情况下使用ARR.

http://forums.iis.net/t/1151510.aspx?Rewrite+across+application+pools+

有帮助吗?建议和评论我是否朝着正确的方向前进?

谢谢!

哦,忘记提及环境:目前在开发环境中,Windows 7上的IIS 7.5,Url Rewrite 2.0和ARR 3.0,由Web Platform Installer安装.

iis reverse-proxy url-rewriting arr

6
推荐指数
0
解决办法
1090
查看次数

如何在亚马逊ec2中一起运行Node和apache?

嗨,我在亚马逊有一个ec2实例运行在正常的80端口,我有一个节点在3002端口上运行如何让我的节点在我的亚马逊ec2实例中的端口80上运行以及apache我尝试了大多数在线教程,如reverseproxy mod apache上的代理等

我需要在www.mywebsite.com/node上运行我的节点服务器,现在它运行在www.mywebsite.com:3002/

我试着编辑我的

/etc/httpd/conf/httpd.conf中

像下面的apache但没有任何影响

<VirtualHost *:80>

ProxyRequests off

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

<Location />
    ProxyPass /node http://localhost:3002/
    ProxyPassReverse /node http://localhost:3002/
</Location>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

apache reverse-proxy amazon-ec2 amazon-web-services node.js

6
推荐指数
1
解决办法
1034
查看次数

扩展zuul代理

我们通过在eureka服务注册表中注册了多个实例来扩展我们系统中的所有服务.

此外,它们还由前面的zuul服务器代理.

我的问题是,当从客户端访问时,我们如何确保zuul代理的可伸缩性.

我能想到的一个解决方案是在eureka注册表中注册多个代理实例.但是,如果这样做,我们如何决定将哪些实例暴露给客户端.

reverse-proxy spring-cloud netflix-eureka netflix-zuul

6
推荐指数
1
解决办法
2616
查看次数

静态文件上的Nginx反向代理404

我正在寻找将一个URL /路径反向代理到端点上代表不同服务器托管其自己的Web应用程序的不同端口的方法。

我可以使用proxy_pass,但是静态文件失败,因为资源是相对于其实例的。

我有例如-server_name = myproxy.com:

location /app1/{
    proxy_pass: http://192.168.1.1:8080/;
    proxy_set_header Host 192.168.1.1;
}
location /app2/{
    proxy_pass: http://192.168.1.1:8081/;
    proxy_set_header Host 192.168.1.2;
}
location /{
    proxy_pass: http://192.168.1.1:8080/;
    proxy_set_header Host 192.168.1.1;
}
Run Code Online (Sandbox Code Playgroud)

如上所述,反向代理的工作原理非常好,除了与app2相关联的静态文件外。App1静态文件可以正常工作,但App2静态文件会生成404。这很有意义,因为App1资源文件位于/assets/app1.css此文件中,因为我有/适当的位置重定向,可以解析回App1但App2资源文件,这完全是/assets/app2.css404中的结果不同。

因此,有没有办法将App2静态请求从重写/assets/app2.css为它们各自的代理位置?就像是:

location /app1/{
    proxy_pass: http://192.168.1.1:8080/;
    proxy_set_header Host 192.168.1.1;
}
location /app2/{
    proxy_pass: http://192.168.1.1:8081/;
    proxy_set_header Host 192.168.1.2;

    *rewrite app2 static urls frome /assets/* to /app2/assets/*
}
location /{
    proxy_pass: http://192.168.1.1:8080/;
    proxy_set_header Host 192.168.1.1;
}
Run Code Online (Sandbox Code Playgroud)

proxy reverse-proxy nginx

6
推荐指数
1
解决办法
8329
查看次数

带有docker后端的traefik反向代理 - 在traefik的配置文件中配置前端规则而不是通过容器标签

对于在动态IP地址可能随时间变化的Docker容器前面使用traefik作为反向代理,traefik附带了一个docker 后端.我设置的所有示例都遵循相同的模式:

首先,在docker没有额外配置文件的模式下启动traefik ,激活主机网络模式(可选,以便traefik可以在需要时查看主机上的所有Docker网络)并安装Docker unix套接字,以便traefik可以监听容器的启动和停止.

docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v /dev/null/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug
Run Code Online (Sandbox Code Playgroud)

然后,启动另一个容器并至少设置以下标签:

  • traefik.backend:"some-backend-name"
  • traefik.frontend.rule:"主持人:localhost;方法:GET"(或者你的规则是什么)
  • traefik.port:80(或容器在内部暴露的任何端口)

例:

docker run --rm --name nginx -l traefik.backend="some-backend-name" -l traefik.frontend.rule="Host: localhost; Method: GET" -l traefik.port="80 nginx
Run Code Online (Sandbox Code Playgroud)

然后,执行a curl localhost,可以在traefik容器的日志中看到它接收请求并将其路由到NGINX容器.

到目前为止,这么好......但是,我不喜欢我必须在应用程序本身(我的docker-中)配置我的反向代理转发规则(例如转发主机:some.host.name到容器xxx)这一事实.撰写文件设置容器,标签等通常位于).相反,我想将其与应用程序分开,并将其配置为traefik配置的一部分.

这有可能吗?我尝试的是traefik.frontend.rule从示例nginx容器中省略标签,而是安装以下配置文件traefik:

[frontends]
  [frontends.frontend1]
  backend = "some-backend-name"
    [frontends.frontend1.routes.test_1]
    rule = "Host: localhost; Method: GET"
Run Code Online (Sandbox Code Playgroud)

因此启动命令traefik变为:

docker run --rm -p 80:80 …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy docker traefik

6
推荐指数
1
解决办法
2503
查看次数

Asp.Net Core中的反向代理和进程内HTTP服务器

我正在阅读关于Kestrelweb服务器的asp.net core app具体内容in-process http serverreverse proxy.

作为季节性的Web开发人员,我无法理解背后的想法:

  • in-process http server核心应用程序中实现的相关性?
  • 反向代理方法的重要性超过任何典型web server
  • 除了转发之外,问题的类型是否在asp.net核心世界中进行反向代理解决http request
  • 如果要将asp.net核心应用程序部署在容器中,如何reverse proxy以及Kestrel关联/通信(1:n1:1)?

asp.net proxy reverse-proxy asp.net-core-mvc asp.net-core

6
推荐指数
1
解决办法
2202
查看次数