Linux下JAVA WEB服务器的搭建三(NGINX)
Posted 孔子-说
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下JAVA WEB服务器的搭建三(NGINX)相关的知识,希望对你有一定的参考价值。
目录
3.2.4 configure脚本自动生成Makefile脚本
要部署普通的java web项目,需要在linux上搭建好web服务器运行环境,包括JDK、tomcat、mysql、redis、nginx等,本文主要介绍nginx的下载安装配置,linux系统采用的是ubuntu。nginx官网地址:http://nginx.org/ 。nginx官方文档:nginx documentation。
1、nginx介绍
Nginx (engine x) 是一个是一款轻量级、高性能的WEB和反向代理服务器,同时也提供了IMAP/POP3/SMTP代理服务,在BSD-like 协议下发行。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。2021年5月25日发布的最新稳定版本为1.20.1。
Nginx 可以在大多数 Unix Linux OS 上编译运行,并有 Windows 移植版。 特点是占有内存少,并发能力强,在连接高并发的情况下,Nginx是Apache服务不错的替代品。一般情况下,对于新建站点,建议使用最新稳定版作为生产版本。
nginx优点:
- 1、轻量级,采用 C 进行编写,同样的 web 服务,会占用更少的内存及资源。
- 2、抗并发,nginx 以 epoll and kqueue 作为开发模型,处理请求是异步非阻塞的,负载能力比 apache 高很多,而 apache 则是阻塞型的。在高并发下 nginx 能保持低资源低消耗高性能 ,而 apache 在 php 处理慢或者前端压力很大的情况下,很容易出现进程数飙升,从而拒绝服务的现象。
- 3、nginx 处理静态文件好,静态处理性能比 apache 高三倍以上。
- 4、nginx 的设计高度模块化,编写模块相对简单。
- 5、nginx 配置简洁,正则配置让很多事情变得简单,而且改完配置能使用 -t 测试配置有没有问题,apache 配置复杂 ,重启的时候发现配置出错了,会很崩溃。
- 6、nginx 作为负载均衡服务器,支持 7 层负载均衡。
- 7、nginx 本身就是一个反向代理服务器,而且可以作为非常优秀的邮件代理服务器。
- 8、启动特别容易, 并且几乎可以做到 7*24 不间断运行,即使运行数个月也不需要重新启动,还能够不间断服务的情况下进行软件版本的升级
- 9、社区活跃,各种高性能模块出品迅速
Apache优点:
- 1、apache 的 rewrite 比 nginx 强大,在 rewrite 频繁的情况下,用 apache
- 2、apache 发展到现在,模块超多,基本想到的都可以找到
- 3、apache 更为成熟,少 bug ,nginx 的 bug 相对较多
- 4、apache 超稳定
- 5、apache 对 PHP 支持比较简单,nginx 需要配合其他后端用
- 6、apache 在处理动态请求有优势,nginx 在这方面是鸡肋,一般动态请求要 apache 去做,nginx 适合静态和反向。
apache 仍然是目前的主流,拥有丰富的特性,成熟的技术和开发社区。两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程。一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache 。更为通用的方案是,前端 nginx 抗并发,后端 apache 集群,配合起来会更好。
nginx应用场合:
- 静态服务器(图片,视频服务),另个lighttpd。并发几万,html,js,css,flv,jpg,gif等。
- 动态服务,nginx—fastcgi 方式运行PHP,jsp。(PHP并发约500-1500,MySQL 并发约300-1500)。
- 反向代理,负载均衡。日pv2000W以下,都可直接用nginx做代理。
- 缓存服务。类似 SQUID,VARNISH。
2、nginx的下载
进入ningx官网下载地址:http://nginx.org/en/download.html,下载最新稳定版本(stable)或者复制下载链接后直接下载到服务器上。
wget http://nginx.org/download/nginx-1.20.1.tar.gz
3、nginx的安装
linux的Ubuntu和Center os系统安装方式是不一样的。可以通过 cat /proc/version 命令查看linux系统。在Ubuntu下安装Nginx有2种方法,基于APT源安装和编译源码安装,如果想要安装最新版本的就必须下载源码包编译安装。
连接服务器后,获取root权限,执行sudo apt update(如果已经是root权限可以去掉sudo),检查可更新的软件包汇总情况,如果有需要更新的软件包,可以使用以下命令更新:sudo apt upgrade 软件包名。
3.0 nginx的卸载
使用命令 nginx -v 查看nginx的版本号,若已安装了nginx但版本不符合要求,可以通过以下命令卸载。有输入提示时,输入Y即可。
# 彻底卸载nginx
apt-get --purge autoremove nginx
3.1 基于APT源安装
sudo apt-get install nginx
安装过程会让选一个Y同意占用内存。
安装好的文件位置:
- /usr/sbin/nginx:主程序
- /etc/nginx:存放配置文件
- /usr/share/nginx:存放静态文件
- /var/log/nginx:存放日志
- /etc/init.d/:创建了启动脚本nginx
- 默认的虚拟主机的目录设置在了/var/www/nginx-default (有的版本默认的虚拟主机的目录设置在了/var/www, 请参考/etc/nginx/sites-available里的配置)
通过这种方式安装的,会自动创建服务,会自动在/etc/init.d/nginx新建服务脚本,然后就可以使用sudo service nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}的命令启动。创建好的文件由于放在/usr/sbin目录下,所以能直接在终端中使用nginx命令而无需指定路径。
通过nginx -v 命令查看nginx是否安装成功,service nginx start 启动nginx。
3.2 编译源码安装
编译源码安装这种方式可以自定安装指定的模块以及最新的版本。方式更灵活。
3.2.1 安装依赖包
apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
# Ubuntu20.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
3.2.2 解压nginx tar包
在Ubuntu服务器的/opt目录下新建nginx目录,将下载的nginx-1.20.1.tar.gz安装包复制到该目录下解压。解压命令:tar -zxvf nginx-1.20.1.tar.gz 。
- 也可以将nginx安装到/usr/local目录下,即 /usr/local/nginx 目录。
cd /opt
mkdir nginx
cd nginx
wget wget http://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz
3.2.3 nginx文件夹改名并进入到该目录
如果使用的是没有权限的非root账户,则在命令的前面加上 sudo。
3.2.4 configure脚本自动生成Makefile脚本
nginx源码的编译需要使用configure脚本自动生成Makefile脚本,configure脚本支持许多选项,来控制安装的各种属性。
进入到nginx解压后的目录中,执行命令:./configure --prefix=/nginx (--prefix=/nginx指明软件安装的路径,/nginx是为安装nginx新建的目录,可以不指定)。
- 使用./configure --help查看各模块使用情况,用 --without-http_ssi_module 方式关闭不需的模块。可用 --with-http_perl_modules 方式安装需要的模块(如:./configure --prefix=/data/nginx-1.10.1 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module)。
- 注意:nginx的一些模块需要依赖其他第三方的库,通常有pcre库(支持rewrite模块)、zlib库(支持gzip模块)和openssl库(支持ssl模块)等。
# 进入nginx目录
/opt/nginx/nginx-1.20.1-server1
# 执行命令
./configure
3.2.5 编译nginx
执行make命令编译,可以看到屏幕上nginx源代码编译的过程。
3.2.6 安装nginx
使用 make install 命令完成安装后,将当前目录定位到 /usr/local/nginx 下,就可以查看nginx的全部资源了,主要有4个文件夹组成:conf、html、logs、sbin。
- conf目录中存放nginx的所有配置文件
- html目录中存放了nginx服务器在运行过程中调用的一些html网页文件
- logs用来存放nginx服务器日志的
- sbin目录存放的是nginx的主程序
3.3 ubuntu 防火墙开启80端口
如果nginx的80端口不在防火墙启用规则中,需添加进去,sudo ufw allow 80,然后通过sudo ufo status 可以查看到80 端口已开放。
- 防火墙禁用端口命令:ufw deny端口
- 关闭防火墙命令:ufw disable
3.4 启动并访问nginx
进入nginx启动目录/usr/local/nginx/sbin,通过 ./nginx 命令启动nginx。可以通过-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,默认配置文件地址为: /usr/local/nginx/conf/nginx.conf。可通过nginx -t 查看配置文件的信息。
cd /usr/local/nginx/sbin
# 无参数启动nginx,nginx会自动加载默认路径的配置文件
./nginx
# 有参数启动nginx - 指定配置文件
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
注意:-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,可以通过-h查看帮助命令。
#查看进程:
ps -ef | grep nginx
#查看进程:
ps aux | grep nginx
#systemctl命令启动
systemctl start nginx
# 重启Nginx服务
systemctl restart nginx
# 查看端口号
netstat -tlnp
访问nginx
网页输入ip地址,访问成功,到此,nginx安装完毕。
3.5 配置软链接任意路径启动nginx
配置软链接在usr/bin/nginx(该路径在系统PATH下),可以在任意路径下直接输入nginx启动(不需要指定执行路径)。
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
3.6 停止nginx服务4种方法
1)从容停止服务
命令:nginx -s quit ,这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止。
2)立即停止服务
命令:nginx -s stop,这种方法比较强硬,无论进程是否在工作,都直接停止进程。
3)systemctl 停止
命令:systemctl stop nginx.service,systemctl属于Linux命令。
4)killall 方法杀死进程
命令:killall nginx,直接杀死进程,在上面无效的情况下使用,态度强硬,简单粗暴!
3.7 nginx其他命令
1)重新载入配置文件
当有系统配置文件有修改,使用命令nginx -s reload重新载入配置文件,建议不要停止再重启,以防报错!
2)测试nginx配置文件是否正常命令 nginx -t
root@xnzysq20210118001:/usr/local# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
root@xnzysq20210118001:/usr/local#
3)检查进程是否正常
通过命令 netstat -lntup |grep nginx 或 ps -ef | grep nginx 检查进程是否正常。
4)查看html是否正常
通过http命令行工具curl访问http://localhost是否正常。curl -I http://localhost 或 curl http://localhost 。
5)nginx -V 查看已经编译的参数,nginx -v 查看版本
6)使用kill命令操作nginx。格式:kill -信号 PID
信号名称:
- TERM,INT 快速关闭
- QUIT 优雅的关闭,保持吸纳有的客户端连接
- HUP 重启应用新的配置文件
- USR1 重新打开日志文件
- USR2 升级程序
- WINCH 优雅的关闭工作进程
例子:
- kill -QUIT `cat /data/nginx/nginx.pid`
- kill -HUP `cat /data/nginx/nginx.pid`
7)nginx其他命令
nginx -s signal
signal:
- stop — fast shutdown
- quit — graceful shutdown
- reload — reloading the configuration file
- reopen — reopening the log files
- 用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中
nginx -h 或 nginx -? 显示帮助信息
4、使用systemctl控制Nginx开机自启动
Systemctl是一个系统管理守护进程、工具和库的集合,用于取代System V、service和chkconfig命令,初始进程主要负责控制systemd系统和服务管理器。
通过Systemctl –help可以看到该命令主要分为:查询或发送控制命令给systemd服务,管理单元服务的命令,服务文件的相关命令,任务、环境、快照相关命令,systemd服务的配置重载,系统开机关机相关的命令。
4.1 创建nginx.service
cd到 /usr/lib/systemd/system目录下,创建nginx服务启动文件,vim nginx.service(或用绝对路径创建vim /usr/lib/systemd/system/nginx.service),vim表示编辑一个文件,若文件不存在则创建。
4.2 编辑nginx.service服务启动文件
[Unit]
Description=nginx -high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
WorkingDirectory=/usr/local/nginx
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
4.3 使服务启动文件生效
systemctl daemon-reload
4.4 启动nginx
systemctl start nginx
4.5 关闭nginx
systemctl stop nginx
4.6 重启nginx
systemctl restart nginx
4.7 开机启动
systemctl enable nginx
4.8 测试
通过http命令行工具curl访问http://localhost是否正常。使用 ps aux|grep nginx 命令查看进程。使用 netstat -ntlp 命令查看网络端口情况。
5、nginx的配置
5.1 nginx文件结构
- 1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
- 2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
- 3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
- 4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
- 5、location块:配置请求的路由,以及各种页面的处理情况。
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
5.2 基础配置文件
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
5.3 配置文件详解
#nginx进程,一般设置为和cpu核数一样
worker_processes 4;
#错误日志存放目录
error_log /data1/logs/error.log crit;
#运行用户,默认即是nginx,可不设置
user nginx
#进程pid存放位置
pid /application/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
#最大文件打开数(连接),可设置为系统优化后的ulimit -HSn的结果
worker_rlimit_nofile 51200;
cpu亲和力配置,让不同的进程使用不同的cpu
worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;
#工作模式及连接数上限
events
{
use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
worker_connections 1024; #;单个后台worker process进程的最大并发链接数
}
###################################################
http
{
include mime.types; #文件扩展名与类型映射表
default_type application/octet-stream; #默认文件类型
#隐藏响应header和错误通知中的版本号
server_tokens off;
#开启高效传输模式
sendfile on;
-------------------------------------------------------------------------------------------------
#激活tcp_nopush参数可以允许把httpresponse header和文件的开始放在一个文件里发布,
积极的作用是减少网络报文段的数量
tcp_nopush on;
#激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
tcp_nodelay on;
#连接超时时间,单位是秒
keepalive_timeout 60;
#开启gzip压缩功能
gzip on;
#设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,表示不管页面多大都进行压缩。建议设置成大于1K。如果小于1K可能会越压越大。
gzip_min_length 1k;
#压缩缓冲区大小。表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。
gzip_buffers 4 16k;
#压缩版本(默认1.1,前端为squid2.5时使用1.0)用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可。
gzip_http_version 1.0;
#压缩比率。用来指定GZIP压缩比,1压缩比最小,处理速度最快;9压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源。
gzip_comp_level 9;
#用来指定压缩的类型,“text/html”类型总是会被压缩
gzip_types text/plain application/x-javascript text/css application/xml;
#vary header支持。该选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用
Squid缓存经过Nginx压缩的数据。
gzip_vary off;
#开启ssi支持,默认是off
ssi on;
ssi_silent_errors on;
#设置日志模式
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#反向代理负载均衡设定部分
#upstream表示负载服务器池,定义名字为backend_server的服务器池
upstream backend_server {
server 10.254.244.20:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.242.40:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.245.19:81 weight=1 max_fails=2 fail_timeout=30s;
server 10.254.243.39:81 weight=1 max_fails=2 fail_timeout=30s;
#设置由 fail_timeout 定义的时间段内连接该主机的失败次数,以此来断定 fail_timeout 定义的时间段内该主机是否可用。默认情况下这个数值设置为 1。零值的话禁用这个数量的尝试。
设置在指定时间内连接到主机的失败次数,超过该次数该主机被认为不可用。
#这里是在30s内尝试2次失败即认为主机不可用!
}
###################
#基于域名的虚拟主机
server
{
#监听端口
listen 80;
server_name www.abc.com abc.com;
index index.html index.htm index.php; #首页排序
root /data0/abc; #站点根目录,即网站程序存放目录
error_page 500 502 404 /templates/kumi/phpcms/404.html; #错误页面
#伪静态 将www.abc.com/list....html的文件转发到index.php。。。
#rewrite ^/list-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)\\.html$ /index.php?m=content&c=index&a=lists&catid=$1&types=$2&country=$3&language=$4&age=$5&startDate=$6&typeLetter=$7&type=$8&page=$9 last;
#location 标签,根目录下的.svn目录禁止访问
location ~ /.svn/ {
deny all;
}
location ~ \\.php$
{ #符合php扩展名的请求调度到fcgi server
fastcgi_pass 127.0.0.1:9000; #抛给本机的9000端口
fastcgi_index index.php; #设定动态首页
include fastcgi.conf;
}
5.4 配置文件实例
########### 每个指令必须有分号结束。#################
#user administrator administrators; #配置用户或者组,默认为nobody nobody。
#worker_processes 2; #允许生成的进程数,默认为1,一般设置为和cpu核数一样
#pid /nginx/pid/nginx.pid; #指定nginx进程运行文件存放地址
error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为off
#use epoll; #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 1024; #最大连接数,默认为512
}
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #取消服务日志
log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
access_log log/access.log myFormat; #combined为日志格式的默认值
sendfile on; #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
sendfile_max_chunk 100k; #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
keepalive_timeout 65; #连接超时时间,默认为75s,可以在http,server,location块。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
error_page 404 https://www.baidu.com; #错误页
server {
keepalive_requests 120; #单连接请求上限次数。
listen 4545; #监听端口
server_name 127.0.0.1; #监听地址
location ~*^.+$ { #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
#root path; #根目录
#index vv.txt; #设置默认页
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}
需要注意的有以下几点:
- 1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;
- 2.$remote_user :用来记录客户端用户名称;
- 3.$time_local : 用来记录访问时间与时区;
- 4.$request : 用来记录请求的url与http协议;
- 5.$status : 用来记录请求状态;成功是200;
- 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;
- 7.$http_referer :用来记录从那个页面链接访问过来的;
- 8.$http_user_agent :记录客户端浏览器的相关信息;
- 9.惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能;
- 10.每个指令必须有分号结束;
6、nginx安装常见问题
1)nginx 安装报错:make: *** No rule to make target `build', needed by `default'. Stop.
出现此种情况,是linux系统没有安装先决条件
1、GCC——GNU编译器集合(GCC可以使用默认包管理器的仓库(repositories)来安装,包管理器的选择依赖于你使用的Linux发布版本,包管理器有不同的实现:yum是基于Red Hat的发布版本;apt用于Debian和Ubuntu;yast用于SuSE Linux等等。)
RedHat中安装GCC:yum install gcc
Ubuntu中安装GCC:apt-get install gcc
2、PCRE库(Nginx编译需要PCRE(Perl Compatible Regular Expression),因为Nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法。这里需要安装两个安装包pcre和pcre-devel。第一个安装包提供编译版本的库,而第二个提供开发阶段的头文件和编译项目的源代码,这正是我们需要的理由。)
RedHat中安装PCRE:yum install pcre pcre-devel
Ubuntu中安装PCRE:apt-get install libpcre3 libpcre3-dev
3、zlib库(zlib库提供了开发人员的压缩算法,在Nginx的各种模块中需要使用gzip压缩。如同安装PCRE一样,同样需要安装库和它的源代码:zlib和zlib-devel。)
RedHat中安装zlib:yum install zlib zlib-devel
Ubuntu中安装zlib:apt-get install zlib1g zlib1g-dev
4、OpenSSL库(在Nginx中,如果服务器提供安全网页时则会用到OpenSSL库,我们需要安装库文件和它的开发安装包(openssl和openssl-devel)。)
RedHat中安装OpenSSL:yum install openssl openssl-devel
Ubuntu中安装OpenSSL:apt-get install openssl openssl-dev
# Ubuntu20.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
以上是关于Linux下JAVA WEB服务器的搭建三(NGINX)的主要内容,如果未能解决你的问题,请参考以下文章