我的Web应用程序在Tomcat中运行,http://localhost:8080/example.com/但它正在从http://example.com/端口80上提供的Apache进行反向代理.我的Web应用程序查看request.getHeader("x-forwarded-host")标头以了解它是在反向代理之后.当它(动态地)检测到它时,它会在没有servlet路径的情况下构建URL.
这适用于除JSESSIONID cookie之外的所有内容.它通过路径/example.com而不是/通过反向代理访问时设置.我无法弄清楚当代码上有x-forwarded-host标题时,我的代码如何告诉Tomcat覆盖该cookie的路径.
我自己尝试从Web应用程序设置JSESSIONID cookie,但这只会产生两个Set-Cookie标头,其中只有一个是正确的.
我有两个带nginx的docker容器.container1链接到container2.Docker然后在/ etc/hosts中添加一个条目,我将其输入到nginx配置中,如下所示:
server {
location ~ ^/some_url/(.*)$ {
proxy_pass http://container1/$1;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以从container2 ping 容器1,但是nginx无法解析它:
*1没有定义解析容器1的解析器
我怎样才能将请求委托给另一个docker容器?
我使用nginx作为几个tomcats前面的负载balencer.在我的传入请求中,我编码了查询参数.但是当请求到达tomcat时,参数被解码:
传入nginx的请求:
curl -i "http://server/1.1/json/T;cID=1234;pID=1200;rF=http%3A%2F%2Fwww.google.com%2F"
Run Code Online (Sandbox Code Playgroud)
传入tomcat的请求:
curl -i "http://server/1.1/json/T;cID=1234;pID=1200;rF=http:/www.google.com/"
Run Code Online (Sandbox Code Playgroud)
我不希望我的请求参数被转换,因为在那种情况下我的tomcat会抛出405错误.
我的nginx配置如下:
upstream tracking {
server front-01.server.com:8080;
server front-02.server.com:8080;
server front-03.server.com:8080;
server front-04.server.com:8080;
}
server {
listen 80;
server_name tracking.server.com;
access_log /var/log/nginx/tracking-access.log;
error_log /var/log/nginx/tracking-error.log;
location / {
proxy_pass http://tracking/webapp;
}
}
Run Code Online (Sandbox Code Playgroud)
在我当前的apache负载均衡器配置中,我有AllowEncodedSlashes指令来保留我的编码参数:
AllowEncodedSlashes NoDecode
Run Code Online (Sandbox Code Playgroud)
我需要从apache转移到nginx.
我的问题与这个问题完全相反:避免nginx在proxy_pass上转义查询参数
我不知道为什么在Jenkins更新到版本1.591(Ubuntu Server 12.04)之后,最初正确设置的反向代理现在变得破碎了.我当前的设置与Jenkins wiki中的设置完全相同:
ProxyPass /jenkins http://localhost:8081/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8081/jenkins
ProxyPreserveHost On
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy http://localhost:8081/jenkins*>
Order deny,allow
Allow from all
</Proxy>
Run Code Online (Sandbox Code Playgroud)
也--prefix=/jenkins已被添加到/etc/default/jenkins文件中
这是詹金斯的错误吗?
我在标准反向代理场景中使用 nginx,将所有请求传递/auth到另一台主机,但是我正在尝试使用非标准端口。
我的最终目标是将X-Forwarded-Port标头设置为请求进入的端口。
这是我在 nginx.conf 中的位置块:
Run Code Online (Sandbox Code Playgroud)location /auth/ { proxy_pass http://otherhost:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port <VAR>; }
这个 nginx 运行在一个 docker 容器中,该容器被配置为将请求从 8085 转发到容器中的 80,这样 nginx 进程就可以监听 80:
0.0.0.0:8085->80/tcp
当我点击网址时:
我正确重定向到http://otherhost:8090,但X-Forwarded-Port标题丢失或错误。
在<VAR>原始块中,我尝试了以下操作:
$server_port - 这是 nginx 正在侦听的端口 (80),而不是请求端口。
$pass_port - 在我的设置中似乎为空,因此 nginx 删除了标头。
$http_port - 这是每个请求的随机端口。
$remote_port - 这是每个请求的随机端口。
我可以在部署时将我的配置更改为硬编码到传入请求的已知端口,但理想情况下,我将能够更改前端端口,而无需对 nginx 配置进行任何更改。
我已经搜索了 …
reverse-proxy nginx docker x-forwarded-for nginx-reverse-proxy
我已经设置了2个apache服务器.一个在端口80上,另一个在端口8077上.我想通过反向代理在8077上查看服务器上的所有内容.目前我有:
ProxyPreserveHost Off
ProxyHTMLInterp On
ProxyPass /translate/ http://www.example.com:8077/
ProxyPassReverse /translate/ http://www.example.com:8077/
ProxyHTMLURLMap / /translate/
Run Code Online (Sandbox Code Playgroud)
这允许我到达网站的初始页面,但图像,CSS和其他页面的链接不起作用.
例如,html中的css显示为
/css/style.css
Run Code Online (Sandbox Code Playgroud)
我真正希望它在哪里
/translate/css/style.css
Run Code Online (Sandbox Code Playgroud)
它从8077服务器获取文件.如何使用当前设置才能使其正常工作?
我有两个Java Web应用程序,它们具有映射到特定URL的单个servlet:
red.war/
WEB-INF/classes
com.me.myorg.red.RedServlet (maps to http://red.example.com/doStuff)
blue.war/
WEB-INF/classes
com.me.myorg.blue.BlueServlet (maps to http://blue.example.com/doStuff)
Run Code Online (Sandbox Code Playgroud)
我想把这些应用程序(我称之为"后端应用程序")放在"代理应用程序"(servlet)后面,这将决定这两个应用程序中的哪一个最终将服务于客户端请求.
此代理Web应用程序将接收传入的HTTP请求,并确定将请求转发到的2个"后端应用程序"(红色或蓝色)中的哪一个.然后,请求将转发到http://red.example.com/doStuff(或然后由其处理RedServlet#doGet(...))或http://blue.example.com/doStuff(然后由其处理BlueServlet#doGet(...)).然后,来自后端应用程序的返回响应(再次,RedServlet#doGet(...)或者BlueServlet#doGet(...))将返回到代理servlet,并最终返回给客户端.
换句话说,在伪代码中:
public class ProxyServlet extends HttpServlet {
@Override
public doGet(HttpServletRequest request, HttpServletResponse response) {
String forwardingAddress;
if(shouldBeRed(request))
forwardingAddress = "http://red.example.com/doStuff";
else
forwardingAddress = "http://blue.example.com/doStuff";
PrintWriter writer = response.getWriter();
writer.write(getResponseFromBackend(forwardingAddress, request));
}
private String getResponseFromBackend(String addr, HttpServletRequest req) {
// Somehow forward req to addr and get HTML response...
}
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是这样,我需要编写的代码和代码才能使其工作?
我正在寻找一种简单地在本地设置连接到远程站点的代理的方法.我不想在系统中安装任何东西.如果我可以通过单个命令行调用来调用它,而不是使用单个配置文件,那就太棒了.
目的是嗅探我正在开发的本地应用程序与其他人提供并使用HTTPS的远程服务器之间的流量.
最好是Ruby,Python或Node包,这样我就可以按照以下方式做一些事情:
mkdir simplest-proxy; cd simplest-proxy; bundle init
echo "gem 'simplest-proxy'" >> Gemfile; bundle --path vendor/bundle
bundle exec bin/simplest-proxy -p 8080 https://remote.site.example.com/
Run Code Online (Sandbox Code Playgroud)
要么
virtualenv simplest-proxy; cd simplest-proxy
bin/easy_install simplest-proxy
bin/simplest-proxy -p 8080 https://remote.site.example.com/
Run Code Online (Sandbox Code Playgroud)
要么
mkdir simplest-proxy; cd simplest-proxy
npm install simplest-proxy
node_modules/.bin/simplest-proxy -p 8080 https://remote.site.example.com/
Run Code Online (Sandbox Code Playgroud)
它将允许我的应用程序连接到localhost:8080,它将转发请求(并重写Host标题和其他任何必要的)到远程站点.我可以lo在WireShark中观看并了解发生了什么.
我已经快速浏览了pypi,rubygems和npm,但是到目前为止我发现的要么是不工作(proxylet否则看起来很有希望),用于更复杂的场景并需要设置(dj-revproxy)或期望是用正确的Host(node-reverse-proxy)调用而不是重写.
更新:我现在正在使用带有ProxyPass/ ProxyPassReverseconfig 的Apache ,但它感觉有点过分,需要使用配置文件.
更新:另一个不适用的解决方案是实际的HTTP代理,而不是模拟远程站点的代理.因为远程站点是一个HTTPS站点,这只会使我的应用程序在代理中执行CONNECT并且没有获得任何内容.
我们使用Nginx作为此设置的反向代理:
upstream frontends {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
[...]
}
server {
location / {
proxy_pass http://frontends;
[...]
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
作为访问日志的一部分,我想记录为请求提供服务的上游服务器,在我们的例子中,这意味着关联的localhost端口.
文档中的变量(http://wiki.nginx.org/HttpProxyModule#Variables)提到$ proxy_host和$ proxy_port,但在日志中它们总是以"frontends"和"80"的值结束.
我在http:// localhost:5984 /上运行了apache couchDB ,我需要访问http:// localhost:80/couch /.我需要为此设置反向proxi.需要有关配置设置的帮助.
PS:什么是了解apache的最佳资源?