proxy - Haproxy Https 和 Vhost
问题描述
我是 Haproxy 世界的新手,经过几个小时后,我设法使用证书和 https 模式。但是现在我有一个新问题,似乎是由于目标服务器上的 Vhost。
我读到您需要创建一个指向虚拟主机的规则,当它通过域而不是加载网络时,会出现服务器的默认页面,因为它加载的是 IP 而不是域。
能给我举个例子?
frontend www-https
bind www.dominio.dev:443 ssl crt /etc/letsencrypt/live/sddd.net/1.pem
mode http
stats enable
stats auth cda:cda
balance roundrobin
option http-server-close
option forwardfor
http-request add-header X-Forwarded-Proto https
http-request add-header X-Forwarded-Port 443
http-response add-header Strict-Transport-Security max-age=15768000
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
# use_backend letsencrypt-backend if letsencrypt-acl
http-request redirect scheme https unless { ssl_fc }
default_backend www-backend
backend www-backend
redirect scheme https if !{ ssl_fc }
#http-request redirect scheme https if http
server www-1 www1.dominio.dev:443 ssl verify none
server www-2 www2.dominio.dev:443 ssl verify none maxconn 5000
server www-3 www3.dominio.dev:443 ssl verify none
解决方案
首先,haproxy 配置中的“bind”指令应该是您的 haproxy 服务器 ip adderss。
首先创建前端httpd、前端https和后端。
如果您在后台和 www1.dominio.dev、www2.dominio.dev、www3.dominio.dev 服务器上有从 http 到 https 的重定向,请禁用它并监听端口 80。Haproxy 会将 http 重定向到 https
这是一个例子:
frontend http
bind haproxy_ip_address:80
http-request add-header X-Forwarded-Proto http
use_backend www-backend if { hdr(host) -i dominio.dev }
frontend https
bind haproxy_ip_address:443 ssl crt /etc/letsencrypt/live/sddd.net/1.pem
http-request add-header X-Forwarded-Proto https
http-response replace-header ^Server.* Server Microsoft-IIS/7.5
http-response replace-header ^Set-Cookie:\ (.*) Set-Cookie \1;\ Secure if secure
http-request add-header Strict-Transport-Security max-age=31536000;\ includeSubDomains;\ preload
option http-server-close
option http-keep-alive
use_backend www-backend if { hdr(host) -i dominio.dev }
use_backend www-backend if { req_ssl_sni -i dominio.dev }
backend www-backend
mode http
balance roundrobin
option accept-invalid-http-response
retries 3
redirect scheme https if !{ ssl_fc }
option forwardfor
server www-1 www1.dominio.dev:80 ssl verify none
server www-2 www2.dominio.dev:80 ssl verify none maxconn 5000
server www-3 www3.dominio.dev:80 ssl verify none
另请检查配置是否有效:“haproxy -c -V -f /etc/haproxy/haproxy.cfg”
推荐阅读
- symfony - 如何使用 docker 将 Symfony4 连接到 mysql
- symfony - Symfony 在配置文件路径中使用动态变量
- django - 如何使用下拉 html 字段在模板中传递选择?(姜戈)
- python - 无法为图像分割 keras 创建数据集
- r - 在 R 中重新排列列表和数据框
- php - 注意:未定义变量:zendframework 3 中的 pic
- node.js - 管道传输到流式变压器时不会触发结束事件
- python - Python:clustermap Seaborn 的算法
- c# - Func 的最佳实践
和功能 - android - 谷歌地图在片段活动中的自我许可错误