标签: reverse-proxy

Grails重定向 - 为什么它总是绝对的?

我有两个Jetty AppServers在Apache 2.2反向代理后运行Grails Web App.SSL终止由apach完成,后者将HTTP传递给Jetty AppServers.

当Grails Web应用程序执行重定向时

redirect(action:'index')
Run Code Online (Sandbox Code Playgroud)

最终用户收到带有完整URL的HTTP 302重定向请求,该URL使用http://协议,而不是https://:

HTTP/1.1 302 Found
Date: Tue, 08 Mar 2011 17:50:46 GMT
Server: Jetty(6.1.17)
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Location: http://hostname.domain/web/?lang=en
Run Code Online (Sandbox Code Playgroud)

这很烦人,因为所有HTTP请求都被代理捕获并重定向到HTTPS请求.所以这是一次不必要的往返.

我看到两个解决方案:

  1. Apache的mod_proxy可以在将响应传递给用户之前将该Location-header重写为https://.(它可以?)
  2. 重定向时,Grails可能根本不使用绝对URL: Location: /web/?lang=en

我认为第一个选择有点愚蠢吧?

你知道如何让grails发送非绝对重定向头(理想情况下无需切换每个重定向uri:)吗?

编辑:目前我通过修改响应标头(a2enmod headers然后添加)Header edit Location ^http://(.*)$ https://$1在第一种方法之后有一个解决方法<Location>.灵感来自这个serverfault帖子.我仍然想知道为什么这首先是必要的.

https grails redirect reverse-proxy

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

什么是反向代理,我为什么要将它与Node.JS一起使用?

Ryan Dahl建议在反向代理(即nginx)后面使用Node.JS.嗯..什么是反向代理?我为什么要将它与node.js一起使用?我的Node.JS应用程序是否会提供所有内容和所有流量,这是错误的吗?

提前致谢.

reverse-proxy node.js

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

如何在NginX反向代理配置中更正Meteor base-url?

我通过反向代理(在Ubuntu服务器上)在NginX后面安装了Apache和Meteor.Apache直接映射为baseURL(www.mydomain.com/),Meteor映射为子文件夹(www.mydomain.com/live/).

我遇到的问题是我的Meteor测试(在端口3000处按预期工作)在NginX后面停止工作,因为每个引用(CSS,Javascript,模板)对于baseURL是绝对的.

<html>
<head>
  <link rel="stylesheet" href="/live.css?abc">
  <script type="text/javascript" src="/packages/underscore/underscore.js?efg"></script>
  ...
  <script type="text/javascript" src="/template.live.js?hij"></script>
  <script type="text/javascript" src="/live.js?klm"></script>
</head>
Run Code Online (Sandbox Code Playgroud)

显然,由于Apache是​​在baseURL上映射的,因此在通过NginX进行测试时找不到这些文件.

什么是解决问题的最佳方法?系统管理不是我的强项,Meteor是我在服务器端javascript的第一次入侵.所以我甚至不知道这是否可以修复,如果是,如果是通过服务器配置,Meteor配置或以编程方式完成的.


编辑:Meteor 0.4.0中新的"absolute-url"软件包解决了这个问题!

http://docs.meteor.com/#absoluteurl

javascript reverse-proxy nginx base-url meteor

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

用于tomcat的Nginx反向代理

我有问题让我的nginx + tomcat 7反向代理设置工作.

基本上我想https://192.168.10.101从上游集群/ webapp /中提供内容; 但是我从我的应用程序获得了404页面.

关于什么是错误的任何提示将不胜感激.

我的配置如下.

server {

            server_name 192.168.10.101;
            access_log /var/log/nginx/mysite-access.log;
            listen   443;
            ssl on;
            ssl_certificate    /etc/nginx/ssl/mysite.crt;
            ssl_certificate_key    /etc/nginx/ssl/private/mysite_pvt.key;

                location  / {
                        proxy_redirect off;
                        proxy_pass      https://tccluster/webapp/;
                        rewrite_log     on;

                        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_max_temp_file_size 0;

                }
}

upstream  tccluster  {
                server   192.168.56.103:8443;
                server   192.168.56.104:8443;
}
Run Code Online (Sandbox Code Playgroud)

reverse-proxy nginx tomcat7

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

在android上https到http反向代理应用程序?

我正在尝试设置一个解决方案,允许直接在Android平板电脑上完整调试javascript代码.这是一个在标准移动浏览器(如Chrome或Firefox)中运行的HTML5应用,需要调试."完全"是指需要设置断点并逐步执行代码(in,over,out)的能力.

能够直接在设备上进行调试对于远程调试的PC不可用的现场情况非常重要.在某些时候,将需要调试具有脱机功能的Web应用程序的能力,代理服务器将不必执行任何操作,假设前端代码已经加载到浏览器中和/或在丢失网络连接之前缓存在设备上,但这不是这个问题的焦点.

我能够得到一个Weinre解决方案,但发现Weinre没有设置断点或单步执行代码的能力.然后我发现了jsHybugger应用程序,一个付费产品,我可以在平板电脑上运行,代理请求到服务器,然后提供调试界面,我可以使用同一个Android平板电脑设备上的不同浏览器选项卡实际查看.

我遗漏的部分是jsHybugger不支持https,因此不会与提供要调试的代码的服务器通信.使用https而不是http非常重要,因为在服务器和浏览器之间传递敏感信息.由于调试是在现场进行的,因此不像在局域网上缺少https并不那么重要.总是可以在更受控制的设置中进行一些调试,但是在现场中不可避免地会出现错误,这需要使用真实(非虚拟或消毒的http)数据进行"紧急调试".

