当前位置: 首页 > 知识库问答 >
问题:

Springboot和angular Container之间的HTTPS通信使用https与nginx

蒲昀
2023-03-14

我有两个Docker容器,spring boot和Angular。

此外,我在Ubuntu中安装了Nginx。

我有这个conf文件Nginx来使用HTTPS重定向Angular应用程序

  server {
root /var/www/html;
        server_name dev.xxxxx.io www.dev.xxxxx.io;
        location / {
            proxy_pass         http://127.0.0.1:8080;  # Angular container port
        
        proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
            proxy_set_header   X-Forwarded-Proto $scheme;
        }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/dev.xxxxx.io/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/dev.xxxxx.io/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot


}
server {
    if ($host = www.dev.xxxxx.io) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = dev.xxxxx.io) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80; 
        listen [::]:80;
        server_name dev.xxxx.io www.dev.xxxxx.io;
    return 404; # managed by Certbot

我的angular容器使用端口8080:80运行(docker文件很简单), Springboot容器使用端口8181:8181运行当我用https://xx.xx.xx.xx:8181更改Angular中的环境文件时,我出现了一个错误,因为后端(Springboot)没有像https那样配置。

共有1个答案

郎献
2023-03-14

转到端口8181时,您直接指向Spring Boot容器,该容器显然没有在端口8181上使用HTTPS运行。

我想你应该指向你的NGINX来处理SSL终止,所以你需要设置另一个重定向到你的应用的代理。如果没有,您可以将SSL添加到Spring Boot应用程序,但无法使用Certbot刷新证书(您似乎正在使用它,因为我可以在nginx.conf文件中看到有关它的注释)

您可以使用不同的路径或不同的端口来执行此操作。

root /var/www/html;
    server_name dev.xxxxx.io www.dev.xxxxx.io;
    location / {
        proxy_pass         http://127.0.0.1:8080;  # Angular container port
    
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

    ### Addition start ###
    location /api {
        proxy_pass         http://127.0.0.1:8181/api;  # Spring container port and path (add context path to Spring boot as well)
    
        proxy_redirect     off;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
    ### Addition end ###

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/dev.xxxxx.io/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/dev.xxxxx.io/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

然后将Angular应用程序更改为调用https://dev.xxxxx.io/api

要添加上下文路径,请将server.servlet.context-path=/api添加到application.properties(或yaml)

P、 S:我不是100%确定您需要更改上下文路径,但如果您不这样做,我似乎还记得一些问题。

 类似资料:
  • 我在2个不同的私有子网中有2个EC2实例,都位于负载均衡器后面。我想通过域名https url在两个实例中的应用程序之间设置通信。我该怎么做?

  • 5.4 通过 HTTPS 的通信 大多数智能手机应用都与互联网上的 Web 服务器通信。 作为通信的方法,我们在这里集中讨论 HTTP 和 HTTPS 的两种方法。 从安全角度来看,HTTPS 通信更为可取。 最近,Google 或 Facebook 等主要 Web 服务已经开始使用 HTTPS 作为默认设置。 自 2012 年以来,Android 应用中 HTTPS 通信实现的许多缺陷已被指出。

  • 我有一个使用http和https的SpringBoot 2.0应用程序。因此,在端口9080上,它服务于http协议,在端口9443上,它工作正常。我唯一想要的是重定向,如果用户输入例如:http://localhost:9443/e1 综上所述: http://localhost:9080/e1 https://localhost:9443/e1 http://localhost:9443/e1

  • 我有一个小的springboot应用程序。我需要使用HTPPS,我从CA购买带有嵌入式tomcat的SSL证书。我试着配置它。应用财产: p、 12.使用keytool创建 **.我从加州得到的crt。我也有私钥,但不知道我需要在哪里使用它。 当我尝试启动此应用程序时,出现了一个错误 为什么应用程序看不到别名?我在keystore中看到了。 可能我需要一些其他设置来在springboot tomc

  • 我在Springboot应用程序日志中发现了这样的错误消息: 我知道,这可能是因为有人/某个应用程序使用HTTPS而不是HTTP调用我的endpoint。我可以通过在属性中包含以下内容来记录这些请求: 现在,我收到了未分析的文本,如下所示: 是否可以对其进行解码/解密,并找出实际的API调用是什么?

  • 使用 HTTPS HTTPS 即 HTTP over SSL/TLS,是 HTTP 的安全版本,在 HTTP 上加了一层处理加密信息的模块。 SSL/TLS 全称安全传输层协议 Transport Layer Security, 是介于 TCP 和 HTTP 之间的一层安全协议,不影响原有的 TCP 协议和 HTTP 协议,所以使用 HTTPS 基本上不需要对 HTTP 页面进行太多的改造。浏览器