标签: reverse-proxy

反向代理 Java

我正在使用 Java Web 应用程序,并且我想要一个反向代理来屏蔽我的一些内部端点。

要求
1. 反向代理映射需要在运行时可修改,例如,如果我们将某些组件移动到另一台服务器,我们应该能够修改映射,以便将新请求路由到此端点。
2. 这必须可以嵌入到像 Jetty 这样的标准 servlet 容器中。

大多数 Java 反向代理(例如 J2EP)都需要在启动应用程序之前提供映射信息。

java proxy reverse-proxy embedded-jetty embedded-tomcat-7

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

Python-Twisted:HTTPS API 的反向代理:无法连接

我正在尝试构建一个反向代理来与某些 API(如 Twitter、Github、Instagram)交谈,然后我可以用我的反向代理调用我想要的任何(客户端)应用程序(把它想象成一个 API 管理器) .

另外,我正在使用 LXC 容器来执行此操作。

例如,这是我从 Twisted Docs 上的示例中破解的最简单的代码:

from twisted.internet import reactor
from twisted.web import proxy, server
from twisted.python.log import startLogging
from sys import stdout
startLogging(stdout)

site = server.Site(proxy.ReverseProxyResource('https://api.github.com/users/defunkt', 443, b''))
reactor.listenTCP(8080, site)
reactor.run()
Run Code Online (Sandbox Code Playgroud)

当我在容器内执行 CURL 时,我得到一个有效的请求(意味着我得到了适当的 JSON 响应)。

这是我如何使用 CURL 命令:

curl https://api.github.com/users/defunkt
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出:

