希望你们能帮助我解决我遇到的代理问题。
我已经拥有的
我已经设置了一个 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 是没有选择的,因为它应该是一个精确的副本(不是我的决定......)
谢谢!
我需要在 Nginx 中创建一个非常简单的映射,将子路径重定向到位于同一子网中的另一台服务器。
我试着把它放在服务器部分
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 上有一个反向代理,它代理了很多站点。我最近为所有启用 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,这不起作用。我尝试了很多不同的方法来确保变量确实存在(就是这种情况),但似乎没有任何帮助。
我怎么能让这个工作?
我正在尝试配置 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 中,所以如果没有分叉整个库,我无法更改它们。
我已经设置并启动了默认的 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 时遇到问题。
我使用 nignx 作为反向代理。我想将所有请求发送到我的第一台服务器。如果第一台服务器关闭,我想向第二台服务器发送请求。
简而言之,如何在没有负载平衡的情况下拥有故障转移解决方案?
我有一个正在注入一些标头的代理,但我想修改它,以便它只设置标头(如果标头尚不存在):
<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)
这可能吗?
是否可以替换通过代理传递的每个页面上的内容,类似于 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)
<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) 第三方安全专家建议我们在 Web 服务器(均托管在 DMZ 中)前运行反向代理作为最佳实践安全措施。
我知道这是一个典型的推荐架构,因为它在 Web 应用程序前面提供了另一个级别的安全性以防止黑客。
然而,由于反向代理在用户和内部 Web 服务器之间愉快地来回穿梭 HTTP,它不会提供任何防止对 Web 服务器本身进行黑客攻击的措施。换句话说,如果您的 Web 应用程序存在安全漏洞,代理将不会提供任何有意义的安全性。
并且考虑到攻击 Web 应用程序的风险远高于攻击代理的风险,在中间添加一个额外的框真的有很多好处吗?我们不会使用反向代理的任何缓存功能——只是一个来回传输数据包的愚蠢工具。
还有什么我在这里想念的吗?反向代理 HTTP 数据包检查是否变得如此出色,可以检测到有意义的攻击而没有重大性能瓶颈,或者这只是安全剧院的另一个例子?
反向代理是 MS ISA fwiw。
我在 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) reverse-proxy ×10
nginx ×4
apache-2.2 ×3
proxy ×3
apache-2.4 ×2
http-headers ×2
failover ×1
grafana ×1
hostname ×1
isa-server ×1
mod-proxy ×1
mod-rewrite ×1
node.js ×1
rewrite ×1
security ×1
socket ×1
web-server ×1