c++ - 如何将 HTTPS 流量重定向到 localhost:443 上的代理?
问题描述
我正在使用 Cesanta Mongoose c++ 网络库在 C++ 中构建 HTTP 服务器。本质上,我试图将流量从我的网络浏览器重定向到本地主机上的代理。我最近通过购买证书和域并按照说明启用 ssl 和 mongoose ( https://cesanta.com/docs/http/ssl.html ) 添加了对 HTTPS 的支持。服务器现在正在侦听端口 443,并且运行良好。我已将 Web 浏览器配置为将 HTTPS 请求定向到 localhost:443,但它似乎没有触发 HTTP 服务器。当我的服务器正在监听端口 8080 并且 Web 浏览器被配置为向 localhost:8080 发送请求时,它会触发 Web 浏览器,但它不支持 https。将 Web 浏览器配置为向 localhost:443 发送请求是否有问题?
解决方案
ngrok 解决方案非常好。
如果要直接在应用程序中添加重定向,请设置两个侦听连接:一个 HTTP,一个 HTTPS。
对这两个监听连接使用不同的事件处理函数:HTTP 处理程序只会发送重定向,而 HTTPS 处理程序会做一个真正的工作:
static void f1(struct mg_connection *c, int ev, void *ev_data, void *fn_data) {
if (ev == MG_EV_HTTP_MSG) {
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
struct mg_str *host = mg_http_get_header(hm, "Host");
if (host == NULL) {
mg_printf(c, "HTTP/1.1 500 Failed\r\n\r\n");
} else {
mg_printf(c, "HTTP/1.1 301 Moved\r\n"
"Location: https://%.*s%.*s\r\n\r\n",
(int) host->len, host->ptr,);
(int) hm->uri.len, hm->uri.ptr); // Send redirect to HTTPS!
}
c->is_draining = 1;
}
}
...
mg_http_listen(&mgr, "http://0.0.0.0:80", f1, NULL); // HTTP
mg_http_listen(&mgr, "https://0.0.0.0:443", f2, NULL); // HTTPS
推荐阅读
- rx-swift - 如何在 UITableView 的 RXswift 和 RXCocoa 中实现 tableview 单元格的内部?
- javascript - 为 createElement 创建接受更多参数的函数
- javascript - 添加外部 js 文件的最佳和最快方法:追加或使用 $.getscript()?
- javascript - Apexchart 工具提示
- angular - 在Angular 6中单击按钮时无法传递函数的值
- java - 将列表拆分为 X 值的插槽
- c# - 为同一行文本C#读取不同子文件夹中的特定文件
- node.js - nginx/反向代理中的 Https
- ruby-on-rails - ActionController::UnknownFormat rails 5 控制器
- ios - ARKit – 使用“UIPinchGestureRecognizer”放大对象