使用haproxy对https请求的http请求

时间:2017-11-03 10:53:55

标签: ssl haproxy

我有一种情况,我想使用haproxy将所有http请求重定向到https请求。假设我有一个安装了haproxy的服务器x​​和一个运行实际服务的服务器y(使用ssl)。现在,我希望haproxy接受http请求并通过https将其转发到后端服务器。 有点像这样:

用户< - (http) - > haproxy< - (https) - >实际服务

到目前为止我所做的是,前端接受端口8080中的http连接并将其发送到默认后端,在后端我已经预先添加了“ssl verify none”。

使用这个,我可以从http加载页面,但每当我提交请求(比如登录)时,响应都会出现在http url中并且没有任何效果。

我不知道是否有可能。

如果我需要提供更多详细信息,请与我们联系。

对此的任何启示都会非常友好。

提前致谢。

1 个答案:

答案 0 :(得分:2)

你的配置是什么?

您可能需要像这样指定端口

server httpsserver 10.0.0.80:443 ssl verify none

一个简单的https服务器:

var express = require('express');
var https = require('https');
var fs = require('fs');
var bodyParser = require('body-parser');
var options = {
  key: fs.readFileSync('./client-key.pem'),
  cert: fs.readFileSync('./client-cert.pem')
};
var app = express();
app.use(bodyParser.json());
app.post('/post', function (req, res) {
  res.send(req.body);
});
https.createServer(options, app).listen(443);

POST:

curl -k -X POST https://127.0.0.1/post -d '{"a":"b"}' -H "Content-Type: application/json"                                                               
{"a":"b"}

HAProxy config:

global
    debug
defaults
    retries 3
    timeout client  300s
    timeout connect 300s
    timeout server  300s
frontend web
    bind *:8080
    default_backend app
backend app
    balance     roundrobin
    server httpsserver 127.0.0.1:443 ssl verify none

针对HAProxy的POST

curl -k -X POST http://127.0.0.1:8080/post -d '{"a":"b"}' -H "Content-Type: application/json"                                                                 
{"a":"b"}