http到https网站上的重定向

我正在使用spring boot和haproxy。

我的spring启动配置负责ssl终止。 当用户打我的fqdn www.thebestsiteever.com时,用户无法找到网站错误。 但是,如果他们把https://www.thebestsiteever.com它工作得很好。 请注意,我的spring引导应用处理ssl并将请求从http重定向到https,因此haproxy应该是仅用于ssl和round robin负载均衡器的传递。

我研究了许多关于重定向的选项,但仍然存在问题。 一旦用户使用https连接(1次),所有后续请求都按预期工作,这意味着www.thebestsiteever.com即使在https未加前缀的情况下也能正常工作,所以https初始数据在客户端浏览器中缓存。 我需要用户第一次访问我的网站,只需访问www.thebestsiteever.com,而不必将https添加到fqdn。 这种行为在所有浏览器和移动设备上都很明显,请参阅下面的配置并提供一些选项供我修复。 我阅读了大部分文档,关于这个设置有一个与spring boot和haproxy有关的错误,但这是我们目前所拥有的,我们希望使它工作。

# haproxy version = 1.6.3

global
  stats socket /var/run/haproxy.sock mode 600 level admin
  stats timeout 2m

  log 127.0.0.1 local0
  log 127.0.0.1 local1 notice
  chroot /var/lib/haproxy
  user haproxy
  group haproxy

defaults
  log global
  mode tcp
  option tcplog
  option dontlognull
  timeout connect 5000ms
  timeout client 50000ms
  timeout server 50000ms

  frontend http-in
    bind *:80
    bind *:443
    mode tcp
    default_backend nodes

    backend nodes
       mode tcp
       balance roundrobin

       server web4 XX.XX.XX.168:9443 check
       server web5 XX.XX.XX.168:9444 check
       server web6 XX.XX.XX.168:9445 check
       server web7 XX.XX.XX.168:9446 check

       # spring boot startup setup
       @Bean
            public EmbeddedServletContainerFactory servletContainer() {
             TomcatEmbeddedServletContainerFactory tomcat =
                    new TomcatEmbeddedServletContainerFactory() {

                @Override
                protected void postProcessContext(Context context) {
                    SecurityConstraint securityConstraint = new 
                     SecurityConstraint();
                    securityConstraint.setUserConstraint("CONFIDENTIAL");
                    SecurityCollection collection = new SecurityCollection();
                    collection.addPattern("/*");
                    securityConstraint.addCollection(collection);
                    context.addConstraint(securityConstraint);
                }
            };
         tomcat.addAdditionalTomcatConnectors(createHttpConnector());
          return tomcat;
      }

      @Value("${server.default.port}")
      private int serverPortHttp;

      @Value("${server.port}")
      private int serverPortHttps;

      private Connector createHttpConnector() {
          Connector connector =
            new Connector("org.apache.coyote.http11.Http11NioProtocol");
           connector.setScheme("https");
         connector.setSecure(false);
         connector.setPort(serverPortHttp);
         connector.setRedirectPort(serverPortHttps);
         return connector;
        }


      #application-stage.yml
       server:
         port: 9443
           ssl:
            key-alias: tomcat
            key-store: classpath:config/keystore.p12
            key-store-password: xxxxxxx
链接地址: http://www.djcxy.com/p/62739.html

上一篇: http to https redirect on site

下一篇: Haproxy behind ELB