标签: reverse-proxy

反向代理中的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万
查看次数

使用 cookie 控制 Nginx 代理目标?

我正在尝试使用有趣的 Apache mod_rewrite 设置转换反向代理以使用 Nginx(由于外部问题,我们正在从 Apache 迁移到 Nginx,除了这部分外,大多数一切都正常)。

我最初的设置是读取 HTTP cookie(由某些应用程序设置)并根据其值将反向代理定向到不同的后端。它是这样的:

RewriteCond %{HTTP_COOKIE}  proxy-target-A
RewriteRule ^/original-request/ http://backend-a/some-application [P,QSA]

RewriteCond %{HTTP_COOKIE}  proxy-target-B
RewriteRule ^/original-request http://backend-b/another-application [P,QSA]

RewriteRule ^/original-request http://primary-backend/original-application [P,QSA]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 Nginx 实现相同的目标,我的初始配置是这样的(其中“proxy_override”是 cookie 的名称):

location /original-request {
    if ($cookie_proxy_override = "proxy-target-A") {
        rewrite . http://backend-a/some-application;
        break;
    }
    if ($cookie_proxy_override = "proxy-target-B") {
        rewrite . http://backend-b/another-application;
        break;
    }
    proxy_pass http://primary-backend/original-application;
}
Run Code Online (Sandbox Code Playgroud)

但它没有。我试图通过编写主代理重定向到基于${cookie_proxy_override}的内容来查看 Nginx 是否可以读取我的 cookie ,我可以看到它读取的内容很好,但ifs 似乎总是失败。

根据 Rikih 的回答,我的下一次尝试是这样的:

