将HTTP重定向到HTTPS(可选),(文/开源中国)    

发布时间:2020-04-10  栏目:新葡京32450网址  评论:0 Comments

更新表明:

转自:

Spring Boot 2.x 业已发表了相当久,今后 Spring Cloud 也发表了 基于 Spring
Boot 2.x 的 Finchley 版本,今后联手为项目做贰次完整框架进级。

Spring Boot+Nginx+Tomcat+SSL配置笔记

假诺你的tomcat应用供给利用ssl来增长安全性,一种做法是把tomcat配置为永葆ssl,另一种做法是用nginx反向代理tomcat,然后把nginx配置为https访谈,何况nginx与tomcat之间配置为不感觉奇的http合同就能够。下边说的是后一种办法,同期即便我们遵照spring-boot来支付使用。

一、配置nginx:

server {

    listen 80;

    listen 443 ssl;

    server_name localhost;

    ssl_certificate server.crt;

    ssl_certificate_key server.key;

    location / {

        proxy_pass ;

        proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;

        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header X-Forwarded-Port $server_port;

    }

}

此间有三点供给验证:

1、nginx允许三个server同一时间扶植http和https二种左券。这里大家独家定义了http:80和https:443八个左券和端口号。如果您无需http:80则可去除那行。

2、nginx收到央求后将透过http契约转发给tomcat。由于nginx和tomcat在同一台机里之所以nginx和tomcat之间不须要使用https左券。

3、由于对tomcat来说收到的是日常的http乞求,由此当tomcat里的利用爆发转向恳求时将中转为http而非https,为此大家供给报告tomcat已被https代理,方法是扩张X-Forwared-Proto和X-Forwarded-Port三个HTTP头消息。

二、接着再结构tomcat。基于spring-boot开辟时只需在application.properties中开展配备:

server.tomcat.remote_ip_header=x-forwarded-for

server.tomcat.protocol_header=x-forwarded-proto

server.tomcat.port-header=X-Forwarded-Port

server.use-forward-headers=true

该配置将指令tomcat从HTTP头音讯中去获取公约音讯(而非从HttpServletRequest中拿走),同一时间,假若你的使用还用到了spring-security则也没有需求再安插。

除此以外,由于spring-boot丰富自动化,你也能够把上边四行变为两行:

server.tomcat.protocol_header=x-forwarded-proto

server.use-forward-headers=true

下边那样写也得以:

server.tomcat.remote_ip_header=x-forwarded-for

server.use-forward-headers=true

 但不能够只写一行:

server.use-forward-headers=true

现实请参见

server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto
The presence of either of those properties will switch on the valve

 别的,纵然大家的tomcat被nginx反向代理了,但仍可访问到其8080端口。为此可在application.properties中追加一行:

server.address=127.0.0.1

那样一来其8080端口就不能不被本机访谈了,此外机器访问不到。

Spring Boot 的详尽介绍:请点这里
Spring Boot 的下载地址:请点这里

本文长久更新链接地址:

