标签: reverse-proxy

lighttpd作为反向代理

DeviceA充当反向代理,应该按如下方式转发请求:

192.168.1.10/DeviceB ==> 192.168.1.20/index.html

192.168.1.10/DeviceC ==> 192.168.1.30/index.html

两个索引文件都位于/ var/www下,并且是静态的"Hello world!" 页面.问题是我无法通过DeviceA访问这些文件,但如果我调用也在DeviceC上运行的测试服务(侦听端口12345),一切正常.

我错了说DeviceB上的Web服务器,如果端口80上有请求,DeviceC应该用index.html响应???

lighttpd.conf DeviceA @ 192.168.1.10 server.modules =("mod_proxy")

proxy.server = ( 
"/DeviceB" => ( "" => ( "host" => "192.168.1.20", "port" => 80 )),
"/DeviceC" => ( "" => ( "host" => "192.168.1.30", "port" => 80 )),  
"/TestService" => ( "" => ( "host" => "192.168.1.30", "port" => 12345 ))
)
Run Code Online (Sandbox Code Playgroud)

lighttpd.conf DeviceB @ 192.168.1.20

server.document-root = "/var/www"
server.port = 80
index-file.names = ( "index.html" )
Run Code Online (Sandbox Code Playgroud)

lighttpd.conf DeviceC @ 192.168.1.30 …

reverse-proxy lighttpd mod-proxy

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

nginx反向代理到在localhost上运行的后端

编辑:事实证明,我的设置实际上是有效的.以前,我正在重定向到端口36000,但这是由于我的后端应用程序上的一些配置设置造成的.

我不完全确定,但我相信我可能想要使用nginx设置反向代理.

我在端口36000上的服务器上运行了一个应用程序.默认情况下,端口36000不可公开访问,我的目的是让nginx监听公共URL,将任何对url的请求指向运行在端口36000上的应用程序.在整个过程中,用户不应该知道他/她的请求被发送到在我的服务器端口36000上运行的应用程序.

换句话说,假设我的网址是http://domain.somehost.com/

在访问http://domain.somehost.com/时,nginx应该接收请求并将其重定向到端口36000上已在服务器上运行的应用程序,应用程序执行一些处理,然后传回响应.端口36000不可公开访问,不应显示为任何URL的一部分.

我尝试了一个看起来像这样的设置:

