Nginx使用指南

文章目录

  • 前言
  • 一、源码编译
    • 1.1 编译
    • 1.2 第三方模块编译
  • 二、配置文件
    • 2.1 配置语法
    • 2.2 location语法
    • 2.3 配置文件块
    • 2.4 全局变量
  • 三、HTTP 服务器
    • 3.1 基本
    • 3.2 反向代理
    • 3.3 压缩
    • 3.4 负载均衡
    • 3.5 HTTPS 支持
    • 3.6 UrlRewrite
    • 3.7 防盗链配置
    • 3.8 跨域
    • 3.9 静态服务
    • 3.10 PC/手机端分离
    • 3.11 黑白名单
    • 3.12 静态文件缓存
  • 参考

前言

Nginx 是一款高性能的开源 Web 服务器软件,也可以用作反向代理服务器、负载均衡器和 HTTP 缓存服务器。由 Igor Sysoev 于 2002 年创建,2004年公开,并且在开源社区得到广泛的支持和贡献。

Nginx 的设计目标是解决 C10K(Concurrency 10,000) 问题,即同时处理成千上万个并发连接的能力。相比传统的Web服务器,如 Apache,Nginx 使用了异步非阻塞的事件驱动架构,更高效地处理大量的并发请求,提供更快的响应速度和更低的资源消耗。

以下是 Nginx 的一些主要特点:

  1. 高性能: Nginx 通过使用事件驱动的方式处理请求,可以高效地处理大量并发连接,减少了服务器的资源消耗。它具有良好的吞吐能力和低的内存占用。
  2. 负载均衡和反向代理: Nginx 可以作为反向代理来分发客户端请求到后端的多个服务器,实现负载均衡和高可用性。它还支持基于算法和会话的策略来调度请求。
  3. 静态文件服务和缓存: Nginx 可以直接提供静态文件服务,无需将请求转发给其他服务器。同时,它还能够在内存中缓存文件,减少磁盘 I/O 操作,提高访问速度。
  4. 可扩展性: Nginx 支持模块化的架构,可以根据需要编译和加载各种功能模块。这使得它可以灵活地满足不同场景的需求,并且方便扩展功能。
  5. 强大的配置选项: Nginx 提供了一个简单而灵活的配置语言,通过配置文件可以实现对服务器行为的精细控制。它支持各种HTTP特性和协议,如 SSL/TLS 加密、HTTP/2、WebSocket 等。
  6. 可靠稳定: Nginx经过长时间的生产环境验证,被广泛用于一些高流量和重要的网站。它具有出色的稳定性和可靠性,能够保持长时间的运行而不中断服务。

总之,Nginx 是一个高性能、可靠稳定的 Web 服务器软件,适用于处理大量并发连接和高流量的场景。无论是作为一个独立的 Web 服务器,还是配合其他服务一起工作,Nginx 都是一个非常强大和有价值的工具。

下载地址:https://nginx.org/en/download.html

一、源码编译

1.1 编译

先下载源码

curl -O http://nginx.org/download/nginx-1.24.0.tar.gz

解压

tar -zxvf nginx-1.24.0.tar.gz

在编译之前,需要确保系统中已安装了一些必要的依赖项,如gcc编译器、PCRE库(用于支持正则表达式)、zlib库(用于支持HTTP压缩)和OpenSSL库(用于支持SSL加密)。可以通过包管理器来安装这些依赖项,例如在Centos上可以使用yum命令:

yum install -y gcc-c++
yum install -y gcc automake autoconf libtool make
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

配置configure

./configure --prefix=/usr/local/nginx --with-pcre --with-zlib --with-openssl

编译make安装

make && make install

1.2 第三方模块编译

先下载好第三方源码,解压,重新配置nginx,编译

./configure --prefix=/usr/local/nginx --add-module=/path/to/module

二、配置文件

2.1 配置语法

一个 Nginx 配置文件的结构就像 nginx.conf 显示的那样,配置文件的语法规则如下:

  1. 配置文件由指令与指令块构成
  2. 每条指令以 ; 分号结尾,指令与参数间以空格符号分隔
  3. 指令块以 {} 大括号将多条指令组织在一起
  4. include 语句允许组合多个配置文件以提升可维护性
  5. 使用 # 符号添加注释,提高可读性
  6. 使用 $ 符号使用变量
  7. 部分指令如 location 的参数支持正则表达式

所有指令文档查询:https://nginx.org/en/docs/dirindex.html

2.2 location语法

官方文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#location

