cancel
Showing results for 
Search instead for 
Did you mean: 

C++ web server library with https reverse proxy support

C++ web server library with https reverse proxy support

cchang
Member

Hi everyone,

What C++ library do you use for Webserver?

Sicne CtrlX required to use proxy_mapping to route https to http or unix domain socket. I have tested with cpp-httplib and crow, but none of them work. (HTTPS Proxy support · Issue #658 · yhirose/cpp-httplib (github.com))

I was considering to try Qt or Boost beast, but they are all bit more complicated, so I am concerned about whether I really should spend time on these.

2 REPLIES 2

Sgilk
Contributor

Hi @cchang ,

How are you specifying the proxy mapping? This should only be required in the package manifest and should be automatically handled by the ctrlX OS reverse proxy. See documentation here.

I haven't personally tried to host a webserver on ctrlX OS with C++, so I don't have a recommendation. If we can't figure it out with proxy mapping, I can set up a local test.

Hi Sgilk, 

thanks for your reply! I configure the prxoyMapping as followed. 

{
  "version": "1.0.0",
  "id": "ctrlx-hdvisionsystems-test",
  "services": {
    "proxyMapping":[
              {
        "name": "ctrlx-hdvisionsystems-test.web",
        "url": "/ctrlx-hdvisionsystems-test",
        "binding": ":38080"
      }
    ]
  },
  // ...
}

 

It would be nice if you can setup a test to cross verify. Unix Domain socket should be the problem, since I can use cpp-httplib to acquire App's license. My problem is that either unix domain socket or local http server didn't receive any forwarded call from Https. 

I did the test with "socat" that forward https to localhost from with self-signed certificate and it works quite well. But I guess that socat probably doesn't deal witl SSL handshake somehow.

In the attachment you can find built snap packet and also simplified source code.
For source code, you can compile without any extra dependencies. 
For Snap, it listens to port 38080 on all interface. You should be able to access  http://<ip>:<port> /ctrlx-hdvisionsystems-test/<any-address> 
After calling, you will get Hello World text plus ctrlx-hdvisionsystems-test/<any-address>

Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist