Articles of 反向代理

多站点Nginx反向代理路由到Apache

我正在运行一个Ubuntu 10.04 nginx服务器,用一个反向代理到apache(运行munin监视)。 这是我的默认Apache站点文件的摘录: <VirtualHost *:8090> ServerAdmin webmaster@localhost DocumentRoot /var/cache/munin/www <Directory /> Options FollowSymLinks AllowOverride None </Directory> 以及我的example.com nginxconfiguration文件的摘录: location /stats { proxy_pass http://127.0.0.1:8090/; proxy_redirect off; 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_buffers 32 4k; } 每当我去到example.com/stats,nginx指向apache通过端口8090,和apache提供了munin网站目录。 它工作很好。 但是如果我想添加另一个域名,例如example.org呢? 我会有另一个nginxconfiguration文件,但我怎么会使Apache的DocumentRoot别的东西? 由于请求是通过本地端口8090从nginx进入apache,apache如何确定请求来自哪个站点以及哪个DocumentRoot /configuration与它一起提供? 我假设我将不得不使用nginx( $host;或$proxy_add_x_forwarded_for;variables?)设置在Apache中的标头…

尝试在centos 5.5上安装varnish时出现错误信息

我正尝试使用命令yum install varnish install varnish在CentOS 5.5上安装Varnish,但由于此警告消息,无法完成安装过程: 警告:rpmts_HdrFromFdno:标题V3 DSA签名:NOKEY,密钥ID …… libedit-20090923-3.0_1.el5.rf.x86_64.rpm的公用密钥未安装 我如何解决这个问题?

使用Nginx作为apache的反向代理或单独使用

我已经阅读了很多关于这个问题(包括本网站的所有主题),不能作出决定性的决定。 对于超高负载的网站(每天数百万用户),更好的(性能和安全性): 独立的Nginx + PHP + SQL Nginx作为Apache + PHP + SQL的反向代理 我不明白的是 – 如果Nginx能运行dynamic内容,为什么要使用Apache呢?

Apache有select地将请求反向代理到新服务器

我正在将Web应用程序移动到不同数据中心中的一组新服务器。 作为testing期间的一部分,我想根据URL中的模式将旧服务器configuration为一些请求的反向代理。 例如,如果有人要求: http://old.example.com/foo/bar?q=1 …我想透明地给他们的结果 http://new.example.com/foo/bar?q=1 redirect不起作用,因为这被用作API,有些客户端没有正确地遵循redirect(固定客户端不是一个选项)。 而且,这需要同时适用于GET和POST请求。 要代理的URL列表将是有select性的,例如,以便只有"foo/*"请求将被代理,而其他代理将由old.example.com提供服务,直到最终切换。 是mod_proxy正确的方式去? 我找不到任何看起来像这样的例子: 允许select性代理(例如/foo/bar代理,但/baz/ham不是), 通过整个path和查询string,和 保持POST正文和所有的HTTP标题。 任何帮助将不胜感激。

Apache服务器:通过mod_proxy_wstunnel反向代理和websockets

我有一个networking套接字和我的反向代理Apache的一个小问题,我已经在最新版本2.4.5升级,并加载模块mod_proxy_wstunnel。 httpd.conf: <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName www.toto.fr ServerAlias toto.fr ProxyPass /my_app http://1X.XX1:8080/my_app ProxyPassReverse /web_pmr http://1X.XX1:8080/my_app ProxyPassReverseCookiePath /my_app / ProxyPassReverseCookieDomain localhost my_app ProxyRequests off ProxyTimeout 15 #WEBSOCKETS ProxyPass /my_app/BasicWebsocketServlet ws://1X.XX1:8080/my_app/BasicWebsocketServlet retry=0 ProxyPassReverse /my_app/BasicWebsocketServlet ws://1X.XX1:8080/web_pmr/BasicWebsocketServlet retry=0 ErrorLog "logs/my_app_error.log" LogLevel debug CustomLog "logs/my_app_access.log" combined <Proxy *> Order deny,allow Allow from all </Proxy> </VirtualHost> 当我testing我的本地URL,websockets正在工作,但与反向代理apache在tomcat日志中没有跟踪。 加载模块列表: Loaded Modules: […]

Nginx忽略用于caching某些文件的查询string

我知道我的设置有点疯狂,但无论…. 我在Openshift上设置了Nginx来caching地图查看器(对于地图查看器,您可以猜测目的:-)),这些地图查看器是从我的家庭networking(具有有限的带宽(愚蠢的无线连接!))提供的。 Openshift给我无限的带宽和1 GB的磁盘,这应该足以caching地图的stream行部分。 但是,地图查看器喜欢这样的请求: http://localhost/tiles/world/t/-1_0/-27_23.png?1381358434308 这使得nginx认为这个文件是不可caching的! 我已经做了一些Googlesearch,但是因为我在阅读和编写正则expression式时非常可怕,所以我想请求(从你这里)让nginx忽略.png文件的查询string,并且只提供没有请求参数。 以下是服务器configuration的相关部分: http { proxy_cache_path ${OPENSHIFT_RUNTIME_DIR}/cachefile levels=1:2 keys_zone=my-cache:599m max_size=700m inactive=250m; proxy_temp_path ${OPENSHIFT_RUNTIME_DIR}/cachefile/tmp; include mime.types; default_type application/octet-stream; # Format for our log files log_format main '$remote_addr – $remote_user [$time_local] $status ' '"$request" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; sendfile on; keepalive_timeout 5; access_log ${OPENSHIFT_LOG_DIR}/access.log; port_in_redirect off; server_tokens off; tcp_nopush on; […]