{
  "login": "defunkt",
  "id": 2,
  "avatar_url": "https://avatars.githubusercontent.com/u/2?v=3",
  "gravatar_id": "",
  "url": "https://api.github.com/users/defunkt",
  "html_url": "https://github.com/defunkt",
  "followers_url": "https://api.github.com/users/defunkt/followers",
  "following_url": "https://api.github.com/users/defunkt/following{/other_user}",
  "gists_url": "https://api.github.com/users/defunkt/gists{/gist_id}",
  "starred_url": "https://api.github.com/users/defunkt/starred{/owner}{/repo}",
  "subscriptions_url": "https://api.github.com/users/defunkt/subscriptions",
  "organizations_url": "https://api.github.com/users/defunkt/orgs",
  "repos_url": "https://api.github.com/users/defunkt/repos",
  "events_url": "https://api.github.com/users/defunkt/events{/privacy}",
  "received_events_url": …
Run Code Online (Sandbox Code Playgroud)

python reverse-proxy twisted twisted.web lxc

3
推荐指数
1
解决办法
1913
查看次数

如何将nginx设置为反向代理(堡垒);我有“400Bad 请求:主机头太多”

我尝试设置 nginx 来验证传入的 https 请求并将它们传递到同一 Intranet (LAN) 中不同主机上的服务器。我从不同的来源得到了以下 conf 文件:

    proxy_redirect              off;
    proxy_set_header            Host            $http_host;
    proxy_set_header            X-Real-IP       $remote_addr;
    proxy_set_header            X-Forwared-For  proxy_add_x_forwarded_for;

upstream syncthing_gui 
  {
      server 10.0.0.129:8329; 
  }

server {
  listen       443 ssl;
  server_name  geras.duckdns.org;

    ssl    on;
    ssl_certificate    /etc/letsencrypt/live/geras.duckdns.org/fullchain.pem;
    ssl_certificate_key    /etc/letsencrypt/live/geras.duckdns.org/privkey.pem;

    auth_basic "Username and Password required (syncthing)";
    auth_basic_user_file /etc/nginx/.htpasswd;

  location /sync {

    error_log /var/log/nginx/error.log info; 
    access_log /var/log/access.log;
    proxy_pass http://syncthing_gui;
}
Run Code Online (Sandbox Code Playgroud)

}

但我得到了错误400 Bad Request: too many Host headers。我需要改变什么?

reverse-proxy nginx

3
推荐指数
1
解决办法
3516
查看次数

Gitlab 服务器通过 Nginx 代理进行的 Git 克隆不起作用

我的 Nginx 服务器充当 Gitlab 服务器的代理,问题是当我尝试“ **git clone git@gitlab.example.com:username/project.git**”时,我无法克隆项目 [它不是从 Nginx 服务器到 Gitlab 服务器的隧道]

当我使用 Gitlab 服务器的 IP 地址更新本地系统的 /etc/hosts 文件时,它可以在没有密码的情况下正常克隆 [我已经在 Gitlab 上使用 SSH 公钥更新了我的配置文件]。

所以我得出的结论是,我必须用规则更新我的 Nginx 配置,这些规则可以通过 Nginx 服务器将 SSH 通信从任何客户端系统隧道传输到 Gitlab 服务器。

通过进行如下更改来尝试此链接上的代码:

upstream gitlab {
server 192.168.61.102:22;
}

server {
listen 22;
server_name gitlab.example.com;

location / {
proxy_set_header  X-Real-IP  $remote_addr;
proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;

proxy_pass http://gitlab;
}
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用。如果有人帮助我调整规则以使其发挥作用,那就太好了。

注意:上面代码中192.168.61.102是我的gitlab服务器的IP地址,我的Nginx服务器在192.168.61.101

reverse-proxy nginx ssh-tunnel gitlab

3
推荐指数
1
解决办法
6018
查看次数

如何在 apache 反向代理服务器上强制将 http 重定向到 https?

我有一个带有 http 和 https 服务的 apache 反向代理服务器。我想将 http 重定向到 https 强制。我应该配置什么配置文件?

apache https redirect reverse-proxy http

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

具有 openid 连接重定向的反向代理

在我的应用程序中,我集成Identity server 3openid-connect. 在我们的生产服务器上,我们的网站位于导致问题的反向代理后面;

当用户登录并被身份服务器重定向回时,我们的应用程序希望将用户重定向到他的原始位置(带有 的页面AuthorizeAttribute)。这里的问题是用户被重定向到隐藏的 url 而不是reverse proxy.

如何将用户重定向到公共网址?

c# asp.net-mvc reverse-proxy openid-connect identityserver3

3
推荐指数
1
解决办法
2129
查看次数

SSL 握手失败

奇怪的情况:有一个android应用程序。在它直接工作到 apache2 之前。最近我尝试使用 nginx 作为反向代理。应用程序停止工作。nginx 日志上的调试显示“ SSL_do_handshake() failed (SSL: error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown:SSL alert number 46) while SSL handshaking”。然后切换回 apache2,打开调试,但在 apache2 应用程序连接使用 TLS 而不是 SSLv3。有没有人遇到过这种情况?为什么android应用程序尝试使用SSLv2(已弃用)但使用带有TLS的apache2连接nginx?感谢您提前的想法。

reverse-proxy nginx sslv3

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

ReverseProxy 依赖于 golang 中的 request.Body

我想构建一个 http 反向代理,它检查 HTTP 正文并在此之后将 HTTP 请求发送到它的上游服务器。你怎么能在 go 中做到这一点?

初始尝试(跟随)失败,因为 ReverseProxy 复制传入的请求,修改它并发送,但正文已被读取。

func main() {
    backendServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        b, err := ioutil.ReadAll(r.Body)
        if err != nil {
            http.Error(w, fmt.Sprintf("ioutil.ReadAll: %s", err), 500)
            return
        }
        // expecting to see hoge=fuga
        fmt.Fprintf(w, "this call was relayed by the reverse proxy, body: %s", string(b))
    }))
    defer backendServer.Close()

    rpURL, err := url.Parse(backendServer.URL)
    if err != nil {
        log.Fatal(err)
    }

    proxy := func(u *url.URL) http.Handler {
        p := httputil.NewSingleHostReverseProxy(u)
        return http.HandlerFunc(func(w …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy http go

3
推荐指数
1
解决办法
3409
查看次数

如何调试 httputil.NewSingleHostReverseProxy

问题:

  1. 我正在转发到 HTTPS 地址。
  2. 我想看看为什么删除 req.Host = req.URL.Host会导致它失败。而不是返回{"Code":"OBRI.FR.Request.Invalid","Id":"c37baec213dd1227","Message":"An error happened when parsing the request arguments","Errors":[{"ErrorCode":"UK.OBIE.Header.Missing","Message":"Missing request header 'x-fapi-financial-id' for method parameter of type String","Url":"https://docs.ob.forgerock.financial/errors#UK.OBIE.Header.Missing"}]} 它返回一个404.
  3. httputil. NewSingleHostReverseProxy当我取消注释该行时,我想跟踪代理返回的调用 req.Host = req.URL.Host

鉴于这样的请求:

$ curl http://localhost:8989/open-banking/v2.0/accounts
Run Code Online (Sandbox Code Playgroud)

以及下面的代码 ( main.go):

package main

import (
    "log"
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    target, err := url.Parse("https://rs.aspsp.ob.forgerock.financial:443")
    log.Printf("forwarding to -> %s%s\n", target.Scheme, target.Host)

    if err != nil {
        log.Fatal(err)
    }
    proxy := httputil.NewSingleHostReverseProxy(target)

    http.HandleFunc("/", func(w http.ResponseWriter, req …
Run Code Online (Sandbox Code Playgroud)

https proxy reverse-proxy go

3
推荐指数
1
解决办法
2843
查看次数

Docker-compose 与 nginx 反向、一个网站和一个宁静的 api?

我希望你能帮助我解决我的问题!这是信息。

情况

我目前有两个工作容器,我需要在同一个端口 80 上运行。有一个网站,目前只需转到服务器的主机 url 和 restful api 即可访问。但是,它必须通过所有端口 80 来工作,并且登录向 restful api 发出请求,该 api 也必须侦听端口 80 以处理请求。因此,从我所见,我需要一个反向代理,例如 nginx 来适当地映射内部/外部端口。

问题

在将 nginx 反向代理和其他两个容器进行 dockerizing 时,我真的不明白那里的教程......目前,restful api 使用一个简单的 Dockerfile,应用程序使用 docker-compose 和一个 mysql 数据库。我非常不确定我应该如何做这件事。我是否应该将所有这些都放在一个带有 nginx 反向代理的文件夹中,然后 docker-compose 处理每个都有 dockerfiles/docker-compose 的所有子文件?我看到的大多数教程都在谈论拥有两个不同的网站等等,但似乎没有多少人谈论一个宁静的 api 以及一个网站。据我所知,我肯定会使用这个 docker hub image

Docker 镜像当前结构

- RestApi
 - Dockerfile
  - main.go

- Website
 - Dockerfile
 - Docker-compose
 - Ruby app
Run Code Online (Sandbox Code Playgroud)

我应该沿着反向代理文件夹创建一个父文件夹并将所有这 3 个放在父文件夹中吗?就像是 :

- Parentfolder
 - Reverse-proxy
 - RestApi
 - Website
Run Code Online (Sandbox Code Playgroud)

然后有一些网站谈论修改启用了站点的文件夹,有些没有,有些谈论虚拟主机,其他关于使用网络标签启动 docker ......我应该把我的 nginx.conf …

reverse-proxy nginx docker dockerfile docker-compose

3
推荐指数
1
解决办法
5297
查看次数