我的 apache (2.2.3) 通过 mod_proxy_ajp 与 tomcat 6.something 对话。
我有一些荒谬的长期请求(2-6 分钟),我认为我们在某个地方遇到了一些默认超时......哪里是提高它的正确位置?
这是我的代理定义:
<Location /blah>
ProxyPass ajp://localhost:8010/blah
ProxyPassReverse ajp://localhost:8010/blah
</Location>
Run Code Online (Sandbox Code Playgroud) 我的问题是关于使用 Nginx 作为另一个代理背后的代理。(有点混乱。)
我想设置 Nginx,以便它充当 npm 镜像的缓存代理服务器。这是链接:http : //eng.yammer.com/a-private-npm-cache/
在我的本地机器上,不受防火墙限制,以下配置工作正常:
proxy_cache_path /var/cache/npm/data levels=1:2 keys_zone=npm:20m max_size=1000m
inactive=365d;
proxy_temp_path /var/cache/npm/tmp;
server {
listen 80;
server_name classen.abc.lan;
location / {
proxy_pass http://registry.npmjs.org/;
proxy_cache npm;
proxy_cache_valid 200 302 365d;
proxy_cache_valid 404 1m;
sub_filter 'registry.npmjs.org' 'classen.abc.lan';
sub_filter_once off;
sub_filter_types application/json;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想将它应用到位于附加防火墙后面的服务器。在日志中,我可以确认它访问了正确的上游 IP,但由于内部防火墙,请求失败。
我们有一个内部代理,我可以用它绕过防火墙,例如:
$ curl http://registry.npmjs.org
curl: (7) couldn't connect to host
$ http_proxy=http://proxy.abc.lan:1234/ curl http://registry.npmjs.org
... succeeds ...
Run Code Online (Sandbox Code Playgroud)
这个技巧不适用于 Nginx,因为它忽略了http_proxy环境变量。看了文档,还是想不通怎么修改配置,让它内部可以使用代理。
是否可以结合两种解决方案?重要的是缓存仍然有效,否则,您可以直接使用外部镜像 registry.npmjs.org。
也许,Nginx 应该使用内部代理(proxy.abc.lan)作为proxy_pass,但是内部代理如何知道应该将请求发送到外部 npm 镜像( …
我正在尝试设置一个反向代理,以只允许几个选定的 ip 范围代理到内部主机,而我希望不在 ip 范围内的任何其他人重定向到我们的内部命名主机。在此设置中,网络服务将正常工作,而没有通过 VPN 连接到我们网络的任何人都无法导航到内部资源。我一直试图让它在没有运气的情况下工作,我的部分配置目前如下:
ProxyRequests Off
<Proxy *>
Allow from all
</Proxy>
<Location />
Allow From xxx.xxx.xxx.xxx/24 1xxx.xxx.xxx.xxx/23
Deny From All
ProxyPass http://server.local.corp:8000/
ProxyPassReverse http://server.local.corp:8000/
</Location>
Run Code Online (Sandbox Code Playgroud)
此配置似乎可以很好地阻止其他 ip 范围进行代理,但是我不清楚如何为其他人添加重定向语句。
编辑 从第一个答案中获取建议我的代码现在看起来像:
<If "%{REMOTE_ADDR} -ipmatch 'xxx.xxx.xxx.xxx/24'">
ProxyPass / http://server.local.corp:8000/
ProxyPassReverse / http://server.local.corp:8000/
</If>
Run Code Online (Sandbox Code Playgroud)
并且 apache 在重启时抛出以下错误:
ProxyPass cannot occur within <If> section
Action 'configtest' failed.
The Apache error log may have more information.
Run Code Online (Sandbox Code Playgroud) 我有一个 Python 脚本,它应该从我们的服务器到互联网访问各种 Web API。问题是,在支持 NTLM 身份验证方面,我所看到的 Python 支持非常差。这会导致我们的公司代理服务器始终返回 HTTP 代码 407。我最初的想法是使用 IIS 和应用程序请求路由模块设置本地代理服务器,它将在处理 NTLM 身份验证时将所有请求转发到我们的公司代理。这种方法的问题在于它似乎没有转发我的 NTLM 凭据,当前用户正在从中运行 Python 脚本。
这种方法会奏效吗?如果是这样,我该如何实施?
我在配置 nginx 时遇到问题,我在网上搜索了解决方案,我有一些零碎的东西,但我仍然无法提出正确的配置。
我已经注册了一个域,比方说 - www.example.com。我已经在注册商网站上配置了所有内容,ping www.example.com 和 www.*.example.com 成功。
我的机器上运行着 Apache Tomcat,监听端口 8080。我想设置动态 proxy_pass。因此,如果我在 tomcat 中运行应用程序 MyApp 并可通过 localhost:8080/MyApp 访问,我希望能够使用 www.MyApp.example.com 访问它,所以基本上子域将是应用程序在 tomcat 中的名称。
这是我的 nginx 配置:
server {
server_name ~^(www\.)?(?<sub_domain>.+)\.example\.com$;
listen 80;
location / {
proxy_pass http://localhost:8080/$sub_domain/;
}
}
Run Code Online (Sandbox Code Playgroud)
当我访问 www.myapp.example.com 时,我被重定向到http://localhost:8080/myapp- 我的意思是我最终进入了http://localhost:8080/myapp我的浏览器。
但是,如果我将 nginx 设置中的正则表达式更改为:
server {
server_name www.myapp.example.com myapp.example.com
listen 80;
location / {
proxy_pass http://localhost:8080/myapp/;
}
}
Run Code Online (Sandbox Code Playgroud)
然后一切都像魅力一样。我知道它必须对解析器做些什么,我已经尝试将解析器放在 nginx 中,但它没有任何改变。
我在这里缺少什么?
//编辑:
这是我的配置。我仍然被重定向到 www.myapp.example.com/myapp/login 而不是 www.myapp.example.com/login。我已经改变了正则表达式,还是一样。
http {
upstream backend { …Run Code Online (Sandbox Code Playgroud) 我有很多服务器可以访问各种外部网络服务,其中大部分使用 SSL,其中一些需要客户端证书。我想集中客户端证书的配置并将表示层与底层服务器分离。
虽然我可以使用 Squid 来代理请求,但我无法从文档中看到如何告诉 Squid 选择特定于目标 Web 服务的客户端证书。这可能吗?
一种方法是在 Squid 代理之外维护一组 stunnel 实例,然后将客户端软件配置为使用带有 URL 重写器的 http 请求来通过适当的 stunnel 实例路由请求,但是如果我得到 XML 响应引用,则会中断HTTPS DTD(除非我用完整的 MITM 重写内容)。
还有其他解决方案吗?
更新
将“https”重写为“http”的问题在于,它会破坏带有 http URI 的任何其他资源——因为协议适配器会将这些资源转换回 https!
我遇到了这篇文章,它解决了将客户端证书添加到代理连接的问题 - 这可能是一个解决方案。但是确实需要将客户端配置为使用代理,在命名事物以及如何使其与拆分 DNS 一起工作方面也存在问题。不可否认,这不是什么大问题,但它让我想到我在这里描述的是大多数 CDN 提供商使用的模式 - 因此我目前正在考虑使用 Apache Traffic Server 作为中间组件 - 这允许使用拆分 DNS,在之间使用单独的 SSL 通道客户端和源,以及用于与源服务器通信的客户端证书。
我有一个上游服务器处理我们网站的登录。成功登录后,我想将用户重定向到站点的安全部分。在登录失败时,我想将用户重定向到登录表单。
上游服务器200 OK在登录成功和401 Unauthorized登录失败时返回。
这是我的配置的相关部分:
{
error_page 401 = @error401
location @error401 {
return 302 /login.html # this page holds the login form
}
location = /login { # this is the POST target of the login form
proxy_pass http://localhost:8080;
proxy_intercept_errors on;
return 302 /secure/; # without this line, failures work. With it failed logins (401 upstream response) still get 302 redirected
}
}
Run Code Online (Sandbox Code Playgroud)
此设置在成功登录时有效。客户端使用 302 重定向。这在登录失败时不起作用。上游服务器返回 401,我预计它error_page会启动。但我仍然得到 302。如果我删除该return 302 /secure/ …
我最近遇到了某种安全设备 (BlueCoat),它要求所有到 Internet 的连接都必须通过它进行代理(你好,中间人),因此使用特殊的 SSL 证书来拦截所有流量。
这阻止了 Git 的正常操作,即使设置了适当的http.proxy和http.sslCAInfo属性以确保 SSL 连接本身有效。
使用环境变量GIT_CURL_VERBOSE=1,我们发现在使用时git clone,会出现HTTP 407(需要代理认证)。Git 正确完成此身份验证,最后,设备返回带有 cookie 标头的 HTTP 200 Set-Cookie。
Git 然后将连接到目标服务器,但没有cookie,导致 HTTP 401。
解决这个问题的方法是设置git配置选项 http.saveCookies=true
问题: 中间代理添加cookies真的是RFC标准允许的吗?
Anthony Rich向 http-state 邮件列表提出了同样的问题,但没有任何回应。他确实注意到在
RFC 2965 HTTP 状态管理机制,3.5 缓存代理角色它说:代理不得在代理响应(请求)中引入自己的 Set-Cookie2 (Cookie) 标头。
但是,取代的 RFC 6265根本不再提及这一点。
我正在 AWS 上设置堡垒主机(这里有一些详细信息:https : //www.nadeau.tv/ssh-with-a-bastion-host/),以允许我安全访问我拥有的其他 EC2 实例亚马逊。
我在尝试通过堡垒主机进行代理时遇到了一些问题。
我的 SSH 配置文件如下:
# Bastion Host
Host bastion
User ec2-user
Hostname XX.XX.XX.XXX
IdentityFile ~/.ssh/keys/bastion.pem
# EC2 Instance
Host 172.*
User ec2-user
IdentityFile ~/.ssh/keys/bastion.pem
ProxyCommand ssh bastion -W %h:%p
Run Code Online (Sandbox Code Playgroud)
以下是命令行的详细输出:
Jeff-Bezos-iMac:tmp jeff$ ssh 172.xx.x.xx -v
OpenSSH_7.4p1, LibreSSL 2.5.0
debug1: Reading configuration data /Users/jeff/.ssh/config
debug1: /Users/jeff/.ssh/config line 9: Applying options for 172.*
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Executing proxy command: exec ssh bastion -W 172.xx.x.xx:22
debug1: key_load_public: No such file or …Run Code Online (Sandbox Code Playgroud) 这是我的场景:
~/.ssh/id_rsa.pub(来自 A)authorized_keys~/.ssh/id_rsa),因为它存在安全风险(密钥是个人的)。如何使用主机 A 中的密钥登录主机 C?这可能吗?我怕不是。
(与此问题类似但不同)
我需要的是一种在不接触 B 中的文件系统的情况下,即时(stdin 或类似)向 B 中的 ssh 跃点提供私钥的方法。这可能吗?
proxy ×10
nginx ×3
firewall ×2
linux ×2
ssh ×2
ajp ×1
apache-2.2 ×1
apache-2.4 ×1
bash ×1
cache ×1
cookie ×1
http ×1
http-headers ×1
proxypass ×1
redirect ×1
ssl ×1
tomcat ×1
web-services ×1
windows ×1