server {
    listen 80;
    server_name domain.somehost.com
    location / {
        proxy_pass http://127.0.0.1:36000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
Run Code Online (Sandbox Code Playgroud)

并包括我的主要nginx.conf中

但是,它要求我将端口36000公开访问,并且我试图避免这种情况.端口36000还显示为Web浏览器中转发URL的一部分.

有什么方法可以做同样的事情,但没有使端口36000可访问?

谢谢.

reverse-proxy nginx

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

Nginx,同时使用粘性和最少连接算法进行负载平衡

我们使用Nginx作为websocket应用程序的负载均衡器.每个后端服务器都会保留会话信息,因此客户端的每个请求都必须在同一服务器上转发.所以我们使用ip_hash指令来实现这个目的:

upstream app {
    ip_hash;
    server 1;
}
Run Code Online (Sandbox Code Playgroud)

当我们想要添加另一个后端服务器时,会出现问题:

upstream app {
    ip_hash;
    server 1;
    server 2;
}
Run Code Online (Sandbox Code Playgroud)

新的连接转到服务器1和服务器2 - 但这不是我们在这种情况下需要的,因为服务器1上的负载继续增加 - 我们仍然需要粘性会话但是也least_conn启用了算法 - 所以我们的两台服务器接收的负载大致相等.

我们也考虑过使用Nginx-sticky-module但文档说如果没有可用的粘性cookie,它将回退到循环默认的Nginx算法 - 所以它也没有解决问题.

所以问题是我们可以使用Nginx组合粘性和最少连接逻辑吗?你知道其他负载均衡器能解决这个问题吗?

reverse-proxy load-balancing nginx

15
推荐指数
2
解决办法
1420
查看次数

IP和Nginx作为反向代理时出错

我将我的Nginx配置为简单的反向代理.

我只是使用基本设置

location / {
    proxy_pass foo.dnsalias.net;
    proxy_pass_header Set-Cookie;
    proxy_pass_header P3P;
}
Run Code Online (Sandbox Code Playgroud)

问题是,经过一段时间(几天)后,nginx背后的网站变得无法访问.Indead nginx尝试调用一个坏的ip(nginx背后的网站在我家后面的盒子里,我使用的是dyn-dns,因为我的ip不是固定的).这个dyn-dns总是有效的(我可以直接调用我的网站),但由于不明原因,Nginx卡住了这个...

如上所述,nginx只是在一段时间后给我504网关超时.当我的IP在家里改变时,看起来错误就来了.以下是错误日志示例:

[error] ... upstream timed out (110: Connection timed out) while connecting to upstream, client: my.current.ip, server: myreverse.server.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://my.old
.home.ip", host: "myreverse.server.com"
Run Code Online (Sandbox Code Playgroud)

所以你知道为什么nginx使用ip而不是DN吗?

dns proxy reverse-proxy nginx dyndns

15
推荐指数
2
解决办法
8491
查看次数

上游超时(110:连接超时)静态内容?

我有一种情况,其中两个web服务器设置为nginx作为loadbalancer并且是后端自己.分布是Debian Wheezy.两台服务器上的配置相同(四核,32GB RAM)

TCP

#/etc/sysctl.conf
vm.swappiness=0
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_sack=1
net.ipv4.ip_local_port_range=2000 65535
net.ipv4.tcp_max_syn_backlog=65535
net.core.somaxconn=65535
net.ipv4.tcp_max_tw_buckets=2000000
net.core.netdev_max_backlog=65535
net.ipv4.tcp_rfc1337=1
net.ipv4.tcp_fin_timeout=5
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=5
net.core.rmem_default=8388608
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 16384 16777216
net.ipv4.tcp_congestion_control=cubic
net.ipv4.tcp_tw_reuse=1
fs.file-max=3000000
Run Code Online (Sandbox Code Playgroud)

Nginx的

#/etc/nginx/nginx.conf
user www-data www-data;
worker_processes 8;
worker_rlimit_nofile 300000;
pid /run/nginx.pid;

events {
        worker_connections 8192;
        use epoll;
        #multi_accept on;
}
http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 10;
        types_hash_max_size 2048;
        server_tokens off;

        open_file_cache max=200000 inactive=20s;
        open_file_cache_valid 30s;
        open_file_cache_min_uses 5;
        open_file_cache_errors on;

        gzip on;
        gzip_vary on;
        gzip_proxied any; …
Run Code Online (Sandbox Code Playgroud)

connection reverse-proxy nginx

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

如何为现有的内部部署群集配置和启用Azure Service Fabric反向代理?

Azure服务结构反向代理是否可在内部部署群集中使用?如果是这样,我如何为现有群集启用它?

此处描述 Service Fabric Reverse Proxy .它允许群集外部的客户端通过名称使用特殊URL访问应用程序服务,而无需知道运行服务实例的确切主机:端口(可能会随着服务自动移动而更改).

默认情况下,似乎没有为具有两个无状态服务实例的本地群集启用Service Fabric反向代理.我尝试使用记录的端口19008,但无法使用推荐的URI语法访问该服务.

即,这工作:

http://fqdn:20001/api/odata/v1/$metadata
Run Code Online (Sandbox Code Playgroud)

但这不是:

http://fqdn:19008/MyApp/MyService/api/odata/v1/$metadata
Run Code Online (Sandbox Code Playgroud)

在用于设置我的本地群集的ClusterConfig JSON的NodeTypes部分中,有一个属性"httpGatewayEndpointPort":"19080",但该端口似乎不能用作反向代理(它是Service Fabric Explorer Web -app endpoint).我猜测在集群配置JSON中以某种方式指定了所需的配置.还有的说明书中引用的文章解释了如何配置在云中的反向代理,而不是本地.

我正在寻找的是有关如何在本地多机群集或开发群集中设置Service Fabric反向代理的说明.

configuration web-services reverse-proxy azure azure-service-fabric

15
推荐指数
1
解决办法
9226
查看次数

如何保护Web服务器免受反向代理服务器的影响

我有一个网站"www.website.com".

最近我发现有人在我的网站前设置了一个反向代理,其中有一个几乎相同的网址"www.website1.com".

我担心那些通过反向代理访问我网站的用户.他们登录时可能会记录他们的用户名和密码.

有没有办法让我的Web服务器拒绝反向代理?

例如,我在"www.stackoverflow.com"前面使用网址"www.fakestackoverflow.com"设置了反向代理.因此,每当我在网络浏览器地址栏中输入"www.fakestackoverflow.com"时,我都会被反向代理重定向到"www.stackoverflow.com".然后我注意到我的地址栏中的网址已更改为"www.stackoverflow.com",表示我不再通过反向代理.

"www.stackoverflow.com"一定检测到我从另一个网址进入网站,然后通过实际网址将我重定向到网站.

我如何在ASP.NET Web应用程序中执行类似的操作?

询问服务器故障.

asp.net iis protection reverse-proxy

14
推荐指数
1
解决办法
4958
查看次数

为什么ASP.NET在静态图像请求上形成身份验证设置cookie?

我有一个ASP.NET(MVC)网站,它提供静态内容(图像)以及来自同一域的动态内容.该站点使用表单身份验证,并具有登录控制器.人们发现自己随机登录或退出时出现了一些非常奇怪/不正常的问题,我们已经将其跟踪到一个问题,反向代理缓存了一个图像文件,该文件具有设置cookie响应标头身份验证cookie.一旦缓存,每个人都会得到相同的auth cookie,这会产生一些非常奇怪的结果.

我的问题是 - 图像如何首先得到一个固定的cookie标题?什么是ASP.NET表单身份验证模块正在做的事情 - 当然它在主HTML内容响应上设置cookie.我得到的是,然后将auth cookie与所有后续请求一起发送到域,但我无法弄清楚cookie是如何设置的.

(顺便说一句,这个问题也可能是至少两个现有大型电子商务网站的罪魁祸首,这些网站遇到类似问题,没有解决方案,因此这将是一个很好的解决方案).

响应如下所示(取自小提琴手).

HTTP/1.1 200 OK
Cache-Control: public, max-age=86400,max-age=86400
Content-Type: image/png
Last-Modified: Thu, 04 Nov 2010 16:00:52 GMT
Accept-Ranges: bytes
ETag: "0528474397ccb1:0"
Server: Microsoft-IIS/7.5
Set-Cookie: my-auth-cookie=6BC25F1EF71989466A48C0120E7739E; path=/; HttpOnly
Date: Wed, 17 Nov 2010 17:15:08 GMT
Content-Length: 15790
Run Code Online (Sandbox Code Playgroud)

更新:其他信息 - 我们在Win2008 R2,64位上使用IIS 7.5,该应用程序在使用集成管道/ .net 4的应用程序池下运行.

更新2:我不是在寻找问题的解决方案,我们已经有了解决方案.我正在寻找这个问题的答案,这就是为什么它首先发生的原因?请不要回答告诉我子域名或cookie如何工作!

更新3:添加请求:

GET https://www.example.com/sprite.png HTTP/1.1
Host: www.example.com
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7 …
Run Code Online (Sandbox Code Playgroud)

iis asp.net-mvc forms-authentication reverse-proxy

14
推荐指数
1
解决办法
3314
查看次数

Nginx使用重写反向代理Node.js

我在Nginx反向代理后面运行了几个应用程序,其中一个是带有Express.js的节点服务器.我进行代理domain.com/demo/app/<path>localhost:7003/<path>使用此Nginx的配置:

http {

    ...

    server {

        listen 80;
        server_name domain.com;

        ...

        location /demo/app {

            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-Scheme $scheme;

            rewrite ^/demo/app/?(.*) /$1 break;
            proxy_pass http://localhost:7003;
        }

        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这很有效,并且app接收请求就像它的根源一样/.问题是app处理自己的静态文件,并可能请求路由,如css/app.cssimages/image.jpg.但由于反向代理,这些实际上分别存在于/demo/app/css/app.css/demo/app/images/image.jpg.

我已经通过让Nginx向Node传递一个自定义标头来解决这个问题,该标头指示根路径,节点服务器将其添加到所有后续请求的URL之前.但现在我的代码充满了这些根路径字符串.例如,我的后端模板的一部分:

link(rel='stylesheet', href="#{basePath}/css/base.css")
link(rel='stylesheet', href="#{basePath}/css/skeleton.css")
link(rel='stylesheet', href="#{basePath}/css/layout.css")
Run Code Online (Sandbox Code Playgroud)

处理这个问题的更优雅的方法是什么?难道没有办法让Nginx识别来自上游服务器的请求并自动将它们转发到该服务器吗?

javascript reverse-proxy nginx node.js express

14
推荐指数
1
解决办法
8706
查看次数

Golang:如何阅读ReverseProxy的响应体?

package main

import (
    "net/http"
    "net/http/httputil"
    "net/url"
)

func main() {
    target := &url.URL{Scheme: "http", Host: "www.google.com"}
    proxy := httputil.NewSingleHostReverseProxy(target)

    http.Handle("/google", proxy)
    http.ListenAndServe(":8099", nil)
}
Run Code Online (Sandbox Code Playgroud)

反向代理是有效的.我如何获得响应机构?

reverse-proxy go

14
推荐指数
3
解决办法
9719
查看次数