我正在探索使用 HAProxy 作为在 IIS 上运行的一组 web api 前面的平衡器。
我们目前正在使用主机头来正确解析 IIS 上的正确 Web 应用程序。例如,我们可能在同一服务器/端口上运行 otherapp.mycompany.com,但使用主机头 IIS 知道要提供哪个服务。
我对 HAProxy 的最初尝试给我留下了 404 错误,因为我的请求中没有包含主机标头,因此 IIS 提供绑定到给定 IP 的默认站点,而不是按主机名解析。
修复给我留下了这样的东西:
frontend localnodes
bind *:80
mode http
default_backend nodes
backend nodes
mode http
balance roundrobin
option forwardfor
reqirep ^Host: Host:\ node1.myapp.mycompany.com
server web01 node1.myapp.mycompany.com:80
Run Code Online (Sandbox Code Playgroud)
这对单个后端很有用,但我对如何根据哪个后端提供请求包含正确的主机头感到头疼:
backend nodes
mode http
balance roundrobin
option forwardfor
reqirep ^Host: Host:\ node1.myapp.mycompany.com
server web01 node1.myapp.mycompany.com:80
server web02 node2.myapp.mycompany.com:80
Run Code Online (Sandbox Code Playgroud)
每当node2
使用上述内容时都不起作用,因为它在 IIS 中无法正确解析(在这种情况下,node2 位于不同的服务器上,因此 IP 不同。事实上,如果它们在同一服务器/IP 上运行,我怀疑请求工作“工作”,但它们都将由每个主机标头的 node1 …
即使请求不是 HTTP/1.1,是否也需要通过 SSL 的 Host: 标头?
因此,如果客户端通过 SSL 连接,并发送以下请求:
GET / HTTP/1.0
Run Code Online (Sandbox Code Playgroud)
如果我在 中禁用 SNI openssl s_client
,apache 将在没有 Host: 标头的情况下工作。
为什么在 SNI 开启时需要 Host: 标头?
请帮助我防止给定的“ Nginx 配置文件”中的“主机头注入漏洞”
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://IP_1/;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
add_header Cache-Control "no-cache";
}
location /kuphubadmin/ {
proxy_pass http://IP_2/;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
add_header Cache-Control "no-cache";
}}
Run Code Online (Sandbox Code Playgroud)
注:以上服务器用作代理服务器。
host-headers ×3
haproxy ×1
http ×1
iis ×1
nginx ×1
proxy ×1
proxypass ×1
ssl ×1
web-hosting ×1