标签: reverse-proxy

自省清漆的工具

有没有人开发或知道任何第三方工具(或常用工具的非明显用途)来帮助糟糕的系统管理员确定通过 Varnish 的请求发生了什么?虽然varnishstat, varnishtop, 并varnishhist给我非常高级(或低级)的概述,但我正在寻找可以告诉我以下内容的内容:

  • 当前正在进行哪些请求(以及他们已经这样多久了,他们被发送到哪里,诸如此类)
  • 后端、虚拟主机之类的请求的平均服务时间
  • 其他可以帮助我识别行为不端的后端、虚拟主机等的东西。

varnish reverse-proxy

6
推荐指数
1
解决办法
3384
查看次数

多少个反向代理(nginx、haproxy)太多了?

我正在使用 nginx、haproxy 和 apache 设置一个 HA(高可用性)集群。

我一直在阅读有关 nginx 和 haproxy 的精彩内容。人们倾向于选择其中之一,但我两者都喜欢。Haproxy 在负载均衡方面比 nginx 的简单循环更灵活(即使有上游公平补丁)。但我想保留 nginx,以便在集群入口处将非 https 重定向到 https 等。

另一方面,nginx 在提供静态内容方面要快得多,并且会减少强大的 apache 的负载,它喜欢吃大量的 RAM!

这是我计划的设置:

负载均衡器:nginx 监听 80/443 端口,proxy_forwards 到同一台服务器上 8080 上的 haproxy 来实现多个节点之间的负载均衡。

节点:节点上的nginx监听8080上haproxy的请求,如果内容是静态的,就服务它。但是如果它是一个后端脚本(在我的例子中是 PHP),代理转发到同一节点服务器上的 apache2,监听不同的端口号。

从技术上讲,此设置有效,但我担心的是,请求通过多个代理是否会减慢请求速度?大多数请求将是 PHP 请求,因为后端是服务(这意味着从 nginx -> haproxy -> nginx -> apache 进行处理)。

想法?干杯

nginx varnish reverse-proxy load-balancing haproxy

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

Nginx 无限重定向循环

