Questions tagged «reverse-proxy»

反向代理是一种代理服务器,可以从一组特定的特定客户端服务器中获取资源。出于安全原因或由于缺少可用的公共IP地址而在不直接向Web服务器公开内容的情况下使用此方法。

3
是否有可能替换通过代理传递的每个页面上的内容,类似于将mod_rewrite用于URL的方式?
是否有可能替换通过代理传递的每个页面上的内容,类似于将mod_rewrite用于URL的方式?替代品的文档不明确。 我有一些页面是反向代理的,具有绝对路径。这破坏了站点。它们需要替换,并且像mod_rewrite这样的工具由于不是URL请求,因此无法对其进行处理。 <VirtualHost *:80> ServerName servername1 ServerAlias servername2 ErrorLog "/var/log/proxy/jpuat_prox_error_log" CustomLog "/var/log/proxy/jpuat_prox_access_log" common RewriteEngine on LogLevel alert rewrite:trace2 RewriteCond %{HTTP_HOST} /uat.site.co.jp$ [NC] RewriteRule ^(.*)$ http://jp.uat.site2uk.co.uk/$1 [P] AddOutputFilterByType SUBSTITUTE text/html Substitute "s|uat.site.co.jp|jp.uat.site2uk.co.uk|i" ProxyRequests Off <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://uat.site.co.jp/ ProxyPassReverse / http://uat.site.co.jp/ </VirtualHost> 以上两种方法都不能替换HTML字符串 <link …

5
如何停止nginx在上游服务器超时时重试PUT或POST请求?
我们正在使用nginx负载平衡请求到我们的应用程序。我们发现,当请求超时(良好)时,nginx切换到其他上游服务器。但是,它对PUT和POST请求执行此操作,这可能会导致不良结果(数据存储两次)。是否可以将nginx配置为仅在超时时重试GET请求?还是有解决问题的另一种方法? 我们的配置如下: upstream mash { ip_hash; server 127.0.0.1:8081; server 192.168.0.11:8081; } server { ... location / { proxy_pass http://mash/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

1
无法获取mod_proxy来正确转发编码的斜杠(/)字符(%2f)
我设置了一个虚拟主机以重定向ntung-gitblit.localhost-> myserver:1279。但是,它不适用于正向编码的斜杠(%2f)。我尝试访问的URL是, http://ntung-gitblit.localhost/ABC%2fXYZ 没有AllowEncodedSlashes,它将失败-apache尝试访问/error/HTTP_NOT_FOUND.html.var服务器。设置AllowEncodedSlashes为会On导致以下内部网址匹配, http://myserver:1279/ABC/XYZ 并将其设置AllowEncodedSlashes为会NoDecode导致以下网址被点击, http://myserver:1279/ABC%252fXYZ 换句话说,它是过度逃避或逃避。问题:如何使它成功myserver:1279/ABC%2fXYZ?

3
Nginx应该位于HAProxy的前面还是相反?
我在网站基础架构设计方面的经验很少。我知道这可能取决于具体情况。该网站应该: 1)需要某些页面(例如登录页面)的HTTPS支持,而其他页面只是HTTP页面。 2)需要多个Web服务器,因此需要一些负载平衡。 3)需要HTTP缓存和压缩以提高性能。 4)一些请求(例如图像上传)应路由到专用后端服务器。因此,需要基于URL的平衡。 我知道NginX和HAProxy都是不错的开源反向代理和/或负载均衡器。由于HAProxy不支持SSL,因此Nginx的负载平衡不如HAProxy。我都吃 那么,我应该将Nginx(作为反向代理)放在HAProxy(作为负载均衡器)的前面还是相反? 谢谢

2
如何在带斜杠或不带斜杠的情况下反向代理
我有一个需要反向代理站点的Apache Web服务器。因此,example.com/test/或example.com/test从同一台其他Web服务器上拉取。我已经为反向代理设置了一个反向代理,而没有这样的斜杠: ProxyPass /test http://othersite.com/test ProxyPassReverse /test http://othersite.com/test 但这不能跟斜杠一起使用。 有任何想法吗?我尝试从重定向/test/到/test没有运气。 谢谢。


4
使用Cookie控制Nginx代理目标?
我正在尝试使用有趣的Apache mod_rewrite设置来转换反向代理以改为使用Nginx(由于外部原因,我们正从Apache迁移到Nginx,并且除此部分外,大多数其他方法都工作正常)。 我最初的设置是读取HTTP cookie(由某些应用程序设置),然后根据其值将反向代理定向到不同的后端。它是这样的: RewriteCond %{HTTP_COOKIE} proxy-target-A RewriteRule ^/original-request/ http://backend-a/some-application [P,QSA] RewriteCond %{HTTP_COOKIE} proxy-target-B RewriteRule ^/original-request http://backend-b/another-application [P,QSA] RewriteRule ^/original-request http://primary-backend/original-application [P,QSA] 我正在尝试使用Nginx实现相同的目的,而我的初始配置是这样的(其中“ proxy_override”是cookie的名称): location /original-request { if ($cookie_proxy_override = "proxy-target-A") { rewrite . http://backend-a/some-application; break; } if ($cookie_proxy_override = "proxy-target-B") { rewrite . http://backend-b/another-application; break; } proxy_pass http://primary-backend/original-application; } …

