注意:根据新信息进行了一些更新.旧观点已添加为以下评论. 注意:根据新信息进行一些更新(再次).旧的想法已被添加为下面的评论(再次).
我们在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 2前端,它提供两种请求:
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的根.
我正在开发一个Rails应用程序,它使用API后端来处理用Sinatra编写的AJAX请求.
API与Rails分开运行:
Rails: localhost:3000
API: localhost:9393
在生产中,我们将使用nginx代理对API的请求.
问题是我们在开发模式下没有nginx,我们使用的是瘦身.所以我需要某种Rack中间件,我可以在开发模式中添加它来代理我的请求.
有人能给我一个如何做到这一点的例子吗?
例如,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) 我试图弄清楚如何使用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安装.
嗨,我在亚马逊有一个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) 我们通过在eureka服务注册表中注册了多个实例来扩展我们系统中的所有服务.
此外,它们还由前面的zuul服务器代理.
我的问题是,当从客户端访问时,我们如何确保zuul代理的可伸缩性.
我能想到的一个解决方案是在eureka注册表中注册多个代理实例.但是,如果这样做,我们如何决定将哪些实例暴露给客户端.
我正在寻找将一个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) 对于在动态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)
然后,启动另一个容器并至少设置以下标签:
例:
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) 我正在阅读关于Kestrelweb服务器的asp.net core app具体内容in-process http server和reverse proxy.
作为季节性的Web开发人员,我无法理解背后的想法:
in-process http server核心应用程序中实现的相关性?web server?http request?reverse proxy以及Kestrel关联/通信(1:n或1:1)?reverse-proxy ×10
apache ×4
proxy ×3
ajax ×1
amazon-ec2 ×1
apache2 ×1
arr ×1
asp.net ×1
asp.net-core ×1
couchdb ×1
docker ×1
iis ×1
java ×1
netflix-zuul ×1
nginx ×1
node.js ×1
sinatra ×1
spring-cloud ×1
traefik ×1