有没有人开发或知道任何第三方工具(或常用工具的非明显用途)来帮助糟糕的系统管理员确定通过 Varnish 的请求发生了什么?虽然varnishstat, varnishtop, 并varnishhist给我非常高级(或低级)的概述,但我正在寻找可以告诉我以下内容的内容:
我正在使用 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 进行处理)。
想法?干杯
我的服务器分布在多个数据中心,每个数据中心存储不同的文件。我希望用户能够通过单个域访问所有服务器上的文件,并让各个服务器直接将文件返回给用户。
下面显示了一个简单的示例: 1) 用户的浏览器请求http://www.example.com/files/file1.zip 2) 根据 example.com 的 DNS A 记录,请求转到服务器 A。3) 服务器 A 分析请求并计算出 /files/file1.zip 存储在服务器 B 上。 4) 服务器 A 将请求转发到服务器 B。 5) 服务器 B 将 file1.zip 直接返回给用户,无需经过服务器一种。
注意:步骤 4 和 5 必须对用户透明,不能涉及向用户发送重定向,因为这会违反单个域的要求。
根据我的研究,我想要实现的称为“直接服务器返回”,它是负载平衡的常见设置。它有时也被称为半反向代理。
对于第 4 步,听起来我需要进行 MAC 地址转换,然后将请求传回网络,对于服务器网络之外的服务器,将需要隧道。
对于第 5 步,我只需要根据负载平衡设置中的真实服务器来配置服务器 B。即,服务器 B 应该在回送接口上拥有服务器 A 的 IP 地址,并且它不应该回答对该 IP 地址的任何 ARP 请求。
我的问题是如何实际实现第 4 步?
我发现有很多硬件和软件可以在第 4 层实现简单的负载平衡,但这些解决方案不够完善,无法处理我需要的那种自定义路由。看来我需要推出自己的解决方案。
理想情况下,我想在 Web 服务器级别进行路由/转发,即在 PHP 或 C#/ASP.net 中。但是,我愿意在较低级别(例如 Apache 或 IIS)或更低级别(即在所有内容之前使用自定义代理服务)执行此操作。
谢谢。
我在 FreeBSD 上运行 Apache 2.2。最近我一直在为一些 Django/Python 寻找切诺基 + uWSGI。
我想将 Apache 2.2 保留在前面(端口 80 回复)并代理连接到在同一台机器上运行的切诺基服务器。
我的问题是我的 URL 上的几个目录位置有一些遗留的东西。
我想 / 去我的 Cherokee(反向代理),但为 /dir1/ 和 /dir2/ 保留 Apache。
我让反向代理与 mod_proxy 一起工作正常。
ProxyRequests Off
<Location />
ProxyPass http://127.0.0.1:8080/
ProxyPassReverse http://127.0.0.1:8080/
</Location>
Run Code Online (Sandbox Code Playgroud)
Cherokee 在本地主机的 8080 端口上运行。
问题是我不知道如何关闭 /dir1/ 和 /dir2/ 的反向代理,以便 Apache 处理对 dirs 的传入请求。
是否可以为 /dir1/ 和 /dir2/ 添加 Location 指令以告诉 Apache 不要反向代理目录?
#HA-Proxy version 1.3.22 2009/10/14 Copyright 2000-2009 Willy Tarreau <w@1wt.eu>
global
maxconn 10000
spread-checks 50
user haproxy
group haproxy
daemon
stats socket /tmp/haproxy
log localhost local0
log localhost local1 notice
defaults
mode http
maxconn 50000
timeout client 10000
option forwardfor except 127.0.0.1
option httpclose
option httplog
listen dcaustin 0.0.0.0:80
mode http
timeout connect 12000
timeout server 60000
timeout queue 120000
balance roundrobin
option httpchk GET /index.html
log global
option httplog
option dontlog-normal
server web1 10.10.10.101:80 maxconn 300 check …Run Code Online (Sandbox Code Playgroud) 性能方面,将请求从 Apache VirtualHost 重定向到 Node.js 实例是否有意义?代理是否抵消了令人敬畏的 Node.js 性能?
仅供参考:我还需要在同一台机器上解析和运行几个 PHP Web 应用程序,这是我什至考虑使用反向代理的唯一原因。
根据我的研究,Nginx 的开销较小,因此性能稍好一些,但不幸的是不支持 HTTP/1.1。
我还考虑过让 Node.js 作为反向代理并向 Apache 发送某些请求(例如,它然后处理 PHP 文件),但我听说可能存在很多安全问题。
为什么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) 我的目标是编写 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 反向代理上安装 SSL,但是当我尝试重新启动服务器时收到此消息:
Restarting nginx: [emerg]: SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/cert.key") failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
configuration file /etc/nginx/nginx.conf test failed
Run Code Online (Sandbox Code Playgroud)
每个文件都是 root:root 有 600 个权限我已经测试了证书并且它们通过这个网站进行了验证:http ://ssltools.com/cert_key_match
我的键中没有尾随奇怪的字符,每行有 64 个字符
这是我的配置文件
server {
listen 443;
server_name my.domain.com;
ssl on;
ssl_certificate conf.d/cert.pem;
ssl_certificate_key conf.d/cert.key;
location / {
proxy_pass http://upstream1;
proxy_redirect off;
proxy_buffering 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)
}
有任何想法吗?谢谢
我有一个 Nginx 服务器托管一个 Web 应用程序,它在直接访问时工作正常。它的配置如下
server {
listen 8000 default_server;
listen [::]:8000 default_server ipv6only=on;
root /data/www/ ;
server_name server1.com;
location / {
try_files $uri $uri/ =404;
}
location /app/ {
}
}
Run Code Online (Sandbox Code Playgroud)
现在我必须从另一个 Nginx 服务器为这个应用程序提供服务 所以我设置了如下所示的反向代理
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /data/www/ ;
server_name server2.com;
location / {
try_files $uri $uri/ =404;
}
location /app/ {
proxy_pass http://server1.com:8000/app/;
}
Run Code Online (Sandbox Code Playgroud)
当我从 server2 访问应用程序时,我收到如下错误,例如当我访问http://server2.com/app/css/app.css 时 (抱歉没有代表发布链接)
[错误] 6601#0: *1 open() "/data/www/app/css/app.css" failed (2: No such file …
reverse-proxy ×10
nginx ×5
apache-2.2 ×2
haproxy ×2
ssl ×2
varnish ×2
forwarding ×1
http ×1
node.js ×1
proxy ×1
ubuntu-10.04 ×1
web-server ×1
wordpress ×1