为什么http://compassionpit.com/blog/经历无限重定向循环?这是我的 nginx conf 文件。该站点由端口 8000 上的 nodejs 服务器运行,Apache 提供博客 (wordpress) 和论坛 (phpBB)。论坛解决得很好,在http://www.compassionpit.com/forum/ ...

 server {
        listen          80;
        server_name     www.compassionpit.org;
        rewrite         ^/(.*) http://www.compassionpit.com/$1  permanent;
    }


    server {
        listen       80;                # your server's public IP address
        server_name  www.compassionpit.com;
        index        index.php index.html;

        location ~ ^/$ {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location @blogphp {
            internal;
            root /opt/blog/;
            include fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
            fastcgi_index  index.php;
            fastcgi_pass   127.0.0.1:8080;
        }

        location ~ ^/(forum|blog)/($|.*\.php) {
            root /opt/; …
Run Code Online (Sandbox Code Playgroud)

nginx reverse-proxy wordpress

6
推荐指数
1
解决办法
3861
查看次数

Apache ProxyPass 仅当来自子域时

我有两台服务器,都运行 Apache。
服务器 1 和 2 位于相同的公共 IP 地址上。
服务器 1 的网络 IP 为192.168.1.101
服务器 2 的网络 IP 为192.168.1.102

example.com 转到服务器 1。这正是我想要的。
我希望 beta.example.com/* 通过 Apache 反向代理转到服务器 2。
但是,我只希望 beta.example.com/* 转到服务器 2。

我如何将 Apache 配置为仅使用一个子域代理服务器 2?

configuration reverse-proxy apache-2.2

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

可以让 nginx 缓存包含 X-Accel-Redirect 标头的上游响应吗?

我在应用程序服务器前使用 nginx 作为反向代理。应用程序响应一个 X-Accel-Redirect 标头,告诉 nginx 要提供哪个静态文件。我希望能够做的是让 nginx 缓存其中一些上游响应,以便它可以在不访问应用程序服务器的情况下提供正确的文件。

不幸的是,这不起作用:nginx 似乎拒绝缓存任何带有 X-Accel-Redirect 标头的响应。如果我不使用 X-Accel-Redirect 并让应用程序服务器返回文件本身,那么缓存工作完美。然而,这不是很有效,因为应用服务器必须从磁盘读取文件并将其发送到 nginx,然后 nginx 将文件写回磁盘(在其缓存中)并将其发送到客户端。

这是我的 nginx 配置的精简版:

proxy_cache_path /tmp/nginx-cache keys_zone=testzone:10m;

server {
    location / {
        proxy_cache testzone;
        proxy_pass http://localhost:8000/;
    }

    location /static-files/ {
        internal;
        alias /var/static-files/;
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁知道我正在尝试做的事情是否可行?我的怀疑是,当 nginx 发现 X-Accel-Redirect 标头时,它会立即跳转到处理提供的 URI 并跳过正常的缓存逻辑,但最好能确认这一点。

nginx cache reverse-proxy

6
推荐指数
1
解决办法
3571
查看次数

Nginx,将一个位置块重定向到另一个

对于以 /c/ 开头的 uri,我想做一个 memcached 键测试,如果存在则返回键的值。如果没有密钥,则应将其传递给代理。

我用这个指令来做:

location ^~ /c/ {
    set $memcached_key "prefix:$request_uri";
    memcached_pass 127.0.0.1:11211;

    default_type       application/json;
    error_page 404 405 502 = @proxy
}
Run Code Online (Sandbox Code Playgroud)

对于所有其他请求,我希望它们传递给同一个代理。我用下面的指令来做:

location / {
    proxy_pass       http://127.0.0.1:5555;
    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;
}
Run Code Online (Sandbox Code Playgroud)

我的@proxy位置是这样的:

location @proxy {
    proxy_pass       http://127.0.0.1:5555;
    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;
}
Run Code Online (Sandbox Code Playgroud)

正如所见,@proxy/. 我不想复制粘贴我的代理配置。相反,我想将位置重定向/@proxy. 如何将一个位置块重定向到另一个?如何摆脱代理的重复配置?

nginx reverse-proxy

6
推荐指数
1
解决办法
6801
查看次数

使用 Apache 作为反向代理时的 ErrorDocument

'晚上,

我在同一台物理服务器上有一个 Apache 服务器(2.2.19)和一个 4D Webstar 服务器(有点未知的 HTTP 服务器)。Apache 仅侦听 SSL 端口 (443) 并用作 4DW 的反向代理(通过 SSL VHost)。

这是我使用的两个代理指令:

ProxyPass / http://127.0.0.1:xxxx/ timeout=15 connectiontimeout = 15
ProxyPassReverse / http://127.0.0.1:xxxx/
Run Code Online (Sandbox Code Playgroud)

鉴于4DW服务器有时会掉线,我想有一个自定义的503错误页面来通知用户后端应用程序的停机或维护。除了 Apache 从 /htdocs/(这是文档根目录)重定向所有内容,我们需要快速访问错误文档以在需要时对其进行编辑(因此,外部错误文档不是一种选择)。

有什么方法可以强制 Apache 不代理给定目录(假设是 htdocs/error/),或者有什么解决方案可以在 DocumentRoot 之外使用错误文档?

干杯

reverse-proxy apache-2.2

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

Apache ReverseProxyPass 重定向到 http 而不是 https

我有一个使用 apache mod_proxy 的反向代理设置:

<VirtualHost *:443>
   ServerName reverse.server.com  
   ProxyPass / http://10.1.9.11:3000/
   ProxyPassReverse / http://10.1.9.11:3000/
   ProxyPreserveHost on
   ...snip ssl stuff...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都能正常工作。问题在于内部服务器何时进行重定向。虽然 proxypassreverse 应该捕获该位置,但它似乎会重定向到http://reverse.server.com而不是https://reverse.server.com。所以它工作了一半,地址正确更改,但协议仍然作为内部服务器。

我不清楚为什么这样做,因为代理连接是 SSL - 有什么想法吗?

https reverse-proxy mod-proxy apache-2.2

6
推荐指数
1
解决办法
4448
查看次数

如何使用 nginx 作为具有多个 IP 和 SSL 的反向代理?

我想设置具有多个域和 IP 的 nginx 反向代理,以便每个域使用不同的 SSL 证书。我将 Ubuntu 作为操作系统运行,该操作系统安装在 KVM/Qemu VM 上。

据我了解 nginx,它应该能够通过一个 IP 为一个域(以及属于它的子域)提供服务。但我无法让它运行......

这是我的 nginx 配置:

/etc/nginx/sites-enabled/my_first_domain

server {
  listen x.x.x.84:80;                                   # this is a public ip
  server_name firstdomain.com;

  access_log /var/log/nginx/access.log proxy;     # I made my own logformat
  error_log  /var/log/nginx/error.log;

  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Client-IP $remote_addr;
  proxy_set_header X-Host $host;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $remote_addr;

  location / {
    rewrite ^/(.*) https://firstdomain/$1;  # redirect to https
  }
}

server {
  listen x.x.x.84:443 ssl;                            # this is a public …
Run Code Online (Sandbox Code Playgroud)

ssl nginx https reverse-proxy

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

Nginx 反向代理到 HTTPS 上游得到 502 Bad Gateway?

我的目标是编写 Jasmine(一个 JavaScript BDD 测试框架)测试,以执行由独立团队构建的后端 API。

我有一个在端口 9000 上运行的 Jasmine 服务器。该代码使用以 /web/ 开头的相对路径发出 AJAX 请求。我希望将这些请求定向到后端。

到目前为止,我有一个上游块的反向代理,如下所示:

upstream backend {
  server api-dev.example.com;
}

server {
  ...

  location / {
    proxy_pass http://localhost:9000;
    ...
  }

  location /web/ {
    proxy_pass https://backend/web/;
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

到“/”的流量工作正常,但 AJAX 请求(例如,

http://localhost:50000/web/internal?action=network-statistics
Run Code Online (Sandbox Code Playgroud)

) 是 502'ing。我相信它到达了正确的端点,但存在 SSL 错误。Nginx 的错误日志似乎证实了我的怀疑:

2013/12/13 16:55:28 [error] 1885#0: *257 SSL_do_handshake() failed (SSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol) while SSL handshaking to upstream, client: 127.0.0.1, server: localhost, request: "GET /web/internal/stats?action=network-statistics&request=null HTTP/1.1", upstream: "https://50.18.192.173:80/web/internal/stats?action=network-statistics", host: "localhost:50000", referrer: "http://localhost:50000/" …
Run Code Online (Sandbox Code Playgroud)

ssl nginx reverse-proxy

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