我知道有反向代理 - 例如我可以很容易地将代理https反向到apache中的http.但问题是,由于平板电脑和服务器之间的连接需要加密,我不能在服务器上进行代理,而且由于另一个(非Android)设备并不总是可用,我需要在平板电脑.到目前为止,我还没有发现任何应用程序显然看起来他们会做我需要的.例如,我看过i-Jetty,因为我已经读过Jetty(基于它)可以做我正在寻找的东西,但我在代理上看到的所有例子都是Java代码,我想避免需要为此自己编写任何代码.我也看过Fiddler,但它似乎没有在Android上运行,尽管大胆宣称它是"任何浏览器,系统或平台的免费网络调试代理".显然,无论您使用什么平台或语言开发,"Fiddler都会随时为您提供帮助".在这种情况下是错误的.我还查看了Google Play商店中的各种应用,却没有找到任何内容.也许这个功能并没有突出显示,我错过了它.希望有一些应用程序已经做了我需要的最少的配置摆弄.理想情况下它不需要root; 如果它确实不是一个显示停止,但它不太优选作为生根只是为了能够调试可能是一个麻烦,因为我们没有其他任何需要它,并且一些设备比其他设备更加繁琐.

或者,如果有更好的方法来完成我想要做的事情,我会接受这个作为答案.

javascript debugging https android reverse-proxy

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

使用Azure网站反向代理

我在Azure网站上托管了一个Web应用程序.我正在从另一个级别消费API(有方法PUT,POST,GET,DELETE)..我想让我的web应用程序与IE8和IE9兼容,但不幸的是,它不支持PUT的CORS,即使使用XDomainRequest补丁也可以删除.

现在,我想使用像反向代理这样的东西,以便它会认为请求来自同一个域.可能是反向代理

是否可以在Azure网站?如果是,那怎么样?

reverse-proxy azure cors

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

如何使用正则表达式执行proxypassreverse

这几天我遇到了这个问题,我正在使用Apache服务器的反向代理,我设法通过在配置文件中进行以下更改来运行反向代理:

ProxyPass: /server-01/ server-01.{My server}
ProxyPassReverse: /server-01/ server-01.{My server}

ProxyPass: /server-02/ server-02.{My server}
ProxyPassReverse: /server-02/ server-02.{My server}

ProxyPass: /server-03/ server-03.{My server}
ProxyPassReverse: /server-03/ server-03.{My server}

ProxyPass: /server-04/ server-04.{My server}
ProxyPassReverse: /server-04/ server-04.{My server}
Run Code Online (Sandbox Code Playgroud)

所有这一切都有效,但我想让它变得动态,这样我就不必添加新代码并在添加新代理服务器时重新启动Apache!

regex apache reverse-proxy

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

Adminer通过反向代理登录

我正在运行Nginx,它被配置为允许我访问另一个可用作反向代理的服务器上的多个资源.例如

main server:http://example.com
slave: http://example.com/slave
adminer on slave: http://example.com/slave/admin/adminer.php
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都好.我在Adminer中输入我的数据库用户名和密码,麻烦就开始了.检查Adminer登录后返回的标题我注意到它发回了一个

Location:/admin/adminer.php?username=user
Run Code Online (Sandbox Code Playgroud)

头.这是麻烦的根源.在我的浏览器中,当然,这被解释为相对于当前服务器而不是反向代理的含义.我找到了一个hainer the adminer代码,找到了一个有一个Location头的地方,但是它刚刚停止了它的轨道.

我怎样才能防止这种情况发生?我考虑在Nginx上运行一个Lua脚本来检查标题并替换它,但它让我感到震惊,即使我让它工作,我也会让我的服务器做大量不必要的工作.

我非常感谢任何帮助.


编辑

在探讨了这个问题之后,我开始认为,顾客可能没有做太多错误.它实际上使用$ _SERVER ['REQUEST_URI']值来构造位置标头,而这恰好很少/admin/adminer.php.我注意到引用,$ _SERVER ['HTTP_REFERRER']具有完整的原始请求路径http://example.com/slave/admin/adminer.php.所以解决方案是发送回位置/slave/admin/adminer.php?username=user.

简单?好吧,问题是我的设置/slave/会变化,所以我需要在代码中解决它.我可以用一个PHP的地方很容易地做到这一点,但我想知道...肯定有一个更容易的选择由Nginx提供?

我或许应该提一下

  • Ubuntu 14.04主从和奴隶
  • Nginx 1.6.2安装了小瓶apt-get nginx-extras(Lua模块启用了味道)
  • php5-fpm 5.5.9
  • MariaDB 10
  • Adminer 4.2.1

reverse-proxy nginx adminer

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

nginx:[emerg]"server"指令在/etc/nginx/nginx.conf:98中是不允许的

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy nginx

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

使用负载均衡器而不是代理服务器

我打算在同一个域上运行Java Web应用程序(www.example.com)和wordpress博客(www.example.com/blog).

Tomcat服务器提供我的Java Web应用程序内容,Apache服务器提供WordPress内容.

最初,我打算使用代理服务器将所有博客请求路由到Apache服务器,并将所有其他请求路由到Tomcat(http://tomcat.apache.org/tomcat-8.0-doc/proxy-howto.html)(I我不确定我将如何实施,因为我还没有完成它.

但是,我最近了解了AWS Application Load Balancer.使用LB我可以根据url路径将请求路由到特定端口,因此我可以使用它将所有www.example.com/blog请求路由到Apache服务器(在端口80上)和所有www.example.com请求Tomcat服务器(端口8080).

我有什么理由不这样做吗?由于Application Load Balancer是一个相对较新的产品,因此大多数文档都推荐使用代理服务器解决方案,但我认为没有理由不使用Application Load Balancer解决方案.

谢谢.

proxy tomcat reverse-proxy amazon-web-services

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