location 后面可以跟下面几种符号,再跟前缀字符串或正则表达式

  1. = 精确匹配路径,后面跟不含正则表达式的 uri ,如果匹配成功,不再进行后续的查找
  2. ~ 正则匹配路径,后面跟正则,区分大小写
  3. ~* 正则匹配路径,后面跟正则,不区分大小写
  4. ^~ 前缀匹配 uri,后面跟前缀字符串,这是默认匹配项

location 配置优先级文档:https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#location_priority

  1. 对所有前缀字符串测试URI
  2. = 定义了 URI 和前缀字符串的精确匹配。如果找到了精确的匹配项,则搜索将停止
  3. 如果 ^~ 放在最长匹配前缀字符串的前面,则不检查正则表达式
  4. 存储最长的匹配前缀字符串
  5. 对正则表达式测试 URI
  6. 当找到第一个匹配的正则表达式时,将停止处理,并使用对应的 location
  7. 如果没有正则表达式匹配,使用之前存储的前缀字符串对应的 location

示例

server {listen       8081;server_name  localhost;location  /i/ {root html;}location /i/js {root html/js;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}   
}

访问http://localhost:8081/i/js/js.html, 前缀匹配最长的,对应 windows 文件夹路径 html\js\i\js\js.html

2.3 配置文件块

配置文件包含以下几块:

  1. 全局块

    • 配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

      指令名语法默认值说明
      daemondaemon on | off;daemon on;是否成为一个守护进程
      debug_pointsdebug_points abort | stop;用于debug, 当检测到内部错误时,核心文件的创建中止(abort )或停止进程(stop)
      envenv variable[=value];env TZ;环境变量
      error_logerror_log file [level];error_log logs/error.log error;配置日志
      lock_filelock_file filelock_file logs/nginx.lock;锁文件位置
      master_processmaster_process on | off;master_process on;确定是否已启动工作进程。本指令适用于nginx开发人员
      pcre_jitpcre_jit on | off;pcre_jit off;1.1.12新增,启用或禁用对配置解析时已知的正则表达式使用“即时编译”
      pidpid file;pid logs/nginx.pid;pid 文件位置
      ssl_enginessl_engine device;定义硬件SSL加速器的名称
      thread_poolthread_pool name threads=number [max_queue=number];thread_pool default threads=32 max_queue=65536;1.7.11新增,定义线程池的名称和参数,用于多线程读取和发送文件,而不阻塞工作进程。
      timer_resolutiontimer_resolution interval;降低工作进程中的计时器频率,从而减少每天进行系统调用的次数。
      useruser user [group];user nobody nobody;定义工作进程使用的用户和组。
      worker_cpu_affinityworker_cpu_affinity cpumask …;
      worker_cpu_affinity auto [cpumask];
      将工作进程绑定到cpu中,1.9.10新增auto,可自动绑定。指令只在FreeBSD和 Linux可用
      worker_priorityworker_priority number;worker_priority 0;定义工作进程的调度优先级,负数意味着更高的优先级。允许的范围通常从-20到20
      worker_processesworker_processes number | auto;worker_processes 1;定义工作进程的数量,auto从1.3.8和 1.2.5开始支持
      worker_rlimit_coreworker_rlimit_core size;更改工作进程的核心文件(RLIMIT_CORE)的限制。用于增加限制,而不重新启动主进程。
      worker_rlimit_nofileworker_rlimit_nofile number;更改对工作进程的最大打开文件数量(RLIMIT_NOFILE)的限制。用于增加限制,而不重新启动主进程。
      worker_shutdown_timeoutworker_shutdown_timeout time;1.11.11新增,为工作进程的正常关闭配置了一个超时时间。当时间到期时,nginx将尝试关闭当前打开的所有连接,以方便关闭,
      working_directoryworking_directory directory;定义工作进程的当前工作目录。它主要用于写入核心文件时,在这种情况下,工作进程应该具有对指定目录的写权限
  2. events块

    • 配置影响nginx服务器或与用户的网络连接。有是否允许同时接受多个网路连接,选取哪种事件驱动模型处理连接请求,,每个进程的最大连接数,开启多个网络连接序列化等

    • 常用指令

      指令名语法默认值说明
      multi_acceptmulti_accept on | off;multi_accept off;如果为off,则一个工作进程将一次接受一个新的连接。否则一次接受所有新的连接。
      useuse method;指定要使用的连接处理方法。通常不需要显式地指定它,因为nginx将默认使用最有效的方法。
      worker_aio_requestsworker_aio_requests number;worker_aio_requests 32;当使用aio和epoll 时,为单个工作进程设置未完成的异步I/O操作的最大数量。
      worker_connectionsworker_connections number;worker_connections 512;设置工作进程可以打开的最大同时连接数。不能超过当前对最大打开文件数量的限制.
  3. http块

    • 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

    • 文档:https://nginx.org/en/docs/http/ngx_http_core_module.html

    • 常用指令

      指令名文档地址默认值说明
      default_typedefulat_typedefault_type text/plain;默认相应类型
      error_pageerror_page定义将为指定的错误显示的URI。uri值可以包含一些变量。
      includeinclude在配置中包含另一个文件,或与指定的掩码相匹配的文件
  4. server块

    • 配置虚拟主机的相关参数,一个http中可以有多个server。

    • 常用指令

      指令名文档地址默认值说明
      listenlistenlisten *:80 | *:8000;监听端口
      locationlocation设置uri匹配
      server_nameserver_nameserver_name “”;设置虚拟服务器的名称
  5. location块

    • 配置请求的路由,以及各种页面的处理情况。

    • 文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#location

    • 常用指令

      指令名语法默认值说明
      aliasalias path;
      error_pageerror_page code … [=[response]] uri;
      proxy_passproxy_pass URL;设置代理服务器的协议和地址,以及位置应该映射到的可选URI
      rootroot path;root html;
      try_filestry_files fileuri; try_files file … =code;检查按指定顺序排列的文件是否存在,并使用第一个找到的文件进行请求处理