location /original-request {
    if ($http_cookie ~ "proxy-target-A") …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite nginx reverse-proxy cookie

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

在nginx反向代理中,如何为cookies设置安全标志?

我正在使用 nginx 作为反向代理来为仅 https 站点提供服务。因此,我希望将此站点的 cookie 标记为安全。但是后端服务器是一个 http 服务器,因此它不会为其 cookie 设置安全标志。如何修改 Set-Cookie 标头以响应添加安全标志?

nginx reverse-proxy

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

如何配置 nginx 使其与 Express 一起使用?

我正在尝试配置 nginx,以便它proxy_pass向我的节点应用程序发出请求。关于 StackOverflow 的问题得到了很多赞成:https ://stackoverflow.com/questions/5009324/node-js-nginx-and-now ,我正在使用那里的配置。

(但由于问题是关于服务器配置,它应该在 ServerFault 上)

这是nginx配置:

server {
  listen 80;
  listen [::]:80;

  root /var/www/services.stefanow.net/public_html;
  index index.html index.htm;
  server_name services.stefanow.net;

  location / {
    try_files $uri $uri/ =404;
  }

  location /test-express {
    proxy_pass    http://127.0.0.1:3002;
  }    

  location /test-http {
    proxy_pass    http://127.0.0.1:3003;
  }
}
Run Code Online (Sandbox Code Playgroud)

使用普通节点:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(3003, '127.0.0.1');

console.log('Server running at http://127.0.0.1:3003/');
Run Code Online (Sandbox Code Playgroud)

有用! 检查:http : //services.stefanow.net/test-http

使用快递:

var express = require('express');
var app = …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy http-headers node.js

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

在 Nginx 中的位置下为多个代理端点提供服务

我有几个 API 端点,我想从一个位置下/api提供服务,子路径指向不同的端点。具体来说,我希望 webdis/api可以在/api/mypath.

我不担心与 webdis API 发生冲突,因为我使用的子路径不太可能与 redis 命令名称发生冲突,并且还可以完全控制 API 的设计以避免冲突。

这是我一直在攻击的测试服务器的配置文件:

server {
  listen 80;
  server_name localhost;
  server_name 192.168.3.90;
  server_name 127.0.0.1;

  location / {
    root /home/me/src/phoenix/ui;
    index index.html;
  }

  # temporary hardcoded workaround
  location = /api/mypath/about {
    proxy_pass http://localhost:3936/v1/about;
  }

  location /api {
    rewrite ^/api/(.*)$ /$1 break;
    proxy_pass http://localhost:7379/;
  }

  # tried this but it gives "not found" error
  #location ^~ /api/mypath/ {
  #  rewrite ^/api/mypath/(.*)$ /$1 break;
  #  proxy_pass http://localhost:3936/v1/;
  #} …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy

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

清漆与其他反向代理

我正在与一个组织合作,该组织已部署 Varnish 作为其所有 Web 流量的缓存反向代理。他们的流量由大量客户生成的动态网站组成,通常收集静态资产。

虽然我试图喜欢 varnish(原则上我认为它有一个非常好的架构),但我在管理它和解决出现的问题时遇到了一些麻烦,所以我想知道它是否真的是正确的选择。之前我用squid做反向代理,但是作用不同,所以没有比较明确的依据。

我的问题针对在生产中部署了 varnish 或针对替代方案认真评估它的人:您是坚持使用 varnish,还是最终使用了另一个反向代理?你坚持或转换的关键点是什么,如果你确实使用了其他东西,你最终使用了什么?

squid varnish reverse-proxy

13
推荐指数
1
解决办法
5082
查看次数

如何使用或不使用斜杠反向代理

我有一个需要反向代理站点的 Apache Web 服务器。所以example.com/test/example.com/test从同一个其他网络服务器中提取。我已经为没有斜杠的那个设置了一个反向代理,如下所示:

ProxyPass /test http://othersite.com/test
ProxyPassReverse /test http://othersite.com/test
Run Code Online (Sandbox Code Playgroud)

但它不适用于尾随斜线。

有任何想法吗?我试过从 重定向/test//test没有运气。

谢谢。

reverse-proxy apache-2.2

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

如何防止nginx反向代理特定的子目录

在 Apache 上,您可以 ProxyPass 除了一个或多个子目录(带有“!”)之外的所有内容。

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/
Run Code Online (Sandbox Code Playgroud)

什么是 Nginx 等价物?

我的第一个猜测显然不起作用:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }
Run Code Online (Sandbox Code Playgroud)

linux nginx reverse-proxy proxypass

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

无法让 mod_proxy 正确转发编码的斜杠 (/) 字符 (%2f)

我有一个虚拟主机设置为重定向ntung-gitblit.localhost--> myserver:1279。但是,它不适用于前向编码斜杠 ( %2f)。我试图访问的 URL 是,

http://ntung-gitblit.localhost/ABC%2fXYZ
Run Code Online (Sandbox Code Playgroud)

没有AllowEncodedSlashes,它会失败——apache 尝试/error/HTTP_NOT_FOUND.html.var在服务器上访问。设置AllowEncodedSlashesOn导致以下内部 URL 命中,

http://myserver:1279/ABC/XYZ
Run Code Online (Sandbox Code Playgroud)

并设置AllowEncodedSlashesNoDecode导致以下 URL 被命中,

http://myserver:1279/ABC%252fXYZ
Run Code Online (Sandbox Code Playgroud)

换句话说,它是过度逃逸或逃逸不足。问题:如何让它命中myserver:1279/ABC%2fXYZ

proxy reverse-proxy apache-2.2

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

NGINX Proxy_Pass 删除 url 子字符串

我有一个 NGINX 作为反向代理。我需要从 URL 中删除子字符串 string_1,URL 的其余部分是可变的。

例子:

Origin: http://host:port/string_1/string_X/command?xxxxx

Destination: http://internal_host:port/string_X/command?xxxxx
Run Code Online (Sandbox Code Playgroud)

nginx.conf:

location /string_1/   { 

    proxy_pass  http://internal_host:port/$request_uri$query_string;
Run Code Online (Sandbox Code Playgroud)

谢谢,

@pcamacho

nginx reverse-proxy regex

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