What's the de facto standard for a Reverse Proxy to tell the backend SSL is used?

后端 未结 2 1629
旧巷少年郎
旧巷少年郎 2020-12-02 10:44

I have a reverse proxy that does HTTPS on the outside, but HTTP on the inside.

This means that by default in-app URLs will have HTTP as the scheme, as this is the wa

相关标签:
2条回答
  • 2020-12-02 11:00

    The proxy can add extra (or overwrite) headers to requests it receives and passes through to the back-end. These can be used to communicate information to the back-end.

    So far I've seen a couple used for forcing the use of https in URL scheme:

    X-Forwarded-Protocol: https
    X-Forwarded-Ssl: on
    X-Url-Scheme: https
    

    And wikipedia also mentions:

    # a de facto standard:
    X-Forwarded-Proto: https
    # Non-standard header used by Microsoft applications and load-balancers:
    Front-End-Https: on
    

    This what you should add to the VirtualHost on apache: other proxies should have similar functionality

    RequestHeader set X-FORWARDED-PROTOCOL https
    RequestHeader set X-Forwarded-Ssl on
    # etc.
    

    I think it's best to set them all, or set one that works and remove the other known ones. To prevent evil clients messing with them.

    0 讨论(0)
  • 2020-12-02 11:17

    It took me several hours of googling to find the magic setting for my environment. I have a SSL httpd Apache reverse proxy in front of a jetty app server and an apache2 http server. This answer actually gave me the information that worked. For me, adding:

    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
    

    to the site conf file was enough for the destination to use https instead of http as the protocol when building links in the response. I tried the X-FORWARDED-PROTOCOL above, but that didn't work. Hopefully this will help in future Google searches!

    0 讨论(0)
提交回复
热议问题