注意:根据新信息进行了一些更新.旧观点已添加为以下评论. 注意:根据新信息进行一些更新(再次).旧的想法已被添加为下面的评论(再次).
我们在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.这至少给了我一些新的线索,但如果有人有一个答案,我仍然可以使用帮助.
我有一个在VPS上运行的个人域名.我想将nginx设置为node.js应用程序的反向代理,但它不起作用.任何人都可以看看我的配置并告诉我我做错了什么?
我们假设我的域名是example.com.基本上,我想这样做,以便当我转到node.example.com时,它代理node.js应用程序.我还在nginx中设置了blog.example.com和www.example.com.
这是我的反向代理的nginx配置(blog.example.com,省略了www.example.com设置):
server {
listen 80;
server_name node.example.com;
access_log /srv/www/example.com/logs/node-access.log;
error_log /srv/www/example.com/logs/node-error.log;
location / {
proxy_pass http://example.com:3000/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
}
}
这是我的node.js应用程序:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, "example.com");
我重新启动了nginx服务器并运行了node.js应用程序.但是,如果我转到node.example.com,它会说"node.example.com不存在或不可用".
我不确定我的配置有什么问题.我也试过各种组合.
这些是我尝试过的配置:
proxy_pass in nginx | hostname in node.js app http:// localhost:3000/ | ---.listen(3000, "localhost") http:// 127.0.0.1:3000/ | ---.listen(3000, …
例如,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) 使用nginx为每个应用程序使用不同的子目录设置多个Play 2.1应用程序.
运行的App1 127.0.0.1:4000应该可以在127.0.0.1/dev
运行的App2 下访问,127.0.0.1:5000应该可以访问127.0.0.1/test
nginx.conf
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream app1 {
server 127.0.0.1:4000;
}
upstream app2 {
server 127.0.0.1:5000;
}
server {
listen 80;
server_name localhost;
location /dev {
rewrite /(.*) /$1 break;
proxy_pass http://app1;
}
location /test {
rewrite /(.*) /$1 break;
proxy_pass http://app2;
}
}
}
Run Code Online (Sandbox Code Playgroud)
App1 - application.conf
application.context=/dev
Run Code Online (Sandbox Code Playgroud)
App2 - application.conf
application.context=/test
Run Code Online (Sandbox Code Playgroud)
使用此配置,我可以访问这两个应用程序,但只加载了html代码.未加载所有静态文件(css,js,images).
我认为这是缓存问题.我试过不同的nginx参数,没有运气.如果我第一次请求该站点,浏览器会响应(例如,for …
嗨,我在亚马逊有一个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) 我正在尝试设置一个 nginx,它可以根据域名将加密的 tcp 流传递到另一个应用程序,或者充当提供自己证书的反向代理。
\n\n我想归档以下情况:
\n\n https://app1.app.com \xe2\x94\x80\xe2\x94\x80\xe2\x96\xba pass-through encrypted tcp to :10001\n https://app2.app.com \xe2\x94\x80\xe2\x94\x80\xe2\x96\xba pass-through encrypted tcp to :10002\n https://app3.app.com \xe2\x94\x80\xe2\x94\x80\xe2\x96\xba serve ssl, reverse-proxy to http://ip:10003\nRun Code Online (Sandbox Code Playgroud)\n\n因此,在不破坏应用程序 1 和 2 的加密连接的情况下,nginx 应该转发 tcp 数据包。证书将由申请本身提供。主机名检测与 ssl_preread 一起使用。
\n\n但应用程序 3 只能通过 http 访问,因此 nginx 应该提供证书本身并代理从特定主机名app3.app.com到未加密后端的所有内容。
我有一个适用于前两种情况的工作配置,并且可以设置第三种情况,但无法弄清楚如何将这两种情况组合到一个 nginx 配置中。
\n\n到目前为止我所拥有的:
\n\nuser www-data;\nworker_processes 1;\n\nload_module /usr/lib/nginx/modules/ngx_stream_module.so;\n\nhttp {\n include /etc/nginx/mime.types;\n default_type application/octet-stream;\n\n log_format main \'$remote_addr - $remote_user [$time_local] "$request" \'\n \'$status $body_bytes_sent "$http_referer" \'\n \'"$http_user_agent" "$http_x_forwarded_for"\';\n\n access_log …Run Code Online (Sandbox Code Playgroud) 我正在尝试结合使用本指南和此处找到的代码来设置 traefik 。
我正在docker-compose与 Unraid 一起使用,到目前为止我有以下代码:
traefik.toml:
debug = false
logLevel = "ERROR"
defaultEntryPoints = ["https","http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[acme]
email = "user@domain.com"
storage = "acme.json"
entryPoint = "https"
#OnHostRule = true
#onDemand = true
[acme.dnsChallenge]
provider = "cloudflare"
[[acme.domains]]
main = "domain.name"
[[acme.domains]]
main = "*.domain.name"
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml:
services:
traefik:
image: traefik:latest
command: --web --docker --docker.watch --docker.domain=${DOMAIN} \
--docker.exposedbydefault=false --acme.domains=${DOMAIN}
container_name: …Run Code Online (Sandbox Code Playgroud) reverse-proxy ×10
nginx ×4
apache ×3
docker ×2
node.js ×2
proxy ×2
ssl ×2
traefik ×2
amazon-ec2 ×1
apache2 ×1
couchdb ×1
https ×1
netflix-zuul ×1
spring-cloud ×1
tcp ×1