「技术架构」使用NGINX部署Spring Boot

简介: 「技术架构」使用NGINX部署Spring Boot


介绍

Spring / Spring引导应用程序的部署总是与Apache Tomcat相关联,而且由于框架本身运行在嵌入式Tomcat web服务器之上,所以它似乎是默认的解决方案。我一直认为这是一个问题,因为我对Apache的解决方案不是很熟悉,而且它处理配置和设置的方式对我来说似乎有些过火。我决定抛弃它,支持NGINX,到目前为止,这个解决方案没有任何缺陷。要在ssl安全的NGINX下部署Spring Boot JAR(或WAR)工件,您必须这样做。

准备Spring引导应用程序

除了通过适当的servlet参数设置资源/应用程序的上下文路径外,在应用程序本身中实际上没有什么可做的。属性文件:

服务器:

server:

servlet:

contextPath= /myapplication

上下文路径定义了我们应用程序的入口点,并且为我们创建的每个应用程序设置不同的路径是一种总体的好习惯。指定此参数后,应用程序将在127.0.0.1:8080/myapplication上可用,而不是默认的127.0.0.1:8080/,并且对于NGINX而言,此单路径更改将非常方便。

更新应用程序配置后,我们可以生成一个准备部署的JAR或WAR文件,并使用FTP或SSH将其上传到我们的服务器,以便稍后我们可以在远程计算机上运行它。

准备服务器环境

在我的项目中,我使用了运行Debian 9的虚拟机,并进行了库存设置和配置。为了使一切正常运行,我们需要安装:

  • Java,运行应用程序
  • UFW,以保护我们的服务器端口
  • NGINX,处理Web请求

对于Java,我们可以安装开源OpenJDK:

  • sudo apt update
  • sudo apt install java

或Oracle提供的专有Java JDK:

# Required to add PPA's

sudo apt install software-properties-common

# Adding a PPA providing Oracle's JDK

sudo apt-add-repository ppa:webupd8team/java

sudo apt update

# Replace '8' with desired java version

sudo apt install oracle-java8-installer

对于其他软件,在Debian(可能还有其他基于Debian的系统)上,这些命令应该可以完成以下工作:

sudo apt update

sudo apt install ufw nginx

安装完所有组件后,我们可以启用UFW,以阻止除NGINX处理的所有传入连接之外的所有传入连接:

sudo systemctl start ufw

sudo systemctl enable ufw

# 'Full' can be replaced with 'HTTP' or 'HTTPS' to allow only selected protocol s

udo ufw allow 'Nginx Full'

现在我们可以启用并启动NGINX:

sudo systemctl start nginx

sudo systemctl enable nginx

将Spring Boot应用程序作为后台服务运行

在NGINX准备提供数据时,我们需要运行我们的应用程序。我们当然可以通过一个简单的java -jar myapplication.jar命令来执行此操作,但是此解决方案无法使我们的应用程序保持活动状态并提供各种启动功能,因此最好创建一个后台服务,以使我们的应用程序永远在其中运行。的背景。为此,我们需要创建一个服务文件。Debian正在运行systemd管理器,因此我们的文件将是/etc/systemd/system/myapplication.service。对于其他Linux发行版,系统服务路径可能不同。我们的文件如下所示:

[Unit]

Description= # Place a descriptive application name here

After=syslog.target

After=network.target[Service]

User= # Define a user account that will own our app

Type=simple

[Service]

ExecStart=/usr/bin/java -jar # Provide /path/to/file/myapplication.jar

Restart=always

StandardOutput=syslog

StandardError=syslog

SyslogIdentifier= # A short identifier for system journal, f. e. 'myapplication'

[Install]

WantedBy=multi-user.target

保存文件后,可以使用默认的systemd服务管理器启动服务:

# This will start service from file we created earlier

sudo systemctl start myapplication.service

# To see if it's running we can check system journal

journalctl -u myapplication -b

如果一切正常,我们的应用程序现在应在后台运行,所有日志应写入系统日志。

配置NGINX代理请求

