标签: 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
查看次数

这个配置nginx作为node.js的反向代理有什么问题?

我有一个在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, …

reverse-proxy nginx node.js

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

是否可以在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万
查看次数

使用nginx和Play 2.1应用程序的子目录的反向代理

目标

使用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 …

reverse-proxy nginx playframework playframework-2.1

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

如何在亚马逊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
查看次数

如何将 nginx tcp 直通与 ssl 预读和反向代理功能结合起来?

我正在尝试设置一个 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\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,在不破坏应用程序 1 和 2 的加密连接的情况下,nginx 应该转发 tcp 数据包。证书将由申请本身提供。主机名检测与 ssl_preread 一起使用。

\n\n

但应用程序 3 只能通过 http 访问,因此 nginx 应该提供证书本身并代理从特定主机名app3.app.com到未加密后端的所有内容。

\n\n

我有一个适用于前两种情况的工作配置,并且可以设置第三种情况,但无法弄清楚如何将这两种情况组合到一个 nginx 配置中。

\n\n

到目前为止我所拥有的:

\n\n
user 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)

ssl https tcp reverse-proxy nginx

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

使用 Cloudflare 设置 Traefik

我正在尝试结合使用本指南和此处找到的代码来设置 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)

ssl reverse-proxy docker docker-compose traefik

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