Apache反向代理到8080端口的tomcat应用程序在响应头中给出错误的URL

我有Apache(2.2)服务器与以下configuration反向代理到应用程序运行在8080端口上的tomcat(6)。 …. ServerName ext-domain ProxyPreserveHost On ProxyPass /myapp http://int-domain:8080/myapp ProxyPassReverse /myapp http://int-domain:8080/myapp …. 当我从浏览器访问URL下面 "http://ext-domain/myapp" 我在浏览器地址栏中获取下面的URLreplace。 "http://ext-domain:8080/myapp" 和Apache访问日志说… "GET /myapp HTTP/1.1" 302 421 "-" "Mozilla/5.0"… 如何避免在端口8080插入响应URL? 有人可以帮助吗? 谢谢。

Nginx反向代理没有SSL终止

我正在尝试在Windows 2k12服务器上设置Microsoft远程桌面Web服务。 这是完全的function,但是我想(需要)把一个反向代理(Nginx)的前面。 我只有一个外部IP(固定),我在它后面承载多个网站,不是在同一个虚拟机上。 我设法让Nginx作为HTTPSstream量和vhost的反向代理。 但是,对于远程桌面服务,启动应用程序时,SSL卸载会给我带来问题。 所以我想通过Nginx服务器传输stream量,没有SSL卸载,并让Windows服务器做所有的SSL的东西。 似乎即使没有input“ssl on” Nginx将另一个虚拟主机的证书放在RD Web的服务器部分。 我没有像我的configuration中任何地方的“ 默认 ”块。 这里有一个关于如何设置的小图: — |server 1 HTTP| |internet user| — |Nginx Rev Proxy listening on port 443| — |windows server| — |server 2 HTTP| 下面是我的configuration文件(对于RD Web): server { listen 443; server_name host.domain.com; access_log /var/log/nginx/host.domain.com.access.log; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; […]

主机头攻击与反向代理

所以我负责研究Acunetixnetworking安全扫描发现的问题。 以下是有关扫描的详细信息: Host_header_attack 主机头部攻击的自动检测 由于我没有足够的声望,所以我不能发布两个以上的链接,但是上面的第一个链接上的结构参考文献更详细地介绍了这个漏洞,似乎是这个主题的主要来源。 build议的解决方法build议使用“虚拟”默认虚拟主机和应用程序使用SERVER_NAME而不是使用主机头 。 当谈到一个真正的原始服务器时,这些build议是非常棒的,但是当你使用一个反向代理时,这些build议并不多。 我们的Acunetix正在扫描的网站被设置为一个位于逆向代理之后的应用服务器。 在我们的例子中,反向代理是iPlanet,但是我已经使用mod_proxy在Apache 2.4.7中确认了相同的行为。 这是它是如何工作的,为什么它会触发Acunetix扫描。 当使用绝对URI进行请求时(正如扫描程序所做的那样),根据RFC规范,服务器将忽略主机头,而是使用绝对URI内的主机。 这是我们看到的行为,因此,即使Host标头具有不正确的/恶意值,也会select正确的虚拟主机。 到现在为止还挺好。 当反向代理将此请求传递到后端原始服务器时,会出现问题。 当它这样做的时候,它会把原来的Host头和请求一起传递。 如果主机头有一个不正确的或恶意的值,这将被传回原始服务器。 如果源服务器不实现虚拟主机,则不需要validation主机头是否正确。 这样做的结果是任何运行在试图使用Host头的值的原始web / app服务器上的应用程序都将使用恶意主机值。 在这种情况下使用SERVER_NAME是没有用的,因为站点的服务器名称(或者真正的主机)没有被反向代理转发,并且源服务器仍然响应主机头值。 在这里使用UseCanonicalName和ServerNam e指令也是没有用的,因为您需要原始请求中的服务器名称(可能是多个值)。 这个“攻击”是在2013年发现的,但是我找不到很多关于它的信息,不仅仅是重复上面引用的细节。 这不是一个常见的问题,因为HTTP客户端不会发送绝对URI,除非他们正在与转发代理服务器交谈。 这意味着所有常规的请求都是相对的URI,这个问题就会消失(恶意主机头然后卡在反向代理上的“dummy”或默认虚拟主机上)。 我确实创build了一个解决方法,在请求发送到后端之前,反向代理主动将主机头设置为SERVER_NAME 。 这是有效的,但是我担心它是否可能是一种违背押注做法/标准的解决scheme。 将这样的主机头设置为什么会破坏? 我们对此进行了头脑风暴,但我无法想象它会如何。 我明天将打电话给甲骨文,以获得他们的反馈。 在我看来,这可能是一个这样的边缘案例,这只是我尝试的两个Web服务器产品的一个疏忽,但我无法想象有什么事情会持续很长时间而没有得到解决。 我肯定错过了什么。 对不起,这是很长的时间,但是,有什么想法? :)这篇文章的“问题”部分是这样的: 上面的解决方法是一个很好的解决scheme,还是会打破? 有这个问题的已知解决scheme吗?

如何将RDP连接转发到类似于Nginx的不同机器?

我有一个路由器被configuration为发送所有传入的stream量到一个单一的反向代理机器。 本机托pipeNginx,根据域名将stream量转发到不同的服务器。 例如, http://a.example.com/被转发到服务器A,并且http://b.example.com/被redirect到服务器B. 如何为远程桌面连接做同样的事情? 换句话说,如果我有托pipeWindows的服务器C和D,如何通过c.example.com:3389连接到networking外的服务器C,并通过d.example.com:3389连接到D?