首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HAPROXY : TLS终止的反向代理

HAPROXY : TLS终止的反向代理
EN

Server Fault用户
提问于 2020-10-15 18:41:09
回答 1查看 3.4K关注 0票数 2

我是HAProxy的新手,我想用它将HTTPS传入请求重定向到我的HTTP后端服务器。

我知道,Nginx是如何做到的,就像这样:

代码语言:javascript
复制
#SSL for all
server {
    listen 443 ssl ;
    server_name www.example.com;
    absolute_redirect off;
    proxy_redirect off;

    access_log /var/log/nginx/example.com-ssl-access.log;
    error_log /var/log/nginx/example.com-ssl-error.log;

    ssl_protocols TLSv1.2 TLSv1.1 TLSv1 ;
    ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; 


    location / {
        proxy_pass http://bo.example.com;
    }
}

但我不知道我怎么能用HAProxy做这件事?

我已经试过几件事了。但是每次我只有HTTPS重定向。

你能帮我吗?

这是我当前的HAProxy配置:

代码语言:javascript
复制
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 5s
    user haproxy
    group haproxy
    daemon

    tune.ssl.default-dh-param 2048

defaults

    log     global

    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http
    stats enable
    stats hide-version
    stats refresh 30s
    stats uri /hastats

frontend www-http
        # Frontend listen port - 80
    bind *:80
    #Mode de fonctionnement
    mode http

    reqadd X-Forwarded-Proto:\ http

    # Test URI to see if its a letsencrypt request
    acl letsencrypt-acl path_beg /.well-known/acme-challenge/
    use_backend letsencrypt-backend if letsencrypt-acl

    # Set the default backend
    default_backend www-backend
    # Enable send X-Forwarded-For header
    #option forwardfor
    #option httpchk GET /
    # log reqs http
    #option httplog

    # acl
    #acl prod_acl  hdr(host) prod.local

    #use_backend apache_backend_servers if prod acl


# Define frontend ssl
frontend www-ssl
        bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
        reqadd X-Forwarded-Proto:\ https
        default_backend www-backend


# define backend

backend www-backend
    mode http
    option httpchk
    option forwardfor except 127.0.0.1

    http-request add-header X-Forwarded-Proto https if { ssl_fc }
    
    redirect scheme http if { hdr(Host) -i example.com } { ssl_fc }
    balance roundrobin
    #Define the backend servers
    server  web1    XXX.XXX.XXX.101  check inter 3s port 80
    server  web2    XXX.XXX.XXX.102  check inter 3s port 80

backend letsencrypt-backend
    server letsencrypt 127.0.0.1:8080
EN

回答 1

Server Fault用户

发布于 2021-05-15 06:44:43

我准备了一个干净的工作示例,您可以在其中设置干净的配置并添加所需的函数。一般来说,我教人们学习不同的应用程序和主题是,他们应该能够理解每一行配置的基本功能。

这可以通过阅读文件在主题和逻辑上的思考来实现。

代码语言:javascript
复制
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    daemon
    tune.ssl.default-dh-param 2048

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000

frontend www
    bind *:80
    bind *:443 ssl crt /etc/ssl/localcerts/apache-full.pem
    option forwardfor
    http-request set-header X-Forwarded-Proto https if { ssl_fc }
    http-request set-header X-Forwarded-Proto http if !{ ssl_fc }

    acl letsencrypt-acl path_beg /.well-known/acme-challenge/
    use_backend letsencrypt-backend if letsencrypt-acl

    default_backend www-backend

backend www-backend
    option httpchk
    balance roundrobin
    server web1 10.0.0.1:80 check inter 3s
    server web2 10.0.0.2:80 check inter 3s

backend letsencrypt-backend
    server letsencrypt 127.0.0.1:8080

在上面的示例中,TLS被正确终止并作为普通HTTP代理到上游(服务器)。

如果请求是通过HTTPS传入的,则头“X转发-Proto”设置为"https“。否则它将是"http“。

对上层流的第4层检查不需要额外的端口,因为如果使用IP定义了端口,那么它也将自动用作检查端口。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1038873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档