我需要设置一些 VPS 来提供静态内容(许多小文件)。我计划为此使用 Nginx,并希望对其进行设置,以便我们能够相对轻松地横向扩展。要求是:
我目前的计划是:
一个明显的问题是“主”服务器是单点故障(对此有什么补救措施?)。 还有其他我忽略的潜在问题吗?这里是否存在不能以这种方式很好地扩展的元素?有人会建议另一种方法吗?
关于内存要求,我假设我应该尽可能多地提供每个 Nginx 服务器,以便可以缓存热文件(通过操作系统?Nginx?)而不必不断从 NFS 共享中请求。
最后,我疯了不使用 CDN 吗?
我对为 Web 应用程序建模各种服务器/网络配置感兴趣。我想提前知道系统的哪些部分将成为瓶颈,以及瓶颈是否受 CPU/内存/网络等约束。
我一直在考虑的一个想法是采用单个测试服务器,并将每个“真实”服务器设置为虚拟机,并按照它们在野外进行配置。我打算试试这个,但想问问 serverfault 社区是否有人以前尝试过这种方法。 它可行吗?
我并不期待基准测试或任何类似的东西,但我认为它可能对建模相对性能、突出瓶颈和提供对架构的健全性检查有用。
我们最近遇到了流量高峰,虽然规模不大,但导致 haproxy 将一个 CPU 核心最大化(并且服务器变得无响应)。我猜我在做一些低效的配置,所以想问问所有的 haproxy 专家,他们是否愿意批评我下面的配置文件(主要是从性能角度)。
该配置旨在分布在一组 http 应用程序服务器、一组处理 websockets 连接的服务器(在不同端口上有多个单独的进程)和一个静态文件 web 服务器之间。从性能问题来看,它运行良好。(一些细节已被编辑。)
您能提供的任何指导将不胜感激!
HAProxy v1.4.8
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
daemon
maxconn 100000
log 127.0.0.1 local0 notice
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
log global
mode http
option httplog
option httpclose #http://serverfault.com/a/104782/52811
timeout connect 5000ms
timeout client 50000ms
timeout server 5h #long timeouts to stop WS drops - when v1.5 is …
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以动态读取网络接口的 IP 地址以在 bash 脚本中使用。就像是:
#!/bin/bash
MYPUBLICIP= get_eth0_address
MYPRIVATEIP= get_eth0:0_address
Run Code Online (Sandbox Code Playgroud)
[背景] 我正在尝试编写一个脚本,将各种规则应用于一组 VPS 的 iptables。我试图避免摆弄每台机器的单独 IP。
我的理解是,通过 HAProxy 对两个服务器后端进行负载平衡,如果其中一个出现故障,HAProxy 应该能够将所有流量定向到另一个。
我有两个负载均衡的网络服务器,带有 roundrobin 和 httpchk,但是当一个服务器出现故障时,我会503 - Service unavailable
从 HAProxy收到消息。也许我的配置有问题?
backend app
timeout server 50000ms
mode http
balance roundrobin
option httpchk
server ap1 ap1:8000 maxconn 4000 #ap1 is hostname
server ap2 ap2:8000 maxconn 4000 #ap2 is hostname
Run Code Online (Sandbox Code Playgroud) 我正在尝试从 Nginx 响应中删除 Last_Modified 标头。
我读过这可以通过配置中的这一行来实现:
add_header Last-Modified '';
Run Code Online (Sandbox Code Playgroud)
这有效,但是由于某种原因,我们的 CORS 访问控制标头不再发送。我假设这可能是一个错误(我们使用的是 v1.2.6),但希望得到其他人的意见。
为什么会这样?以及如何删除 Last-Modified,但保留 Access-Control 标头?
我们的配置文件如下所示:
http {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
server {
listen 80;
server_name xxxxxxxxxxxxxxxxx;
root xxxxxxxxxxxxxxxxx
expires 1y;
log_not_found off;
add_header Last-Modified '';
}
}
Run Code Online (Sandbox Code Playgroud)