如果我们的应用程序启动,我们现在可以将NGINX配置为反向代理请求。我们已经安装了所有内容,因此现在我们需要创建一个配置文件,这将使我们的NGINX实例服务器请求正确的方式。为此,我们需要创建一个文件/etc/nginx/sites-available/myserver.com,在其中可以将myserver.com替换为服务器名,应用程序名或其他用于标识配置的文件。创建的文件应如下所示:

server {

# NGINX will listen on port 80 for both IP V4 and V6

listen 80;

listen [::]:80;

# Here we should specify the name of server

server_name myserver.com;

# Requests to given location will be redirected

location /myapplication {

# NGINX will pass all requests to specified location here

proxy_pass http://localhost:8080/;

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;

}

}

创建我们的配置后,我们可以使用NGINX内置的测试工具,通过调用以下命令来检查它是否可以正确应用:

sudo nginx -t

如果测试没有返回任何错误,我们可以安全地重新启动NGINX服务:

sudo systemctl restart nginx

测试反向代理

现在,为了测试我们的设置,我们可以将示例请求发送到http:// <server> / myapplication / <endpoint>。NGINX将收到请求,然后将/ myapplication / <endpoint>重定向到我们的Spring Boot应用程序,该应用程序在端口8080上本地运行。Spring的上下文路径设置为/ myapplication,因此我们的应用程序将仅接收/ <endpoint>部分, 调用指定的URL。

为HTTPS连接启用SSL

使用NGINX,我们可以将所有HTTP连接重定向到安全HTTP。如果我们的服务器没有SSL证书,最简单的方法是让我们加密CertBot(https://certbot.eff.org/),该证书可以从apt安装在Debian上,并自动配置NGINX来提供HTTPS服务 ,并使用一些简单的命令重定向所有HTTP通信:

sudo apt-get install certbot python-certbot-nginx -t stretch-backports

sudo certbot --nginx certonly

sudo certbot renew --dry-run

如果我们已经有了生成的SSL证书,则无需运行Certbot并获取一个新的证书。相反,我们可以更改NGINX配置以使用已经存在的证书。在线上有很多教程可以指导这一过程。

摘要

在NGINX代理后面运行Spring Boot应用程序是使我们的应用程序运行的一种相当不错的方法,它解决了Tomcat产生的许多问题。传递启动参数可以轻松得多,可以将日志写入系统日志,可以在单个配置文件中完成SSL设置,并且我们的应用程序可以作为标准系统服务运行。此设置也比Tomcat部署轻得多。

相关文章
|
3天前
|
应用服务中间件 网络安全 nginx
快速上手!使用Docker和Nginx部署Web服务的完美指南
快速上手!使用Docker和Nginx部署Web服务的完美指南
|
3天前
|
JavaScript 前端开发 应用服务中间件
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
angular引入包、路由权限配置、打包问题与nginx配置问题(简单部署)
26 0
|
1天前
|
应用服务中间件 nginx Docker
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷
|
1天前
|
应用服务中间件 nginx Docker
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(3)
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(3)
|
1天前
|
应用服务中间件 nginx Docker
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(2)
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(2)
|
1天前
|
应用服务中间件 nginx Docker
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(1)
Docker部署Nginx以及挂载数据卷(代码详细展示)_nginx 挂载大文件卷(1)
|
2天前
|
移动开发 供应链 Java
企业级智能制造MES系统源码,技术架构:springboot + vue-element-plus-admin
企业级智能制造MES系统源码,技术架构:springboot + vue-element-plus-admin。 企业级云MES全套源码,支持app、小程序、H5、台后管理。 生产调度:MES系统可以根据生产订单和资源状况,自动计算生产计划和调度,从而优化生产线的运作。
企业级智能制造MES系统源码,技术架构:springboot + vue-element-plus-admin
|
3天前
|
前端开发 Java 关系型数据库
Java医院绩效考核系统源码B/S架构+springboot三级公立医院绩效考核系统源码 医院综合绩效核算系统源码
作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
31 2
|
3天前
|
应用服务中间件 nginx
如何在树莓派部署Nginx并实现无公网ip远程访问内网制作的web网站
如何在树莓派部署Nginx并实现无公网ip远程访问内网制作的web网站
12 0
|
3天前
|
Java Docker 微服务