2.4 全局变量

官方文档:https://nginx.org/en/docs/http/ngx_http_core_module.html#variables

下面是一些常用的全局变量:

全局变量名功能
$args请求中的参数
$body_bytes_sent客户端发送的字节数
$content_length请求头中的 Content-length 字段
$host请求头中的 Host,如果请求中没有 Host 行,则等于设置的服务器名,不包含端口
$http_cookie客户端cookie信息
$http_referer对应请求头的referer
$http_user_agent客户端agent信息
$http_x_forwarded_for请求头的x-forwarded-for
$request请求的URL与HTTP协议(如GET /index HTTP/1.0
$request_method客户端请求类型(如 GETPOST
$remote_addr客户端的 IP 地址
$remote_user客户端用户的名称
$remote_port客户端的端口
$server_protocol请求使用的协议(如 HTTP/1.0HTTP/1.1
$server_addr服务器地址
$server_name服务器名称
$server_port服务器的端口号
$schemeHTTP 方法(如http, https)
$statusHTTP响应代码(如 200, 404)
$uri请求 uri

三、HTTP 服务器

3.1 基本

默认配置

# 可以使用的 worker 进程数
worker_processes  1;# 全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;events {# 单个进程最大连接数(最大连接数=连接数*进程数)worker_connections  1024;# 事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]# Linux 2.6以上版本内核中的高性能网络I/O模型,linux建议epoll,如果跑在FreeBSD上面,就用kqueue模型。# use epoll;
}http {include       mime.types;# 默认文件类型, 未指定默认 text/plain; 当文件类型未定义时使用这种方式default_type  application/octet-stream;# 零拷贝,开启文件高效传输模式sendfile        on;# 连接超时时间keepalive_timeout  65;# 编码# charset utf-8;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;}
}

3.2 反向代理

官方文档:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

关于正向代理与反向代理

  • 客户端通过代理访问服务器,就是正向代理
  • 服务器通过代理与客户端保持连接,就是反向代理

两者区别就是正向代理,客户端是知道的,而反向代理,客户端是感知不到的

server {listen       80;location /api2/ {proxy_pass http://localhost:8080/;}location /api3/ {proxy_pass http://localhost:8081/;}location / {proxy_pass http://localhost:8082/;}
}

当访问http://localhost/api2/index.html时,反向代理访问 http://localhost:8080/index.html,注意8080后面的/,如果不加,那就访问http://localhost:8080/api2/index.html

3.3 压缩

开启压缩能够将传输的数据的大小减少一半甚至更多,减少带宽消耗

官方文档:http://nginx.org/en/docs/http/ngx_http_gzip_module.html

http{# 开启压缩gzip on;# 除 text/html 外,还可以指定被压缩的文件类型gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;# 设置压缩级别,越高资源消耗越大,但压缩效果越好,范围从1到9,默认为1gzip_comp_level 5;# 在头部中添加Vary: Accept-Encoding(建议开启)gzip_vary on;# 处理压缩请求的缓冲区数量和大小,默认值 32 4k|16 8k;具体取决于平台gzip_buffers 16 8k;# 对于不支持压缩功能的客户端请求不开启压缩机制gzip_disable "MSIE [1-6]\."; # 低版本的IE浏览器不支持压缩# 设置压缩响应所支持的HTTP最低版本,默认1.1gzip_http_version 1.1;# 设置触发压缩的最小阈值,默认20, 长度从Content-Length获取gzip_min_length 2k;# 关闭对后端服务器的响应结果进行压缩gzip_proxied off;
}

nginx_gzip

3.4 负载均衡

官方文档:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

  • upstream: https://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
  • server: https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

负载均衡类型:

  • 默认为 Round Robin,轮询,请求均匀分布在服务器之间,并考虑服务器权重
  • least_conn, 将请求传递到活动连接数最少的服务器,并考虑到服务器的权重
  • ip_hash,请求基于客户端IP地址在服务器之间分发
  • hash,请求基于给定的key hash
  • random,请求会传递到随机选择的服务器,并考虑到服务器的权重
upstream backend{#  least_conn;#  ip_hash;#  hash $request_uri consistent;#  random two least_time=last_byte;server localhost:8080 weight=3 max_fails=2 fail_timeout=30s; server localhost:8081 weight=1 max_fails=2 fail_timeout=30s;server localhost:8082 backup;
}server {listen 80;location / {proxy_pass http://backend;}
}

3.5 HTTPS 支持

需要生成ssl证书

server {listen  443 ssl;server_name  localhost;ssl_certificate      /usr/local/nginx/ssl/demo.crt;ssl_certificate_key  /usr/local/nginx/ssl/demo.key;location / {root   html;index  index.html index.htm;}
}

3.6 UrlRewrite

可以通过rewrite url实现页面跳转,参数隐藏等功能

文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

  • 参数隐藏

    location / {# 将类似 1.html 替换为 index?page=1 rewrite ^/([0-9]+).html$ /index?page=$1 break;proxy_pass http://localhost:8081;
    }
    
  • 旧域名跳转到新域名

    server {listen 80;server_name www.a.com;location = / {if ($host = "www.a.com") {rewrite ^/(.*)$ http://www.b.com/$1 permanent;}}
    }
    

3.7 防盗链配置

valid_referers 相关文档:http://nginx.org/en/docs/http/ngx_http_referer_module.html

location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {valid_referers none blocked server_names ~\.google\. ~\.baidu\. *.qq.com; if ($invalid_referer){return 403;}
}

3.8 跨域

以下是两种方案:

  1. 反向代理

    proxy_cookie_domain文档:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain

    location ^~/apis/ {rewrite ^/apis/(.*)$ /$1 break;proxy_pass a.demo.com;# 两个域名之间cookie的传递与回写proxy_cookie_domain a.demo.com b.demo.com;
    }
    
  2. Header头添加

    server {listen       80;server_name  localhost;add_header 'Access-Control-Allow-Origin' $http_origin;   # 全局变量获得当前请求origin,带cookie的请求不支持*add_header 'Access-Control-Allow-Credentials' 'true';    # 为 true 可带上 cookieadd_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';  # 允许请求方法add_header 'Access-Control-Allow-Headers' $http_access_control_request_headers;  # 允许请求的 header,可以为 *add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';if ($request_method = 'OPTIONS') {add_header 'Access-Control-Max-Age' 1728000;   # OPTIONS 请求的有效期,在有效期内不用发出另一条预检请求add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;return 204;                  # 200 也可以}location / {root  html;index index.html;}
    }
    

3.9 静态服务

文档:http://nginx.org/en/docs/http/ngx_http_autoindex_module.html

server {listen       80;server_name  localhost;charset utf-8;   location /download {alias	          html/static;  # 静态资源目录autoindex               on;    # 开启静态资源列目录autoindex_exact_size    off;   # on(默认)显示文件的确切大小,单位是byte;off显示文件大概大小,单位KB、MB、GBautoindex_localtime     off;   # off(默认)时显示的文件时间为GMT时间;on显示的文件时间为服务器时间}
}

3.10 PC/手机端分离

通过user agent 控制访问不同网页

server {listen 80;server_name localhost;location / {root  html/pc;if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {root html/mobile;}index index.html;}
}

3.11 黑白名单

控制访问:https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-tcp/

指令是从上到下依次执行的:如果指令序列中的第一个指令拒绝了所有,那么所有下一步允许的指令都没有效果

location / {# 允许访问allow 192.168.0.2;# 禁止访问deny all;
}

3.12 静态文件缓存

expires文档:http://nginx.org/en/docs/http/ngx_http_headers_module.html#expires

location ~ .*\.(css|js|jpg|png|gif|swf|woff|woff2|eot|svg|ttf|otf|mp3|m4a|aac|txt)$ {expires 10d;
}

参考

  1. Nginx 从入门到实践,万字详解!
  2. (三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化…想要的这都有!
  3. nginx七大核心应用场景详解 解决生产中的实际问题 二次开发扩展
  4. https://docs.nginx.com/search.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/115872.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法--排序算法复习

目录 1.三种常见的简单排序: 1.1冒泡排序 1.2 选择排序 1.3 插⼊排序 2 常见高级排序算法 2.1 希尔排序 2.2 快速排序 2.3 归并排序 2.4计数排序 先上结论: 1.三种常见的简单排序: 1.1冒泡排序 1.⾸先在未排序数组的⾸位开始&#…

从统计语言模型到预训练语言模型---预训练语言模型(BERT,GPT,BART系列)

基于 Transformer 架构以及 Attention 机制,一系列预训练语言模型被不断提出。 ​BERT 2018 年 10 月, Google AI 研究院的 Jacob Devlin 等人提出了 BERT (Bidirectional Encoder Representation from Transformers ) 。具体的研究论文发布在 arXiv …

Guava Cache介绍-面试用

一、Guava Cache简介 1、简介 Guava Cache是本地缓存,数据读写都在一个进程内,相对于分布式缓存redis,不需要网络传输的过程,访问速度很快,同时也受到 JVM 内存的制约,无法在数据量较多的场景下使用。 基…

如何用好免费的ChatGPT

如何用好免费的ChatGPT 前言ChatGPT使用入口在线体验地址:点我体验 ChatGPT介绍ChatGPT初级使用技巧初级使用技巧:清晰明了的问题表达 ChatGPT中级使用语法中级使用语法:具体化问题并提供背景信息 ChatGPT高级使用高级使用:追问、…

出现 conda虚拟环境默认放在C盘 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法3.1 方法一3.2 方法二1. 问题所示 通过conda配置虚拟环境的时候,由于安装在D盘下,但是配置的环境默认都给我放C盘 通过如下命令:conda env list,最后查看该环境的确在C盘下 2. 原理分析 究其根本原因,这是因为默认路径没有足够的…

MySQL常见面试题(一)

😀前言 在数据库管理系统中,存储引擎起着核心的角色,它决定了数据管理和存储的方式。MySQL作为一个领先的开源关系型数据库管理系统,提供了多种存储引擎来满足不同的需求和优化不同的应用。除了选择合适的存储引擎,数据…

差值结构的顺序偏好

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,AB训练集各由5张二值化的图片组成,让A 中有5个点,B中有1个点,且不重合,统计迭代次数并排序。 第一种情况 差值结构 迭代次数 L E - - 2 10491.…

想搭建数字藏品平台怎么做?

搭建数字藏品平台涉及多个步骤和技术方面的考虑。以下是创建数字藏品平台的一般步骤: 技术架构 选择合适的技术架构和平台。您可以选择使用现有的电子商务平台、自定义开发、或使用数字藏品管理系统等。云托管服务如Amazon Web Services 或Microsoft Azure也可以提…

科学数据分析和图形绘制软件GraphPad Prism 9 mac中文版特点介绍

Prism 9 mac是一款专业的科学数据分析和图形绘制软件,可用于在生物、医学、化学等领域进行数据分析、绘制图形、进行统计分析等。 Prism 9 mac软件特点 1. 多种数据分析功能:Prism 9提供了多种常见的数据分析工具,包括线性回归、ANOVA、t检验…

gym_unity学习笔记

最近学了一段时间gym_unity,把一些资料留在这里 实例 实例gym_unity训练RollerBall:https://blog.csdn.net/alibutter/article/details/120908687实例gyn_unity训练3DBall:https://zhuanlan.zhihu.com/p/554927641?utm_id0 源码&#xff1…

MySQL数据库详解 二:数据库的高级语言和操作

文章目录 1. 克隆表 ---- 将数据表的数据记录生成到新的表中1.1 方式一:先创建新表,再导入数据1.2方式二:创建的时候同时导入 2. 清空表 ---- 删除表内的所有数据2.1 delete删除2.2 truncate删除(重新记录)2.3 创建临时…

PowerShell切换多个java版本

安装jdk1.8 和 jdk17 下载jdk 前往 oracle官网下载 配置环境变量 变量名 CLASSPATH变量值 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar效果图: 变量名(jdk1.8同理) JAVA_HOME17变量值 C:\Program Files\Java\jdk-17效果图&#xff1…