标签: reverse-proxy

Apache proxy_http 重定向到 ip 并设置主机名

希望你们能帮助我解决我遇到的代理问题。

我已经拥有的

我已经设置了一个 apache http 反向代理,将请求从 *.proxy.domain 代理到 *.intern.domain。apache 是从外部网络访问我的内部 web 应用程序的唯一方法。

例子:

app.proxy.domain -> app.intern.domain
mail.proxy.domain -> mail.intern.domain
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但我有以下问题。

问题
我想代理以下请求:

app.proxy.domain -> app.internal.domain
app-dev.proxy.domain -> app-dev.internal.domain
Run Code Online (Sandbox Code Playgroud)

这没问题,但不幸的是 app-dev 服务器运行 app 服务器 webapplication 的精确副本,并且这个 webapplication 只响应它的主机名(app.intern.domain)

所以我需要做的是代理以下内容

app.proxy.domain -> app.internal.domain (10.0.1.1)
app-dev.proxy.domain -> app.internal.domain (10.0.1.2)
Run Code Online (Sandbox Code Playgroud)

我可以通过在 /etc/hosts 中添加“10.0.1.2 app.internal.domain”来做第二件事,但这也意味着 app.proxy.domain 将登陆开发服务器。

我正在寻找一个选项,仅在 app-dev.proxy.domain 的 vhost 配置文件中设置 /etc/hosts 条目,以便所有其他 vhost 配置都将仅使用 app.intern.domain 的 DNS。

想法...

有没有办法告诉 apache 配置,

ProxyPass / http://10.0.1.2/
Run Code Online (Sandbox Code Playgroud)

但是发送 app.intern.domain 作为主机名?

编辑 dev-servers 网络应用程序以收听 app-dev 是没有选择的,因为它应该是一个精确的副本(不是我的决定......)

谢谢!

reverse-proxy hostname http-headers apache-2.2

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

使用 Nginx 将子路径重定向到外部主机

我需要在 Nginx 中创建一个非常简单的映射,将子路径重定向到位于同一子网中的另一台服务器。

  • Nginx 服务器:192.168.0.2
  • Tomcat 服务器:192.168.0.3:8443

我试着把它放在服务器部分

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }
Run Code Online (Sandbox Code Playgroud)

但是我访问http://www.myservice.com/tomcatapi/是一个 500 错误页面,在 nginx 日志文件中我有这个错误:

    the rewritten URI has a zero length
Run Code Online (Sandbox Code Playgroud)

我在这个 conf 中缺少什么?

nginx proxy reverse-proxy

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

nginx 在 upstream_http_ 变量上添加标头条件

我在 nginx 上有一个反向代理,它代理了很多站点。我最近为所有启用 SSL 的网站启用了 HTTP Strict Transport Security。我现在有一个不想启用此功能的站点。

我想我会做一个简单的检查,如果我的上游已经给我发送了一个Strict-Transport-Security-header,如果没有,就添加一个。这样,我的上游可以发送包含max-age=0避免代理启用 HSTS的 STS 标头。

我以为我只需按如下方式更改我的配置:

