标签: reverse-proxy

如何在 nginx 中将子域名作为 proxy_pass 值传递?

我目前的情况是,我需要获取/捕获子域并将该子域值传递给 Nginx 配置中的 proxy_pass 。

例如

如果用户输入

http://google.com.mydomain.com
Run Code Online (Sandbox Code Playgroud)

那么它应该做代理传递

proxy_pass http://www.google.com/;
Run Code Online (Sandbox Code Playgroud)

在上面的例子中google.comsub-domain

这可行吗?我怎样才能在 nginx 中实现类似的目标?

目前我正在使用配置,其中子域值在配置文件中硬编码,但有很多子域,所以我需要这样做,但不知道正确的语法。

server {
    listen       80;
    server_name  subdomain.domain.com;
    charset utf-8;

    location / {
      proxy_pass http://www.subdomain/;
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用 * 作为 A 记录将所有子域重定向到我的网络主机,即通配符 DNS。

更新:

我从/sf/answers/1594216431/找到了代码片段

server {          
    listen       80;                                               
  # this matches every subdomain of domain.
  server_name .domain.com;                                           

  location / {                                                   

    set $subdomain "";

    if ($host ~* "^(.+)\.domain.com$") {                             
      set $subdomain $1;                                         
    }                                                            

    proxy_pass http://$subdomain;   

  }                                                              
} 
Run Code Online (Sandbox Code Playgroud)

但请求显示的是我的默认页面,该页面位于我的默认网络根目录中。

reverse-proxy nginx proxypass

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

varnish 可以用作代理来缓存和服务第三方资源吗?

我有一个使用一些第三方脚本和图像的网站,它们是拥有功能齐全的网站的关键。但由于这些第三方资源的缓存、压缩和 CDN 性能较差,网站性能受到了影响。而且他们甚至一个多月都没有改变。

我想使用我的 Varnish 实例来缓存这些第三方资源(JS、CSS 和图像)至少几个小时,并通过我的 cloudflare 进行优化,从我自己的服务器提供服务。

用清漆可以做到这一点吗?

caching reverse-proxy varnish varnish-vcl

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

具有多个传出 IP 地址的鱿鱼代理

我已经安装了鱿鱼代理服务器来使用多个公共传出地址发出所有传出请求。下面是我的配置,但是当我在浏览器中设置代理服务器的IP地址时,我用谷歌搜索我的IP,它只给了我在浏览器上设置的代理服务器的IP地址。下面是我的鱿鱼配置

http_access allow all
visible_hostname zeyton



#acl ip1 myip 51.x.x.x1
#acl ip2 myip 51.x.x.x2
#acl ip3 myip 51.x.x.x3
#acl ip4 myip 51.x.x.x4
#acl ip4 myip 51.x.x.x5

acl abc src 192.168.0.0/16
#acl xyz 10.0.2.0/24

#tcp_outgoing_address 51.x.x.x1 ip1
#tcp_outgoing_address 51.x.x.x2 ip2
#tcp_outgoing_address 51.x.x.x3 ip3
#tcp_outgoing_address 51.x.x.x4 ip4
#tcp_outgoing_address 51.x.x.x5 ip4


tcp_outgoing_address 51.x.x.x1 abc
tcp_outgoing_address 51.x.x.x2 abc
tcp_outgoing_address 51.x.x.x3 abc
tcp_outgoing_address 51.x.x.x4 abc
Run Code Online (Sandbox Code Playgroud)

linux ubuntu proxy reverse-proxy squid

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

不,让我们在 ispconfig3 中使用反向代理加密续订

我正在使用 apache 运行 ISPConfig 3 服务器。为了获得 HTTPS,我使用了让我们加密的 certbot。ISPConfig 支持适用于各种引用的证书生成。

一个站点在不同的端口本地运行(因为它是一个复杂的系统)。为了访问它,我在 ISPConfig 中添加了一个新站点,并将 apache 配置为反向代理,如下所示。该站点正在运行,但无法通过 certbot 更新证书(不仅适用于此站点)。

ProxyRequests Off
ProxyVia Off

<Proxy *>
     Require all granted
</Proxy>
ProxyPass / http://my.domain.com:8080
ProxyPassReverse / http://my.domain.com:8080
Run Code Online (Sandbox Code Playgroud)

我猜问题是挑战文件夹(/acme/.well-known/acme-challenge)无法访问

如何将 apache 配置为能够更新其证书的反向代理?

apache reverse-proxy ispconfig lets-encrypt certbot

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

在反向代理后面部署 IdentityServer4

我们正在尝试在反向代理后面部署 IdentityServer4。发现文档返回本地 url,例如

https://xxx.local/connect/token
Run Code Online (Sandbox Code Playgroud)

我们需要的地方

https://xxx.domain.com/connect/token
Run Code Online (Sandbox Code Playgroud)

IdentityServer文档将我们指向这个github 页面。但是,当我们按照描述配置中间件时,我们看不到任何变化。

var options = new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
};
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
app.UseForwardedHeaders(options);
Run Code Online (Sandbox Code Playgroud)

github 页面上可以找到类似的设置。提出的解决方案使用 nginx,所以可能我们的 iis 配置是关闭的。

在代理的 IIS 中:

在此处输入图片说明

<serverVariables>
     <set name="HTTP_X_ORIGINAL_REMOTE_ADDR" value="{REMOTE_ADDR}" />
     <set name="HTTP_X_FORWARDED_PROTO" value="https" />
</serverVariables>
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

c# iis reverse-proxy asp.net-core identityserver4

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

Nginx proxy_pass 仅部分工作

我有以下设置

  • 主服务器 - 调用它 https://master.com
  • 从服务器 - 调用它 https://slave.com

两者都在 Ubuntu 16.04 上运行 Nginx

在主服务器上,我在我的/etc/nginx/sites-available/default文件中创建了以下配置块

location /test
{
 rewrite ^/test(.*) /$1 break;
 proxy_pass https://slave.com;
 proxy_read_timeout 240;
 proxy_redirect off;
 proxy_buffering off;
 proxy_set_header Host $host;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_set_header X-Forwarded-Proto https;
}
Run Code Online (Sandbox Code Playgroud)

一个service nginx reload以后master.com,我可以做以下

  • 浏览https://master.com/test并查看来自 的输出slave.com\index.php
  • 浏览https://master.com/test/test.txt并查看文件中的文本slave.com\test.txt
  • 浏览https://master/com/test/test.jpg并查看文件中的图像slave.com\test.jpg

但是,我不能执行以下任何操作

  • 浏览到https://master.com/test/test.php哪个而不是向我显示输出,而是向我https://slave.com/test.php显示 404 错误消息
  • 浏览到https://master.com/test/adminer/adminer.php其中,而不是向我展示了Adminer实例的登录屏幕上的奴隶,https://slave.com/adminer/adminer.php显示我要在Adminer实例的登录屏幕master.comhttps://master.com/adminer/adminer.php …

reverse-proxy nginx php-7

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

Flask - 使用 Nginx 隐藏在反向代理后面的 SocketIO

我想将Flask-SocketIO与我的Flask项目集成。我的应用程序在 Nginx 反向代理后面运行:

location /plivo_api{
       rewrite ^/plivo_api(.*) /$1 break;
       proxy_pass http://127.0.0.1:8090;
}
Run Code Online (Sandbox Code Playgroud)

所以我不明白/plivo_api 中收到的所有流量将被重写为“/”端口8090。这部分工作得很好。

当我想连接到套接字时,问题就开始了。直接连接到socket没有问题。

# all those examples work
# from localhost
var socket = io.connect()
var socket = io.connect('http://localhost:8090/')
# running the app out of the reverse proxy
var socket = io.connect('http://my_server:8090/')
Run Code Online (Sandbox Code Playgroud)

但是通过 Nginx 我无法连接

# Bad Gateway
var socket = io.connect('http://my_server/plivo_api')
Run Code Online (Sandbox Code Playgroud)

问题是我是否缺少连接到我的 socketio 应用程序的东西,或者还有一些额外的东西要添加到 Nginx 配置中?

与 socketio 集成的烧瓶应用程序代码看起来像

# this code work well, …
Run Code Online (Sandbox Code Playgroud)

python reverse-proxy nginx flask flask-socketio

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

如何使用 proxy.ModifyResponse?

我已经实现了最基本的反向代理来拉一个页面,然后向正文添加一些内容。不幸的是,我添加到 html 的尝试没有生效。下面的代码只显示了原始页面,但没有我在响应中添加的“猴子”。需要哪些额外的调用才能使其工作?我最终想用它来替换自定义 css 的 css。

package main

import (
    "log"
    "net/http"
    "net/http/httputil"
    "net/url"
    "fmt"
    "github.com/PuerkitoBio/goquery"
    "bytes"
)

type Director func(*http.Request)

func (f Director) Then(g Director) Director {
    return func(req *http.Request) {
        f(req)
        g(req)
    }
}

func hostDirector(host string) Director {
    return func(req *http.Request) {
        req.Host = host
    }
}

func UpdateResponse(r *http.Response) error {
    doc, err := goquery.NewDocumentFromReader(r.Body)
    if err != nil{
        //log.New("Research")
        log.Fatal("Bad doc %v", err)
        return err
    }
    html, err := goquery.OuterHtml(doc.First())
    if err != nil{
        log.Fatal("Bad …
Run Code Online (Sandbox Code Playgroud)

reverse-proxy httpwebresponse go

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

IIS URL 重写 - 反向代理 - 响应 404 错误

基本上我想使用反向代理重写 url: from:

http://www.xyz.in/eacc/api/fetchVendors

http://localhost:8080/eacc/api/fetchVendors

我已经在 C:\Tomcat\apache-tomcat-9.0.7\webapps\eacc 下的 tomcat 中部署了我的 Spring Boot Rest 完整 Web 服务应用程序。

它包含许多 POST 调用,如 /eacc/api/fetchVendors、/eacc/api/users、/eacc/api/clients.. 等。

现在我想通过 IIS 公开这个 eacc rest 应用程序。

配置了名为 www.xyz.in 的主网站。

在名为 /eacc 的网站 (www.xyz.in) 下添加了虚拟目录。物理路径:C:\inetpub\wwwroot\eacc 下面是 web.config 文件。

当我尝试打一个像www.xyz.in/eacc/api/fetchVendors这样的帖子调用时,得到 HTTP 404 服务器错误。

描述:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、更改名称或暂时不可用。请检查以下 URL 并确保其拼写正确。

请求的网址:/eacc/api/fetchVendors

我的/eacc 的web.config 文件- 虚拟目录

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpRedirect enabled="false" />
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://localhost:8080/eacc/{R:1}" />
                </rule> …
Run Code Online (Sandbox Code Playgroud)

rest reverse-proxy url-rewriting iis-10 tomcat9

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

AWS 负载均衡器允许 URL 路径上的某些 IP 地址

目前,我在 AWS 上使用应用程序负载均衡器设置了一个应用程序,目标组中有 2 个 EC2:

DNS -> AWS-ALB -> EC2(2)

我需要帮助仅允许应用程序 URL 上下文路径上的某些 IP 地址。

例如:www.abc.com 应该可供所有人访问,但 www.abc.com/xyz 应该只能由某些 IP 地址访问。

我在 EC2 上尝试了 NGINX 解决方案,只有当我使用允许和拒绝规则直接访问 EC2 IP 时才有效。

reverse-proxy amazon-ec2 amazon-web-services aws-elb aws-alb

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