2
nginx proxy_pass重写响应头位置
此nginx实例的目的是使GitLab和OpenWRT Luci通过反向代理进行重定向。它已经在其他几个网站上运行,所有这些网站都有一个基本URL,似乎可以解决此问题。 本示例中的GitLab位于本地服务器的端口9000上。 Nginx网站位于端口8080上。 OpenWRT具有完全相同的问题,但带有/ cgi-bin / luci / 示例位置的相关nginx配置为: location /gitlab/ { proxy_pass http://127.0.0.1:9000/; proxy_redirect default; } 请注意,使用斜杠和不使用斜杠的结果都是相同的。 有一些标头代理配置选项应用于此位置。 # Timeout if the real server is dead proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; # Basic Proxy Config proxy_set_header Host $host:$server_port; proxy_set_header Origin $scheme://$host:$server_port; proxy_set_header Connection $http_connection; proxy_set_header Cookie …

1
如何防止Nginx反向代理特定子目录
在Apache上,您可以ProxyPass除一个或多个子目录(带有“!”)之外的所有内容。 ProxyPass /subdir ! ProxyPass / http://localhost:9999/ 什么是Nginx等效项? 我的第一个猜测显然是行不通的: location /subdir { root /var/www/site/subdir; } location / { proxy_pass http://localhost:9999/ ; }

1
nginx proxy_pass使用子文件夹
好的,此任务应该很简单,但我无法使其正常工作。我想在我的域名之后(实际上是在该域名的IP之后)有一个子文件夹,该子文件夹将重定向到同一服务器上的特定端口。本质上,我想摆脱使用许多端口的麻烦。 这是我的nginx配置 server { listen 80; index index.html index.htm index.nginx-debian.html index.php; server_name aaa.bbb.ccc.ddd; location ^~ /app2 { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://aaa.bbb.ccc.ddd:8001; } } 因此,在访问aaa.bbb.ccc.ddd / app2时,我希望将其解析为http://aaa.bbb.ccc.ddd:8001。 可以注意到,它可能是如此复杂。我在这里想念什么? 谢谢帕特

1
如何使协议知道foo主机名?
这是关于主机名感知和代理的规范问题。 我知道某些协议可识别主机名。也就是说,当我连接到HTTP服务器时,www.example.com它知道我想要www.example.com的HTTP服务而不是HTTP服务www.example.net,即使它们位于相同的IP地址上也是如此。如何为foo协议执行此操作? (临时注释:根据该元讨论出现此问题。)

2
通过主机名将SSH连接转发到Docker容器
我遇到了一个非常具体的情况,尽管还有其他方法可以做到这一点,但我还是对此非常着迷,并想找到一种完全像这样的方法: 背景 假设我有一台服务器运行多个服务,这些服务藏在隔离的Docker容器中。由于大多数服务都是http,因此我正在使用nginx代理向每个服务公开特定的子域。例如,节点服务器在其端口80绑定到127.0.0.1:8000主机的docker容器上运行。我会在nginx的是代理的所有请求创建一个虚拟主机myapp.mydomain.com来http://127.0.0.1:8000。这样,只能通过外部从外部访问docker容器myapp.mydomain.com。 现在,我要以一种指向gogs容器的方式启动gogsgogs.mydomain.com docker容器。因此,我使用绑定到主机上的端口来启动此gogs容器。并且Nginx网站将请求代理到,并且效果很好...8000127.0.0.1:8001gogs.mydomain.comhttp://127.0.0.1:8001 但是,gogs是一个git容器,我也想像这样访问存储库,git@gogs.mydomain.com:org/repo但不适用于当前设置。进行此工作的一种方法22是将容器的端口绑定到0.0.0.0:8022主机上的端口,然后git ssh url可能类似于git@gogs.mydomain.com:8022/repo。 (这似乎不工作;当我推到与URI这样的原点,混帐要求密码对git上gogs.mydomain.com-而不是gogs.mydomain.com:8022-但不过这可能是什么我做错了,超出范围的这个问题,我也很感谢任何诊断) 问题 我主要关心的是,我希望<gogs container>:22代理ssh端口,就像使用nginx代理http端口一样;即任何gogs.mydomain.com要传递到容器port的ssh连接22。现在,我无法将容器的ssh端口绑定到主机的ssh端口,因为主机上已经有一个sshd在运行。同样,这意味着任何要*.mydomain.com传递到容器sshd的连接。 我想要任何ssh连接到: mydomain.com host.mydomain.com 或mydomain的IP地址被接受并转发到主机上的sshd gogs.mydomain.com或被git.mydomain.com接受传递到gogs容器上的sshd *.mydomain.com(*除上述可能性之外,还有其他什么)被拒绝 如果是http,我可以通过nginx轻松实现。有没有办法做到这一点的SSH? (也想出去问:一般来说,有没有一种方法可以通过任何 tcp服务来完成?) 也欢迎您对我在这里尝试的方式有任何见解。当我要做的事情完全愚蠢时,我不介意被告知。 我已经想到的是: 也许我可以与容器作为ro卷共享主机上的sshd套接字?这意味着容器内的sshd可以拾取与的所有连接*.mydomain.com。有没有办法使容器内的sshd 拒绝除gogs.mydomain.comor 以外的所有连接git.mydomain.com?但是,主机上的sshd *.mydomain.com无论如何都将占用所有的连接,包括gogs.mydomain.com; 所以会有冲突。我不知道,我实际上没有尝试过。我应该尝试吗?

6
通过中介服务器的远程桌面的SSH隧道第二部分
我之前曾问过如何使用中介服务器配置2个SSH隧道,以便通过它们运行远程桌面,但我设法使其正常工作。现在,我正在尝试使用相同的机器执行相同的操作,但是顺序相反。设置如下: 专用网络中的Windows 7 PC,位于防火墙后面。 公共访问Linux服务器,可以访问PC。 我希望在家中使用Windows 7笔记本电脑从PC上进行“远程桌面”。 我在笔记本电脑上使用Putty创建了从它到Linux服务器的反向隧道R60666 localhost:3389。 我在PC上使用Putty在从PC到Linux服务器之间创建一条常规隧道:L60666 localhost:60666。 我通过SSH连接到Linux服务器,并运行telnet localhost 60666,它似乎产生了预期的输出,如我在此处收到的调试提示中所述。 我尝试将远程桌面从PC连接到笔记本电脑:localhost:60666。它询问我的用户名和密码,单击“确定”,它在笔记本电脑上锁定了当前会话(因此,我在笔记本电脑上而不是台式机上看到了欢迎屏幕),在“远程桌面”屏幕上显示了“欢迎”消息,然后它只是变黑了。它不会断开连接,不会提供任何错误,并且我无法在“远程桌面”屏幕中执行任何操作。我在Windows XP笔记本电脑上尝试了相同的设置,但遇到了相同的症状。我也尝试使用不同于60666的端口,但没有任何变化。有人知道我在做什么错吗? 更新:正如@jwinders指出的那样,我无法telnet PC 3389直接从Linux服务器运行。由于Windows防火墙有一个规则允许端口3389上的所有连接,因此我不知道是什么阻止了它。幸运的是,我能够创建从Linux机器到PC的SSH隧道ssh 3389:localhost:3389 'domain\user'@PC。

1
Traefik的简单反向代理
我目前正在使用Apache作为我的LXD容器的代理,使用以下设置: <VirtualHost *:80> ServerName example.com ProxyRequests off ProxyPass / http://10.0.0.142/ retry=0 ProxyPassReverse / http://10.0.0.142/ ProxyPreserveHost On </VirtualHost> 我想改用traefik。我已经尝试过这种配置: defaultEntryPoints = ["http"] [entryPoints] [entryPoints.http] address = ":80" [backends] [backends.backend1] [backends.backend1.servers.server1] url = "http://10.0.0.142" [frontends] [frontends.frontend1] backend = "backend1" passHostHeader = true [frontends.frontend1.routes.example] rule = "Host:example.com" 这两个相等吗? traefik的配置可以简化吗?(删除不必要的规则) (注意:我不打算使用docker,但我不想这样做。)

3
无法加载资源:net :: ERR_CONNECTION_RESET
自从我开始在反向代理(Apache2的mod_jk)后面使用应用程序以来,我注意到某些页面将无法加载(如果没有反向代理设置,它们将无法加载)。 由于使用了谷歌浏览器,这是我必须检查才能发现的细微错误:无法加载资源:net :: ERR_CONNECTION_RESET。 简单来说,将部分加载JavaScript文件(从〜50KB中加载〜12KB)。 我认为Apache2,mod_jk,AJP或Jetty出了问题。 但是后来我进行了调查,在调查中我将使用不同的浏览器以及不同的网络。 结论: 仅当我使用具有静态 IP的网络时,才会发生此错误(ERR_CONNECTION_RESET)。 我在一台路由器上降低了安全级别,但徒劳无功。 具有静态IP的网络是否具有更高的安全级别? 如何克服这个问题? 这是一个僵局,因为反向代理主要用于利用我们销售点的静态IP地址来提高安全级别。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.