location / {
        proxy_pass http://webservers;

        proxy_redirect off;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto "https";

        if ($upstream_http_strict_transport_security = "") {
                add_header Strict-Transport-Security "max-age=15552000";
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,可能是因为if 是 evil,这不起作用。我尝试了很多不同的方法来确保变量确实存在(就是这种情况),但似乎没有任何帮助。

我怎么能让这个工作?

nginx reverse-proxy

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

为 Socket.IO 1.0 配置 Apache 2.4 mod_proxy_wstunnel

我正在尝试配置 Apache 2.4 以使用 mod_proxy_wstunnel 将 socket.io 的 websocket 连接代理到 node.js websocket 服务器。我们在 socket.io 0.9 上运行良好,但是在 1.0 版本中,他们将套接字端点更改为查询参数,现在我无法使用正确的代理指令配置 apache。

所有到/socket.io/?EIO=N&transport=websocket(其中 N 是任意数字,通常为 2)的ws://localhost:8082/socket.io/请求都需要转发到,但所有其他请求都需要转发到http://localhost:8082/socket.io/

我已经尝试了以下两种配置的变体:

ProxyPass /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket
ProxyPassReverse /socket.io/?EIO=2&transport=websocket http://localhost:8082/socket.io/?EIO=2&transport=websocket

ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
Run Code Online (Sandbox Code Playgroud)

.

RewriteRule /socket.io/?EIO=([0-9]+)&transport=websocket ws://localhost:8082/socket.io/ [QSA,P]

ProxyPass /socket.io/ http://localhost:8082/socket.io/
ProxyPassReverse /socket.io/ http://localhost:8082/socket.io/
Run Code Online (Sandbox Code Playgroud)

我从谷歌搜索中了解到 ProxyPass 和 Locations 无法定位查询字符串,那么这里还有其他选择吗?路径被硬编码到 socket.io 中,所以如果没有分叉整个库,我无法更改它们。

reverse-proxy socket node.js apache-2.4

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

如何使用 nginx 代理 /grafana?

我已经设置并启动了默认的 grafana,它在http://localhost:3000上按预期工作。我正在尝试使用安装了 ssl 的 nginx 代理它。我试图让它响应https://localhost/grafana但它只提供以下服务:

{{alert.title}}
Run Code Online (Sandbox Code Playgroud)

我的 nginx 服务器块中有这个:

location /grafana {
     proxy_pass         http://localhost:3000;
     proxy_set_header   Host $host;
}
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy grafana

17
推荐指数
2
解决办法
4万
查看次数

没有负载平衡的nginx故障转移

我在配置 nginx 时遇到问题。

我使用 nignx 作为反向代理。我想将所有请求发送到我的第一台服务器。如果第一台服务器关闭,我想向第二台服务器发送请求。

简而言之,如何在没有负载平衡的情况下拥有故障转移解决方案?

configuration nginx failover reverse-proxy load-balancing

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

如果它不存在,则在 apache 中设置标头

我有一个正在注入一些标头的代理,但我想修改它,以便它只设置标头(如果标头尚不存在):

<Location /api>    
    RequestHeader set MY_HEADER "value"

    ProxyPass http://127.0.0.1:8000/api
    ProxypassReverse http://127.0.0.1:8000/api
</Location>
Run Code Online (Sandbox Code Playgroud)

这可能吗?

reverse-proxy http-headers apache-2.2

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

是否可以替换通过代理传递的每个页面上的内容,类似于 mod_rewrite 用于 URL 的方式?

是否可以替换通过代理传递的每个页面上的内容,类似于 mod_rewrite 用于 URL 的方式?关于替代品的文件不清楚。

我有一些我正在反向代理的页面具有绝对路径。这破坏了网站。它们需要替换,并且 mod_rewrite 之类的工具没有选择它们,因为它们不是 URL 请求。

<VirtualHost *:80>
    ServerName  servername1
    ServerAlias servername2

    ErrorLog "/var/log/proxy/jpuat_prox_error_log"
    CustomLog "/var/log/proxy/jpuat_prox_access_log" common

    RewriteEngine on
    LogLevel alert rewrite:trace2
    RewriteCond %{HTTP_HOST} /uat.site.co.jp$ [NC]
    RewriteRule ^(.*)$ http://jp.uat.site2uk.co.uk/$1 [P]

    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|i"


    ProxyRequests Off

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

    ProxyPass / http://uat.site.co.jp/
    ProxyPassReverse / http://uat.site.co.jp/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

以上都不适用于替换 HTML 字符串

<link href="//uat.site.co.jp/css/css.css
Run Code Online (Sandbox Code Playgroud)

<link href="//uat.site2uk.co.uk/css/css.css
Run Code Online (Sandbox Code Playgroud)

更改后的 Conf:

<VirtualHost *:80>
    ServerName  jp.uat.site2uk.co.uk
    ServerAlias uat.site.co.jp
    ErrorLog "/var/log/proxy/jpuat_prox_error_log"
    CustomLog "/var/log/proxy/jpuat_prox_access_log" common
    ProxyRequests Off
    <Proxy …
Run Code Online (Sandbox Code Playgroud)

rewrite proxy reverse-proxy apache-2.4

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

Web 服务器前的反向代理会提高安全性吗?

第三方安全专家建议我们在 Web 服务器(均托管在 DMZ 中)前运行反向代理作为最佳实践安全措施。

我知道这是一个典型的推荐架构,因为它在 Web 应用程序前面提供了另一个级别的安全性以防止黑客。

然而,由于反向代理在用户和内部 Web 服务器之间愉快地来回穿梭 HTTP,它不会提供任何防止对 Web 服务器本身进行黑客攻击的措施。换句话说,如果您的 Web 应用程序存在安全漏洞,代理将不会提供任何有意义的安全性。

并且考虑到攻击 Web 应用程序的风险远高于攻击代理的风险,在中间添加一个额外的框真的有很多好处吗?我们不会使用反向代理的任何缓存功能——只是一个来回传输数据包的愚蠢工具。

还有什么我在这里想念的吗?反向代理 HTTP 数据包检查是否变得如此出色,可以检测到有意义的攻击而没有重大性能瓶颈,或者这只是安全剧院的另一个例子?

反向代理是 MS ISA fwiw。

security proxy reverse-proxy isa-server

15
推荐指数
4
解决办法
4万
查看次数

反向代理中的Apache URL重写

我在 Karaf 托管的应用程序前部署 Apache(Apache 和 Karaf 在不同的服务器上)。我希望 Apache 作为反向代理运行并隐藏部分 URL。

直接从应用服务器获取应用登录页面的 URL 是http://app-server:8181/jellyfish. 页面由在 Karaf 中运行的 Jetty 实例提供服务。当然,这种行为通常会被防火墙阻止,除了反向代理服务器。

在关闭防火墙的情况下,如果您点击此 URL,则 Jetty 会加载登录页面。浏览器的地址栏正确更改为http://app-server:8181/jellyfish/login?0,一切正常。

我想要的是http://web-server(即从根)映射到应用程序服务器上的 Jetty,应用程序的名称 ( jellyfish) 被抑制。例如,浏览器将更改为显示http://web-server/login?0在地址栏中,并且所有后续 URL 和内容都将使用网络服务器的域提供服务,而不会出现jellyfish混乱。

我可以使用以下配置(代码段)让 Apache 作为简单的反向代理运行:-

ProxyPass /jellyfish http://app-server:8181/jellyfish
ProxyPassReverse / http://app-server:8181/
Run Code Online (Sandbox Code Playgroud)

...但这需要浏览器的 URL 包含jellyfish并转到根 URL ( http://web-server) 会给出 404 Not Found。

我花了很多时间尝试使用mod_rewrite和不使用它的[P]标志来解决这个问题,但没有成功。然后我尝试了该ProxyPassMatch指令,但我似乎也无法完全正确。

这是当前配置,已加载到/etc/apache2/sites-available/Web 服务器上。请注意,有一个本地托管的图像目录。我还保留了mod_rewrite 代理漏洞利用保护,并抑制了一些mod_security会产生误报的规则。

<VirtualHost *:80> …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite web-server reverse-proxy mod-proxy apache-2.2

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