wordpress外贸建站教程/怎么优化网站
一、反向代理
1.前端服务器配置
前端服务器:用于接收和响应客户端,代理另一台主机
Nginx 安装
(1).下载安装nginx
[root@web ~]# wget https://nginx.org/download/nginx-1.26.1.tar.gz
(2).解压
[root@web ~ ]# tar -zxvf nginx-1.26.1.tar.gz
(3).编译安装 nginx
(1)安装 pcre
⾸先安装 pcre。此软件是为了⽀持 rewrite(重写、复写)功能⽽存在的。rewrite 是实现 url 重定向的重要命令,它会根据正则表达式来匹配内容,从⽽跳转到⽬标上⾯去。
[root@web ~]# yum -y install pcre-devel
(2)安装 OpenSSL
当没有使⽤ ssl 证书对服务器数据进⾏加密认证时,⽤户的数据将会以明⽂的形式进⾏传输,⽽此时,⽤户的数据可以被⼀些抓包⼯具获取,就容易造成⽤户的信息泄露。
所以为了改善这种情况,作为运维⼈员需要去为⽹站配置 ssl 证书,实现 https 协议的访问
[root@web ~]# yum -y install openssl-devel
(3)在安装之前还要安装⽤来编译的⼯具
gcc、gcc-c++、make;lrzsz 是⽤来从 Windows 上直接将⽂件导⼊到 Linux 内的⼯具。
[root@web ~]# yum -y install gcc gcc-c++ make
(4)编译安装 nginx
如果之前在系统上有 yum 安装的 nginx,那么在编译安装之前 需要先卸载掉原来的 nginx。
卸载nginx:yum -y remove nginx
(5)进行编译
[root@web ~]# ls nginx-1.26.1 nginx-1.26.1.tar.gz
cd到安装包⽬录下
[root@web ~]# cd nginx-1.26.1/
[root@web nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
命令分步解释:
[root@web nginx-1.26.1]# make && make install
[root@web nginx-1.26.1]# useradd -s /bin/nologin -M nginx
(6)检查目录
[root@web nginx-1.26.1]# tree /usr/local/nginx
[root@web nginx-1.26.1]# cd /usr/local/nginx/
[root@web nginx]# ls
conf html logs sbin
(7)备份目录
[root@web nginx]# cp -r conf/ conf.bak
[root@web nginx]# ./sbin/nginx
(8)开放端口或者服务
[root@web nginx]# firewall-cmd --zone=public --add-port=80/tcp --permanent success [root@web nginx]# firewall-cmd --reload success
[root@web nginx]# vim /usr/local/nginx/conf/nginx.conf
(9)创建符号链接(软链接)
[root@web nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/bin/
[root@web nginx]# ls -l
/usr/bin/nginxlrwxrwxrwx. 1 root root 27 7月 29 16:16 /usr/bin/nginx -> /usr/local/nginx/sbin/nginx
[root@web nginx]# nginx
[root@web nginx]# nginx -s stop
[root@web nginx]# netstat -lnput|grep nginx
[root@web nginx]# nginx
[root@web nginx]# netstat -lnput|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17228/nginx: master
(10)启动和关闭nginx服务
./nginx ./nginx -s reload
修改了配置文件后,重载nginx服务网
./nginx -s reload
(11)脚本启动nginx服务:
[root@web nginx]# vim ~/nginx.sh
[root@web nginx]# bash ~/nginx.sh
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17228/nginx: master
nginx正在执行,或者是80端口被占用
[root@web nginx]# nginx -s stop
[root@web nginx]# bash ~/nginx.sh
12)以systemctl控制nginx
[root@web nginx]# vim /usr/lib/systemd/system/nginx.service
如果直接使用sbin目录下的nginx,就无法使用systemctl
这两套命令只能用一套
(1)[root@web nginx]# systemctl daemon-reload
[root@web nginx]# systemctl stop nginx
(2)[root@web nginx]# nginx -s reload [root@web nginx]# nginx -s stop
(13)添加监控块
[root@web nginx]# vim /usr/local/nginx/conf/nginx.conf
[root@web nginx]# systemctl restart nginx
2.后端服务器
[root@web ~]# wget https://nginx.org/download/nginx-1.26.1.tar.gz
[root@web ~ ]# tar -zxvf nginx-1.26.1.tar.gz
[root@web ~]# yum -y install gcc gcc-c++
[root@web ~]# yum -y install openssl-devel pcre-devel make
[root@web ~]# lsnginx-1.26.1 nginx-1.26.1.tar.gz
[root@web ~]# cd nginx-1.26.1/
[root@web nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
[root@web nginx-1.26.1]# make && make install
[root@web nginx-1.26.1]# useradd -s /bin/nologin -M nginx
[root@nginx nginx-1.26.1]# echo "我是后端服务" > /usr/local/nginx/html/index.html
[root@nginx nginx-1.26.1]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success [root@nginx nginx-1.26.1]# firewall-cmd --reload
success
修改配置文件
[root@nginx nginx-1.26.1]# vim /usr/local/nginx/conf/nginx.conf
将其修改为utf-8(防止出现乱码)
[root@nginx nginx-1.26.1]# /usr/local/nginx/sbin/nginx
[root@nginx nginx-1.26.1]# /usr/local/nginx/sbin/nginx -s reload
浏览器访问:192.168.2.27
[root@nginx ~]# echo "this is java web server" > /usr/local/nginx/html/index.html
[root@nginx ~]# #启动nginx
[root@nginx ~]# /usr/local/nginx/sbin/nginx
[root@nginx ~]# #使用curl访问当前项目
[root@nginx ~]# curl localhost
this is java web server
3.前端服务器配置
[root@web ~]# echo "this is static server" > /usr/local/nginx/html/index.html
[root@web ~]# #启动nginx服务
[root@web ~]# /usr/local/nginx/sbin/nginx
[root@web ~]# ps -aux|grep nginx
[root@web ~]# curl localhost
this is static server
[root@web ~]# curl 192.168.2.25
this is static server
使用25代理27主机,当用户访问25的时候,25不响应,27主机响应
使用25主机nginx反向代理27的服务器
[root@web ~]# #location proxy_pass 协议 域名 端口
修改配置文件 /usr/local/nginx/conf/nginx.conf
[root@web ~]# vim /usr/local/nginx/conf/nginx.conf
[root@web ~]# /usr/local/nginx/sbin/nginx -s reload
浏览器访问IP:192168.2.25,访问到的内容是后端服务器的
现在的静态服务器实际上是代理服务器,nginx代理其他服务的时候,不需要对方同意
二、设置黑名单、白名单
1.安装配置nginx环境
2.修改一下index.html中的内容
[root@nginx-1 nginx-1.26.1]# echo "you are luckly" > /usr/local/nginx/html/index.html [root@nginx-1 nginx-1.26.1]# curl localhost
you are luckly
3.修改配置文件 此台服务器IP:192.168.2.28
前端服务器IP:192.168.2.25
后端服务器IP:192.1682.27
设置除开27(后端服务器)可以访问,其他主机都不可以访问 在配置文件中的server模块中设置,allow为允许,deny为禁止,可以对IP生效,也可以对网段生效
[root@nginx-1 nginx-1.26.1]# vim /usr/local/nginx/conf/nginx.conf
4.重启服务
[root@nginx-1 nginx-1.26.1]# /usr/local/nginx/sbin/nginx -s reload
5.测试
分别在前端服务器(25)、后端服务器(27)进行测试:
前端服务器(25):
[root@web ~]# curl 192.168.2.28
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>
后端服务器(27):
[root@nginx ~]# curl 192.168.2.28
you are luckly
6.说明:
[root@web ~]# curl 192.168.2.28
curl: (7) Failed connect to 192.168.2.28:80; 没有到主机的路由如果出现这种情况,查看是否能ping通外网,是否能ping通192.168.2.28这台主机,最后检查防火墙有没有关
三、负载均衡
1.负载均衡状态
2.环境准备
让每一台主机能够获得相应的压力
轮询:依次的将任务部署给不同的主机
1.准备四台机器:
编号 | 主机名 | IP地址 |
---|---|---|
1 | static-server | 192.168.2.25 |
2 | 001 | 192.168.2.27 |
3 | 002 | 192.168.2.28 |
4 | 003 | 192.168.2.29 |
2.都配置nginx环境
wget https://nginx.org/download/nginx-1.26.1.tar.gz
tar -zxvf nginx-1.26.1.tar.gz yum -y install pcre-devel
yum -y install openssl-devel yum -y install gcc gcc-c++ make
cd nginx-1.26.1/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
make && make install
useradd -s /bin/nologin -M nginx
3.写测试页面:
[root@static-server ~]# echo "I am static server" > /usr/local/nginx/html/index.html
[root@001 ~]# echo "I am 001 server" > /usr/local/nginx/html/index.html
[root@002 ~]# echo "I am 002 server" > /usr/local/nginx/html/index.html
[root@003 ~]# echo "I am 003 server" > /usr/local/nginx/html/index.html
4.启动服务(static-server、001、002、003):
/usr/local/nginx/sbin/nginx
3.负载均衡策略
(1)配置代理和轮询
[root@static-server ~]# vim /usr/local/nginx/conf/nginx.conf
轮询:
代理:
[root@static-server ~]# /usr/local/nginx/sbin/nginx -s reload
浏览器访问static-server的IP:192.168.2.25
static-server会代理001、002、003这三台机器,刷新浏览器会出现轮询
(2)weight加权
权重默认为1,谁权重大,谁优先处理请求
[root@static-server ~]# vim /usr/local/nginx/conf/nginx.conf
[root@static-server ~]# /usr/local/nginx/sbin/nginx -s reload
浏览器访问IP:192.168.2.25
001出现的次数最多,003出现的次数最少
(3)ip_hash
当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。
这样,当来自某一个IP的用户在后端Web服务器A上登录后,再访问该站点的其他URL,能保证其访问的还是后端web服务器A。
注意: 使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接受的请求少,而且设置后端服务器权重等方法将不起作用
[root@static-server ~]# vim /usr/local/nginx/conf/nginx.conf
[root@static-server ~]# /usr/local/nginx/sbin/nginx -s reload
浏览器访问IP:192.168.2.25
第一次访问到001的测试页面,之后刷新浏览器一直是001的测试页面,不会变。
(4)least_conn
least_conn:最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均地转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,leastconn这种方式就可以达到更好的负载均衡效果。
(5)url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用ur_hash,可以使得同一个url (也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以从 缓存中读取。
四、平滑升级
不停用业务,使用平滑升级
需要有kill命令的支持
kill不仅仅用于杀死进程,还可以向软件进程发送信号
常用的-9和-15一个是强杀,一个是正常杀
格式:kill 信号 进程信号
-USR2 平滑启动一个进程,平滑升级
-WINCH 优雅关闭子进程
-QUIT 优雅关闭主进程
步骤:
1.不停止原有服务,但是必须使用原生方式启动或者更改nginx脚本(会创建一个新的进程)
2.重新编译nginx新版本
3.使用kill -USR@启动新版本
4.把旧的nginx子进程全部退出
5.优雅的退出nginx的老进程,系统里就只剩下新的nginx了
实施步骤:
1.查看nginx当前版本
#查看nginx当版本[root@static-server ~]# /usr/local/nginx/sbin/nginx -vnginx version: nginx/1.26.1
2.上传新的新nginx版本并解压
平滑升级到1.27
服务持续期间对nginx进行升级
# 上传新的新nginx版本并解压(1.27版本)[root@static-server ~]# wget https://nginx.org/download/nginx-1.27.0.tar.gz[root@static-server ~]#tar -zxvf nginx-1.27.0.tar.gz
3.对新版本进行编译安装,安装目录必须和旧版本一致
# 对新版本进行编译安装,安装目录必须和旧版本一致[root@static-server ~]#cd nginx-1.27.0/[root@static-server ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream[root@static-server ~]#make && make install
4.对新版本进行编译安装,安装目录必须和旧版本一致
# 重装新的版本以后,会出现新的启动工具[root@static-server nginx-1.27.0]# ls /usr/local/nginx/sbinnginx nginx.old
5.查看nginx的新旧版本
#查看nginx的新旧版本
[root@static-server nginx-1.27.0]# /usr/local/nginx/sbin/nginx -vnginx version: nginx/1.27.0[root@static-server nginx-1.27.0]#/usr/local/nginx/sbin/nginx.old -vnginx version: nginx/1.26.1
6.查看进程
[root@static-server nginx-1.27.0]# ps -aux|grep nginx
# 升级过程中保持服务不中断[root@static-server nginx-1.27.0]# ps -aux|grep nginx
root 4432 0.0 0.2 46172 2036 ? Ss 10:17 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 4762 0.0 0.2 46600 2176 ? S 16:09 0:00 nginx: worker process
root 7749 0.0 0.0 112808 680 pts/1 R+ 16:34 0:00 grep --color=auto nginx
7.使用老的nginx进程创建新的进程
# 使用老的nginx进程创建新的进程# 格式:kill -USR2 老版本的pid编号[root@static-server nginx-1.27.0]# kill -USR2 4432
[root@static-server nginx-1.27.0]# ps -aux|grep nginx
root 4432 0.0 0.2 46172 2036 ? Ss 10:17 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 4762 0.0 0.2 46600 2176 ? S 16:09 0:00 nginx: worker process
root 7751 0.0 0.3 46128 3344 ? S 16:37 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 7752 0.0 0.1 46584 1912 ? S 16:37 0:00 nginx: worker process
root 7754 0.0 0.0 112824 980 pts/1 R+ 16:37 0:00 grep --color=auto nginx
[root@static-server nginx-1.27.0]# ps -aux|grep nginx
root 4432 0.0 0.2 46172 2036 ? Ss 10:17 0:00 nginx: master p
nginx 4762 0.0 0.2 46600 2176 ? S 16:09 0:00 nginx: worker p
root 7751 0.0 0.3 46128 3344 ? S 16:37 0:00 nginx: master p
nginx 7752 0.0 0.1 46584 1912 ? S 16:37 0:00 nginx: worker p
root 7756 0.0 0.0 112824 980 pts/1 R+ 16:39 0:00 grep --color=au
8.关闭老版本的所有子进程和老版本的主进程
# 此时会出现两套master进程,这个时候处理客户请求的就是新nginx服务了# 关闭老版本的所有子进程# 关闭老版本的主进程[root@static-server nginx-1.27.0]# kill -WINCH 4762
[root@static-server nginx-1.27.0]# ps -aux|grep nginx
root 4432 0.0 0.2 46172 2036 ? Ss 10:17 0:00 nginx: master process /usr/local/nginx/sbin/nginx
root 7751 0.0 0.3 46128 3344 ? S 16:37 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 7752 0.0 0.1 46584 1912 ? S 16:37 0:00 nginx: worker process
nginx 7758 0.0 0.1 46600 1928 ? S 16:40 0:00 nginx: worker process
root 7760 0.0 0.0 112824 976 pts/1 R+ 16:40 0:00 grep --color=auto nginx
[root@static-server nginx-1.27.0]# kill -QUIT 4432
[root@static-server nginx-1.27.0]# ps -aux|grep nginx
root 7751 0.0 0.3 46128 3344 ? S 16:37 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx 7752 0.0 0.1 46584 1912 ? S 16:37 0:00 nginx: worker process
root 7762 0.0 0.0 112808 680 pts/1 R+ 16:41 0:00 grep --color=auto nginx
9.使用curl查看当前服务器的版本
# 使用curl查看当前服务器的版本[root@static-server nginx-1.27.0]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.27.0
Date: Tue, 30 Jul 2024 08:42:08 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 16
Connection: keep-alive
Last-Modified: Tue, 30 Jul 2024 07:02:18 GMT
ETag: "66a88ffa-10"
Accept-Ranges: bytes
五、配置jdk环境
配置tomcat 10运行环境 tomcat9 可以在jdk8的环境运行
tomcat10必须在jdk17以上的版本运行
tomcat-22版本下载网址:https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz
步骤:
#下载jdk包
[root@static-server ~]# wget https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz
--2024-07-30 17:28:10-- https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz
正在解析主机 download.oracle.com (download.oracle.com)... 184.28.252.147
正在连接 download.oracle.com (download.oracle.com)|184.28.252.147|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:195275103 (186M) [application/x-gzip]
正在保存至: “jdk-22_linux-x64_bin.tar.gz”100%[======================================>] 195,275,103 1.28MB/s 用时 5m 43s 2024-07-30 17:33:57 (556 KB/s) - 已保存 “jdk-22_linux-x64_bin.tar.gz” [195275103/195275103])[root@static-server ~]# ls
anaconda-ks.cfg nginx-1.26.1 nginx-1.27.0 nginx.sh
jdk-22_linux-x64_bin.tar.gz nginx-1.26.1.tar.gz nginx-1.27.0.tar.gz#解压jdk压缩包
[root@static-server ~]# tar -xf jdk-22_linux-x64_bin.tar.gz
[root@static-server ~]# ls
anaconda-ks.cfg nginx-1.26.1 nginx-1.27.0.tar.gz
jdk-22.0.2 nginx-1.26.1.tar.gz nginx.sh
jdk-22_linux-x64_bin.tar.gz nginx-1.27.0#进入到jdk-22.0.2/目录下
[root@static-server ~]# cd jdk-22.0.2/
[root@static-server jdk-22.0.2]# ls
bin conf include jmods legal lib LICENSE man README release#进入到bin目录下看是否能运行java
[root@static-server jdk-22.0.2]# cd bin
[root@static-server bin]# ./java
用法:java [options] <mainclass> [args...](执行类)或 java [options] -jar <jarfile> [args...](执行 jar 文件)或 java [options] -m <module>[/<mainclass>] [args...]java [options] --module <module>[/<mainclass>] [args...](执行模块中的主类)或 java [options] <sourcefile> [args](执行源文件程序)将主类、源文件、-jar <jarfile>、-m 或--module <module>/<mainclass> 后的参数作为参数传递到主类。其中,选项包括:-cp <目录和 zip/jar 文件的类搜索路径>-classpath <目录和 zip/jar 文件的类搜索路径>--class-path <目录和 zip/jar 文件的类搜索路径>使用 : 分隔的, 用于搜索类文件的目录, JAR 档案和 ZIP 档案列表。-p <模块路径>--module-path <模块路径>...: 分隔的元素列表,每个元素都是模块或包含模块的目录的文件路径。每个模块都是模块化 JAR 或展开的模块目录。--upgrade-module-path <模块路径>...: 分隔的元素列表,每个元素都是模块或包含模块(用于替换运行时映像中的可升级模块)的目录的文件路径。每个模块都是模块化 JAR 或展开的模块目录。--add-modules <模块名称>[,<模块名称>...]除了初始模块之外要解析的根模块。<模块名称> 还可以为 ALL-DEFAULT, ALL-SYSTEM,ALL-MODULE-PATH.--enable-native-access <module name>[,<module name>...]允许模块中的代码访问 Java 运行时之外的代码和数据。<module name> 也可以是 ALL-UNNAMED,以指示类路径上的代码。--list-modules列出可观察模块并退出-d <module name>--describe-module <模块名称>描述模块并退出--dry-run 创建 VM 并加载主类, 但不执行 main 方法。此 --dry-run 选项对于验证诸如模块系统配置这样的命令行选项可能非常有用。--validate-modules验证所有模块并退出--validate-modules 选项对于查找模块路径中模块的冲突及其他错误可能非常有用。-D<名称>=<值>设置系统属性-verbose:[class|module|gc|jni]为给定子系统启用详细输出-version 将产品版本输出到错误流并退出--version 将产品版本输出到输出流并退出-showversion 将产品版本输出到错误流并继续--show-version将产品版本输出到输出流并继续--show-module-resolution在启动过程中显示模块解析输出-? -h -help将此帮助消息输出到错误流--help 将此帮助消息输出到输出流-X 将额外选项的帮助输出到错误流--help-extra 将额外选项的帮助输出到输出流-ea[:<程序包名称>...|:<类名>]-enableassertions[:<程序包名称>...|:<类名>]按指定的粒度启用断言-da[:<程序包名称>...|:<类名>]-disableassertions[:<程序包名称>...|:<类名>]按指定的粒度禁用断言-esa | -enablesystemassertions启用系统断言-dsa | -disablesystemassertions禁用系统断言-agentlib:<库名>[=<选项>]加载本机代理库 <库名>, 例如 -agentlib:jdwp另请参阅 -agentlib:jdwp=help-agentpath:<路径名>[=<选项>]按完整路径名加载本机代理库-javaagent:<jar 路径>[=<选项>]加载 Java 编程语言代理, 请参阅 java.lang.instrument-splash:<图像路径>使用指定的图像显示启动屏幕自动支持和使用 HiDPI 缩放图像(如果可用)。应始终将未缩放的图像文件名 (例如, image.ext)作为参数传递给 -splash 选项。将自动选取提供的最合适的缩放图像。有关详细信息, 请参阅 SplashScreen API 文档@argument 文件一个或多个包含选项的参数文件--disable-@files阻止进一步扩展参数文件--enable-preview允许类依赖于此发行版的预览功能
要为长选项指定参数, 可以使用 --<名称>=<值> 或
--<名称> <值>。#对文件进行备份
[root@static-server bin]# cd
[root@static-server ~]# mv jdk-22.0.2/ /usr/local/jdk22/
[root@static-server ~]# ls /usr/local/jdk22/
bin include jmods lib man release
conf jdk-22.0.2 legal LICENSE README
[root@static-server ~]# ls
anaconda-ks.cfg nginx-1.26.1 nginx-1.27.0 nginx.sh
jdk-22_linux-x64_bin.tar.gz nginx-1.26.1.tar.gz nginx-1.27.0.tar.gz
[root@static-server ~]# cd /usr/local/jdk22/
[root@static-server jdk22]# ls
bin include jmods lib man release
conf jdk-22.0.2 legal LICENSE README
[root@static-server jdk22]# pwd
/usr/local/jdk22
[root@static-server jdk22]# sed -n '$p' /etc/profile
PATH=$JAVA_HOME/bin:$PATH
[root@static-server jdk22]# sed -i '$aexport JAVA_HOME=/usr/local/jdk22/' /etc/profile
[root@static-server jdk22]# source /etc/profile
[root@static-server jdk22]# $JAVA_HOME
-bash: /usr/local/jdk22/: 是一个目录
[root@static-server jdk22]# java
-bash: java: 未找到命令
[root@static-server jdk22]# sed -i '$aPATH=$JAVA_HOME/bin:$PATH' /etc/profile
[root@static-server jdk22]# sed -n '$p' /etc/profile
PATH=$JAVA_HOME/bin:$PATH
[root@static-server jdk22]# source /etc/profile
[root@static-server jdk22]# java
用法:java [options] <mainclass> [args...](执行类)或 java [options] -jar <jarfile> [args...](执行 jar 文件)或 java [options] -m <module>[/<mainclass>] [args...]java [options] --module <module>[/<mainclass>] [args...](执行模块中的主类)或 java [options] <sourcefile> [args](执行源文件程序)将主类、源文件、-jar <jarfile>、-m 或--module <module>/<mainclass> 后的参数作为参数传递到主类。其中,选项包括:-cp <目录和 zip/jar 文件的类搜索路径>-classpath <目录和 zip/jar 文件的类搜索路径>--class-path <目录和 zip/jar 文件的类搜索路径>使用 : 分隔的, 用于搜索类文件的目录, JAR 档案和 ZIP 档案列表。-p <模块路径>--module-path <模块路径>...: 分隔的元素列表,每个元素都是模块或包含模块的目录的文件路径。每个模块都是模块化 JAR 或展开的模块目录。--upgrade-module-path <模块路径>...: 分隔的元素列表,每个元素都是模块或包含模块(用于替换运行时映像中的可升级模块)的目录的文件路径。每个模块都是模块化 JAR 或展开的模块目录。--add-modules <模块名称>[,<模块名称>...]除了初始模块之外要解析的根模块。<模块名称> 还可以为 ALL-DEFAULT, ALL-SYSTEM,ALL-MODULE-PATH.--enable-native-access <module name>[,<module name>...]允许模块中的代码访问 Java 运行时之外的代码和数据。<module name> 也可以是 ALL-UNNAMED,以指示类路径上的代码。--list-modules列出可观察模块并退出-d <module name>--describe-module <模块名称>描述模块并退出--dry-run 创建 VM 并加载主类, 但不执行 main 方法。此 --dry-run 选项对于验证诸如模块系统配置这样的命令行选项可能非常有用。--validate-modules验证所有模块并退出--validate-modules 选项对于查找模块路径中模块的冲突及其他错误可能非常有用。-D<名称>=<值>设置系统属性-verbose:[class|module|gc|jni]为给定子系统启用详细输出-version 将产品版本输出到错误流并退出--version 将产品版本输出到输出流并退出-showversion 将产品版本输出到错误流并继续--show-version将产品版本输出到输出流并继续--show-module-resolution在启动过程中显示模块解析输出-? -h -help将此帮助消息输出到错误流--help 将此帮助消息输出到输出流-X 将额外选项的帮助输出到错误流--help-extra 将额外选项的帮助输出到输出流-ea[:<程序包名称>...|:<类名>]-enableassertions[:<程序包名称>...|:<类名>]按指定的粒度启用断言-da[:<程序包名称>...|:<类名>]-disableassertions[:<程序包名称>...|:<类名>]按指定的粒度禁用断言-esa | -enablesystemassertions启用系统断言-dsa | -disablesystemassertions禁用系统断言-agentlib:<库名>[=<选项>]加载本机代理库 <库名>, 例如 -agentlib:jdwp另请参阅 -agentlib:jdwp=help-agentpath:<路径名>[=<选项>]按完整路径名加载本机代理库-javaagent:<jar 路径>[=<选项>]加载 Java 编程语言代理, 请参阅 java.lang.instrument-splash:<图像路径>使用指定的图像显示启动屏幕自动支持和使用 HiDPI 缩放图像(如果可用)。应始终将未缩放的图像文件名 (例如, image.ext)作为参数传递给 -splash 选项。将自动选取提供的最合适的缩放图像。有关详细信息, 请参阅 SplashScreen API 文档@argument 文件一个或多个包含选项的参数文件--disable-@files阻止进一步扩展参数文件--enable-preview允许类依赖于此发行版的预览功能
要为长选项指定参数, 可以使用 --<名称>=<值> 或
--<名称> <值>。#查看java版本
[root@static-server jdk22]# java -version
java version "22.0.2" 2024-07-16
Java(TM) SE Runtime Environment (build 22.0.2+9-70)
Java HotSpot(TM) 64-Bit Server VM (build 22.0.2+9-70, mixed mode, sharing)
[root@static-server jdk22]#
相关文章:

nginx反向代理+nginx黑白名单+nginx负载均衡+平滑升级+配置jdk环境-7.30
一、反向代理 1.前端服务器配置 前端服务器:用于接收和响应客户端,代理另一台主机 Nginx 安装 (1).下载安装nginx [rootweb ~]# wget https://nginx.org/download/nginx-1.26.1.tar.gz (2).解压 [rootweb ~ ]# tar -zxvf nginx-1.26.1.tar.gz (3…...

C# Unity 面向对象补全计划 之 访问修饰符
本文仅作学习笔记与交流,不作任何商业用途,作者能力有限,如有不足还请斧正 本系列旨在通过补全学习之后,给出任意类图都能实现并做到逻辑上严丝合缝...

JAVA多线程设计模式 (多线程程序的衡量标准)
前言 如果你对一个程序的评价方式还停留在“这个程序写得不错”、“这个程序写得太差”的程度,这样很难看出你是否确实分析了程序的构造。不要只是“好不好”应该要有一个“好在哪里,不好在哪里”的评量标准。 一、下载地址 下载地址:JAVA…...

消息队列使用
消息队列在分布式系统中扮演着非常重要的角色,其主要用途包括但不限于以下几点: 解耦: 消息队列可以减少应用程序之间的直接依赖,使系统各部分更加独立。例如,在一个电子商务网站中,订单系统可以将订单信息发送到消息队列中,而不必直接调用库存系统。库存系统可以从队列…...

Windows 10+Visual Studio2019 Opencv-C++安装配置
前往官网下载需要的版本Releases - OpenCVhttps://opencv.org/releases/ 1.下载并解压OpenCV 我选择4.6.0,点击windows版本,进行下载 2.配置项目属性 打开你的Visual Studio 2019项目 -> 右击项目名,选择“属性” 注:整个配…...

百易云资产管理运营系统 comfileup.php 文件上传致RCE漏洞复现(XVE-2024-18154)
0x01 产品简介 百易云资产管理运营系统,是专门针对企业不动产资产管理和运营需求而设计的一套综合解决方案。该系统能够覆盖资产的全生命周期管理,包括资产的登记、盘点、评估、处置等多个环节,同时提供强大的运营分析功能,帮助企业优化资产配置,提升运营效率。 0x02 漏…...

【学习笔记】Redis学习笔记——第17章 集群
第17章 集群 17.1 节点 使用cluster meet命令将其他节点添加到当前节点集群中 17.1.1 启动节点 通过cluster-enabled设置来决定是否启用集群 17.1.2 集群数据结构 每个节点都保存了自己及其他节点的IP端口号等信息 17.1.3 cluster meet命令的实现 是收到命令的节点和新…...

Vue - CSS基础学习
一、元素及属性 CSS 是为 web 内容添加样式的代码。 style标签 1.语法 1.除了选择器部分,每个规则集都应该包含在成对的大括号里({})。 2.在每个声明里要用冒号(:)将属性与属性值分隔开。 3.在每个规则集里要用分号…...

python setup.py install
有三种方法安装pyinstaller,而我唯独用下面这种最方便,又成功。 下载源码安装包,然后解压安装包,打开cmd并进入安装包解压目录,可以看到该目录下有一个setup.py的文件。 执行命令:python setup.py instal…...

论文解读:DiAD之SG网络
目录 一、SG网络功能介绍二、SG网络代码实现 一、SG网络功能介绍 DiAD论文最主要的创新点就是使用SG网络解决多类别异常检测中的语义信息丢失问题,那么它是怎么实现的保留原始图像语义信息的同时重建异常区域? 与稳定扩散去噪网络的连接: S…...

Prometheus+Grafana 监控平台实践-搭建常用服务监控告警
前言 Prometheus 是一个开放性的监控解决方案,通过各种 Exporter 采集当前主机/服务的数据,和 Grafana 相结合可以实现强大的监控和可视化功能 本篇将分享使用 docker compose 构建 Prometheus+Grafana,并监控之前文章所搭建的主机&服务,分享日常使用的一些使用经验 文…...

leaflet加载天地图:卫星底图(影响地图) 和 路网底图(矢量地图)【webgis】
文章目录 引言I 申请Key1.1 应用创建1.2 账号认证II 使用申请的key进行相关的服务调用2.1 服务API2.2 初始化地图组件2.3 加载影像底图和影像注记2.4 地理编码查询引言 自己没有对应的地图服务器和地理查询服务器的时候,使用天地图来实现业务的快速支撑。 基于天地图使用Leaf…...

微软蓝屏事件:全球网络安全与系统稳定性的警示
文章目录 每日一句正能量前言探讨软件更新流程中的风险管理和质量控制机制软件更新的风险风险管理策略质量控制措施测试流程缺陷识别实施质量控制结论 提供预防类似大规模故障的最佳方案或应急响应对策设计冗余系统实施灾难恢复计划建立高可用架构应急响应对策利用自动化工具和…...

【51单片机仿真】基于51单片机设计的整数/小数计算器系统仿真源码文档——文末资料下载
演示: 摘要 本项目设计并实现了一种基于51单片机的多功能计算器系统。系统采用STC89C52单片机作为主控制器,结合LCD显示模块、矩阵键盘等外设,实现了基本的整数、小数算术运算功能,包括加、减、乘、除、取模等。本文详细介绍了系统的硬件设计和软件实现,并对系统的功能和…...

ubuntu安装dockergitlab
#更换阿里云进行配置GPG 密钥 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ "deb [archarm64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" #如果出现错…...

自定义视图提示:提升Laravel用户体验的秘诀
自定义视图提示:提升Laravel用户体验的秘诀 在Laravel框架中,视图提示是一种向用户显示友好信息的方式,它们可以是表单输入后的错误信息、成功通知或其他重要的用户反馈。自定义视图提示不仅可以增强用户体验,还可以使应用程序的…...

关于黑马Ajax项目的笔记
一、token的介绍 概念: 访问权限的令牌,本质上是一串字符串 创建: 正确登录后,由后端签发并返回 作用: 判断是否有登录状态等,控制访问权限 注意 前端只能判断token有无,后端才能判断to…...

Java面试八股之JDK 动态代理和 CGLIB 动态代理的区别
JDK 动态代理和 CGLIB 动态代理的区别 JDK 动态代理和 CGLIB 动态代理都是在 Java 中实现动态代理的两种常见方式。它们各自有不同的特点和适用场景。下面详细介绍一下这两种动态代理的区别: 1. 代理机制 JDK 动态代理: 实现原理: JDK 动态代理基于 Java 的反射…...

验证码邮件接口测试指南?接口的优化策略?
验证码邮件接口集成步骤与注意事项?API接口设计要点? 在现代应用程序开发中,验证码邮件接口是保障用户安全和验证身份的重要工具。AokSend将详细介绍验证码邮件接口的测试指南,帮助开发者确保接口的稳定性和可靠性。 验证码邮件…...

基于Java的智能停车场管理系统
你好,我是计算机学姐码农小野!如果你对智能停车场管理系统感兴趣或有相关需求,欢迎私信联系我。 开发语言: Java 数据库: MySQL 技术: JSP技术 JAVA B/S架构 工具: 浏览器(…...

前后端分离开发遵循接口规范-YAPI
目前,网站主流开发方式是前后端分离。因此前后端必须遵循一套统一的规范,才能保证前后端进行正常的数据(JSON数据格式)请求、影响,这套规范即是 YAPI. 产品经理撰写原型; 前端或后端撰写接口文档。 YAPI…...

把本地的项目代码初始化到git仓库
cd /path/to/your/project# 在当前目录创建新的仓库 git init# 添加当前目录下的所有文件到暂存区 git add .# 添加commit message git commit -m "Initial commit"# 关联远程仓库 git remote add origin https://github.com/username/repository.git# 更改默认仓库&…...

白杨SEO:公众号如何找选题?如何利用ai工具写公众号?公众号变现方式有哪些?22个公众号营销常见问题解答大全!
前言:为什么分享这个?因为我发现不管是SEO从业者还是自媒体从业者,想通过公众号来做影响力或流量,甚至变现,但很多朋友公众号都没弄懂,所以分享一下。 分享问题大纲如下: 1、公众号如何申请注册…...

零基础学习深度学习以及模块缝合总结
Python基础知识 推荐视频:黑马程序员python教程,8天python从入门到精通,学python看这套就够了_哔哩哔哩_bilibili 工具和资源:PyTorch、Zotero、谷歌学术、Github、B站、ChatGPT等。 深度学习基本知识 张量维度表示:…...

XXE-lab-master靶场:PHP_xxe
目录 有回显 测试回显位置 构建payload 无回显数据外带 构建payload 漏洞修复 XXE-lab是一个一个包含php,java,python,C#等各种语言版本的XXE漏洞靶场。 下载地址:https://github.com/c0ny1/xxe-lab 将PHPStudy的中间件与版本信息调制为 php-5.4.29Apache 以…...

视图,存储过程和触发器
目录 视图 创建视图: 视图的使用 查看库中所有的视图 删除视图 视图的作用: 存储过程: 为什么使用存储过程? 什么是存储过程? 存储过程的创建 创建一个最简单的存储过程 使用存储过程 删除存储过程 带参的存储…...

sqli-labs(6-10)关通关讲解
sqli-labs(6-10)关通关讲解 Less-6 方法一:手工注入 1.判断闭合 http://localhost/sqli-labs/Less-6/?id1" //报错 http://localhost/sqli-labs/Less-6/?id1" -- //正常 http://localhost/sqli-labs/Less-6/?id1" and 11 -- http://localhos…...

【解决方法】git clone出现 curl 56 OpenSSL SSL_read: Connection was reset, errno 10054
当我们克隆别人的项目出现以下提示信息时候 remote: Enumerating objects: 7095, done. error: RPC failed; curl 56 OpenSSL SSL_read: Connection was reset, errno 10054 error: 2292 bytes of body are still expected fetch-pack: unexpected disconnect while reading s…...

机械拆装-基于Unity-本地数据持久化
目录 1. 数据结构简介:数据的集合 1.1 线性数据结构 1.2 非线性数据结构 2. 对数据集合的操作: 3. 数据持久化 3.1 数据的序列化存储 3.2 JSON文件硬盘存储 3.2.1 Json文件允许存储的数据类型 3.2.2 Json文件的语法格式 3.2.3 Json文件的读取 3.2.4 …...

【SpringBoot】4.3.5 参数传递之ModelAndView对象
ModelAndView也是SpringMVC中常用的数据返回对象。当控制器处理完请求时,通常会将包含视图对象和数据的ModelAndView对象一起返回前台。它的作用类似request对象的setAttribute()方法。 ModelAndView对象有两个作用: 1)设置转向地址(这也是ModelAndView和ModelMap的…...