Boot+Nginx+汤姆cat+SSL配置笔记
借使你的tomcat应用要求运用ssl来增加安全性,一种做法是把tomcat配置为支撑ssl,另一种做法是用nginx反向代理…

 import org.apache.catalina.Context;import org.apache.catalina.connector.Connector;import org.apache.tomcat.util.descriptor.web.SecurityCollection;import org.apache.tomcat.util.descriptor.web.SecurityConstraint;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.web.HttpMessageConverters;import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.PropertySource;import org.springframework.http.converter.HttpMessageConverter;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import java.io.File;import java.util.ArrayList;import java.util.List;@Controller@SpringBootApplicationpublic class ThymeleafTestApplication<T> { @RequestMapping public String index(Model model){ Person single=new Person; List<Person> people=new ArrayList<Person>(); Person p1=new Person; Person p2=new Person; Person p3=new Person; people.add; people.add; people.add; model.addAttribute("singlePerson",single); model.addAttribute("people",people); return "index"; } //实现http协议转https协议的配置 @Bean public EmbeddedServletContainerFactory servletContainer(){ TomcatEmbeddedServletContainerFactory tomcat=new TomcatEmbeddedServletContainerFactory(){ @Override protected void postProcessContext(Context context) { SecurityConstraint securityConstraint=new SecurityConstraint(); securityConstraint.setDisplayName("CONFIDENTIAL"); SecurityCollection collection=new SecurityCollection(); collection.addPattern; securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; tomcat.addAdditionalTomcatConnectors(httpConnector;//添加连接 return tomcat; } @Bean public Connector httpConnector(){ Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme; connector.setPort; connector.setSecure; connector.setRedirectPort; return connector; } public static void main(String[] args) { SpringApplication.run(ThymeleafTestApplication.class, args); }}
  • 构造 Netty 时将忽略server.ssl.key-alias #19197
  • 在三个品类中选拔四个数据库时,Liquibase
    施行器端点不可能提供准确的消息 #19171
  • 当 Rabbit 配置为未有协商的地点时,ssl.enabled
    将被忽略 #19109
  • 在 CloudFoundryVcapEnvironmentPostProcessor 中使用
    DeferredLog #19027
  • @SpyBean (MockitoPostProcessor卡塔尔  尝试最早化 @StepScope Bean
    超过范围 #19020
  • 只要存在科学的权限,则 HealthWebEndpointMapper
    应公开详细消息 #18998
  • Spring Boot – Maven
    插件损坏 #18936
  • BasicJsonParser 不能够正确管理 [ 和 {
    之间的空格 #18911
  • @ServletComponentScan
    不适用于组件索引 #18910

在Spring Boot中启动HTTPS

Eureka Server

Eureka Server 信任更新

升级前:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId></dependency>

升级后:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>

Spring Boot http 转https
Spring Boot http转https 为什么在布置文件中早就安排了,依然不可能自动转?
keystore.p12也已经变化,项目曾经安顿扶植https左券。
application.properties的配置:
server.port=8443
spring.thymeleaf.cache=false
security.require-ssl=true
server.ssl.key-store=keystore.p12
server.ssl.key-store-password=111111
server.ssl.keyStoreType=JKS
server.ssl.keyAlias:tomcat

(文/开源中华夏族民共和国State of Qatar    

和煦通过keytool生成

Maven

晋升到 Spring Boot 2.x 之后开掘 Spring Boot 的 Maven
运转插件倒霉用了,主若是 Profile 不能自由切换。

升级前:

spring-boot:run -Drun.profiles=profile1

升级后:

spring-boot:run -Dspring-boot.run.profiles=profile1

具体的请仿效:

这是小编的构造文件:

Bug 修复

会生成二个PKCS12格式的名称叫keystore.p12的证件,之后运营Spring
Boot时会援用这一个表明

Spring Boot 1.5.x => Spring Boot 2.0.2

Spring Boot 2.1.11 公布了,更新内容如下:

Spring Boot 中开启HTTPS

Eureka Client

因为安排中央需求作为服务注册到注册主题,所以需求升高 Eureka
Client,其余重视未有修改。

Eureka Client 正视更新

升级前:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId></dependency>

升级后:

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

材质传送门

总结

上述都以踩完全部的坑总计出来的消除方案,实际解决难题的进度远要复杂的多。版本变化有一点大,本次已成功进级了
Spring Cloud 根底重视,及注册宗旨(Eureka Server)、配置主旨(Config
Server)。

任何像 Gateway 庖代了 Zuul, 及别的零零件再慢慢提高,Spring Cloud
的高速发展令晋级变得要命蛋疼,本文记录了升迁进程中踩过的有着的坑。。。

坑死了,已经保证编写翻译、运行经常化,别的还应该有哪些坑不精晓,刚荣升完 Finchley
那一个规范版本,Spring Cloud 刚刚又发布了 Finchley.SENCORE1,感到 Spring Cloud
变成了学不动种类了。。。

@ All 码农们:你们升级了呢?有境遇哪些的坑?迎接留言!

越多干货推荐

1.史上最强 Java 中高级面试题打理

2.史上最强 Spring Boot & Cloud 教程整理

3.史上最强结构划虚构计布满式能力干货收拾

越来越多请扫描下方的二维码关怀我们的Wechat民众号,干货每天推送!

图片 1Java技术栈

相关文章

留下评论

网站地图xml地图