1. 总结 nginx反向代理及https安全加密。
nginx反向代理:
反向代理指定的是通过nginx代理外网用户的请求到内部的指定的服务器中,并将数据返回给用户的一个种方式。
https安全加密:
HTTPS能够加密信息,加密数据以保证数据的安全,web网站登录页面通常会使用https加密传输的,以避免敏感信息被第三方获取,所以很多银行的网站或者电子邮件等等安全级别较高的服务都会采用HTTPS协议。
HTTPS其实是由两部分组成,HTTP+SSL/TLS,也就是HTTP上又加了一层处理加密信息的模块,服务器和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
2. 完成nginx实现LNMP架构wordpress应用
一台LNP服务器
一台带有mysql或者redis的服务器
开始部署mysq服务器:
1.apt -y install mysql-server redis;systemctl enable --now mysql redis
2.mysql创建账号,并支持远程连接:
mysql> create user wordpress@'10.0.0.%' identified by '123456';
mysql> create database wordpress;
mysql> grant all on wordpress.* to wordpress@'10.0.0.%';
3.设置远程连接,修改配置文件:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
配置LNP服务器
1.编译nginx的过程不介绍了直接开始编译后的步骤:
Vim /data/nginx/conf/nginx.conf
再结尾处添加,让nginx识别conf.d/*.conf所有配置文件:
include /data/nginx/conf.d/*.conf;
}
因着没有conf.d的目录所以创建一个conf.d的目录,存放配置文件
mkdir /data/nginx/conf.d/ -p
2.创建 wordpressphp配置文件,并且单独进行设置:
vim /data/nginx/conf.d/wordpressphp.conf
server{
listen 80;
server_name www.youdu.org;
root /data/wordpressphp/ ;
index index.php;
client_max_body_size 200M;
location ~ \.php$ {
root /data/wordpressphp/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ ^/(ping|fpm_status)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重启nginx:
systemctl restart nginx.service
3.安装php响应程序
apt -y install php-json php7.4-mysql php-mysql php-mbstring php-gd php-xml php-curl
修改php配置文件
vim /etc/php/7.4/fpm/php.ini
upload_max_filesize = 200M
post_max_size = 200M 需要增加限制兆数,否则没办法正常运行
修改php配置文件用同一个账号启动
vim /etc/php/7.4/fpm/pool.d/www.conf
user = nginx
group = nginx
listen = 127.0.0.1:9000
开启状态页
pm.status_path = /fpm_status
ping.path = /ping
重启服务:
systemctl restart php7.4-fpm.service
4.3. 安装wordpress软件
将下载好的软件包推拽到系统里解压
tar xf wordpress-6.3.2-zh_CN.tar.gz -d /data/wordpress/
chown -R nginx:nginx /data/wordpress/
重启服务:
systemctl restart php7.4-fpm.service
配置完成
3. 总结 JumpServer管理配置
JumpServer 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0开源协议,是符合4A的专业运维审计系统。为互联网企业提了认证,授权,审计,自动化运维等功能。JumpServer 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API ,各机房部署登录节点,可横向扩展、无并发访问限制。
安装与部署:
JumpServer的安装可以使用官方提供的安装脚本,支持多种操作系统。安装完成后,需要进行基本的配置,如数据库连接、管理员账号等。
用户和权限管理:
JumpServer通过用户和权限管理来控制对服务器的访问。管理员可以创建用户、组织结构、角色,然后将用户分配给角色,从而实现灵活的权限控制。
资产管理:
JumpServer可以集中管理服务器和其他设备的资产信息,包括主机名、IP地址、SSH密钥等。这些资产信息可以方便地与用户和权限进行关联。
审计日志:
JumpServer提供审计日志功能,记录用户的操作行为,包括登录、命令执行等。审计日志对于追踪操作历史、安全审计和合规性方面非常重要。
认证与授权:
JumpServer支持多种认证方式,包括用户名密码、SSH密钥、LDAP等。同时,可以通过角色进行细粒度的授权,确保每个用户只能访问其具备权限的资产。
4. 总结 tomcat实现多虚拟机
tomcat多虚拟机就是在一个服务器上通过tomcat实现创建多个网站,主要修改conf/server.xml配置文件进行配置
打开配置文件vim /usr/local/tomcat/conf/server.xml
将末尾处
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
#虚拟机主机模块
在复制一份添加到下面就成另外的主机了
<Host name="m.magedu.org" appBase="/data/m"
unpackWARs="true" autoDeploy="true">
</Host>
在指定的文件中/data/m 确保有一个ROOT文件,里面带有index.html的网站文件,这样才能正常的指定路径读取文件否则无法读取
mkdir -p /data/m/ROOT
重启服务:
systemctl restart tomcat.service
此处为tomcat默认网站,外加一个m.magedu.org的网站
5. 总结 tomcat定制访问日志格式和反向代理tomcat
tomcat定制访问日志格式
编辑 Tomcat 的 server.xml 文件:
打开 Tomcat 的 server.xml 文件,这个文件位于 Tomcat 的 conf 文件夹下。
定位到 <Host> 元素或 <Engine> 元素中的 <Valve> 配置段。
自定义日志格式(使用模式):
%h: 远程主机名/IP地址
%l: 远程逻辑用户名(通常'-')
%u: 请求用户的远程用户名(通常'-')
%t: 请求的时间戳
%r: 请求的第一行
%s: 请求的响应状态码
%b: 发送的字节数(不包括HTTP头,如果无法确定,则使用'-')
保存并重启 Tomcat:
保存对 server.xml 文件的更改,并重新启动 Tomcat 服务器使更改生效。
反向代理tomcat
安装jdk8以及tomcat9建议使用编译安装
Apt -y install openjdk-8-jdk
Apt -y install tomcat9 tomcat9-docs tomcat9-examples tomcat9-admin
三台服务器:
一台nginx
两台tomcat
配置其中一台tomcat,另外一台同样操作
1.打开配置文件vim /usr/local/tomcat/conf/server.xml
Tomcat配置主网页文件,也可以在在原来的直接修改,以下是新添加的虚拟机
<Host name="www.youdu.org" appBase="/data/tomcat/node1"
unpackWARs="true" autoDeploy="true">
</Host>
<Host name="www.youdu.org" appBase="/data/tomcat/node2"
unpackWARs="true" autoDeploy="true">
</Host>
mkdir -p /data/tomcat/node1/ROOT
mkdir -p /data/tomcat/node2/ROOT
2.在文件夹里面创建一个页面文件index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> Tomcat Website </h1>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
重启服务:
systemctl restart tomcat9.service
3.在DNS的服务器上需要指定node1以及node2服务器的地址否则默认会进入到tomcat的默认页面
node1 A 10.0.0.7
node2 A 10.0.0.8
4.配置nginx服务器,反向代理,并且设置负载均衡
vim /etc/nginx/nginx.conf
添加:
upstream tomcat {
#ip_hash; #是要是同一个客户端的地址就往同一个服务器上调度
#hash $cookie_JSESSIONID; #基于cookie实现调度
server 10.0.0.7:8080 ;
server 10.0.0.8:8080 ;
}
server {
listen 80;
server_name www.youdu.org;
location / {
root html;
index index.html index.html;
proxy_pass http://tomcat;
proxy_set_header Host $http_host;
}
}
6. 完成 tomcat实现MSM集群
一台nginx
两台tomcat同时安装memcached
1.在memcached上安装memcached
apt -y install Memcached
systemctl enable --now Memcached
安装完成后修改memcached默认端口
vim /etc/memcached.conf
#-l 127.0.0.1 关闭127端口
systemctl restart memcached
两台机器都要这样修改
2.修改tomcat 的配置文件conf/context.xml
vim /usr/local/tomcat/conf/context.xml
在最后一行的前面把一下的一段贴上去
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:10.0.0.7:11211,n2:10.0.0.8:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
主要需改以下部分:
memcachedNodes="n1:10.0.0.7:11211,n2:10.0.0.8:11211"
failoverNodes="n1"
#第一行是备用的存储位置
#第二行是如果对应的节点失效了,也就是n1对n2,n2失效了就选择对应n1自己
3.在第二台服务器上也要这样操作:区别在于n1,修改成n2原理一样
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:10.0.0.7:11211,n2:10.0.0.8:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
将msm里面的相应组件全部拖拽到:
/usr/local/tomcat/lib
重启:
systemctl restart tomcat.service
7. 总结 JVM垃圾回收算法和分代
JVM垃圾回收算法:
标记-清除算法(Mark and Sweep):
标记阶段: 从根节点开始标记所有可达对象。
清除阶段: 清除所有未标记的对象,释放它们的内存。
缺点:会产生内存碎片。
复制算法(Copying):
将堆分为两块,每次只使用其中一块。当一块内存用尽时,将存活对象复制到另一块中,然后清理当前块。
适用于新生代的垃圾回收,因为新生代的对象生命周期较短。
标记-整理算法(Mark and Compact):
在标记阶段,标记所有可达对象。
在整理阶段,将所有存活对象向一端移动,然后清理边界外的内存。
减少了内存碎片的产生。
分代算法:
将堆分为新生代(Young Generation)、老年代(Old Generation)和永久代(或元空间,取决于JVM版本)。
新生代使用复制算法,老年代使用标记-整理算法。
JVM分代策略:
新生代(Young Generation):
大部分对象的生命周期较短,使用复制算法。
分为Eden区和两个Survivor区(S0和S1)。
老年代(Old Generation):
存放经过多次垃圾回收仍然存活的对象。
使用标记-整理算法。
永久代/元空间(Permanent Generation/Metaspace):
存放类的元数据,JVM 8之前使用永久代,JVM 8及之后使用元空间。
不同于堆的分代,不再受到固定大小的限制,而是根据应用程序的需求动态调整。
优缺点:
新生代:
优点:适应对象短生命周期,提高垃圾回收效率。
缺点:可能导致过早晋升(promotion)到老年代。
老年代:
优点:适应长生命周期的对象。
缺点:老年代的垃圾回收相对复杂,因为存活对象较多。
分代策略:
优点:根据对象的生命周期采用不同的垃圾回收算法,提高整体垃圾回收效率。
缺点:需要在新生代和老年代之间进行对象移动,可能带来一些性能开销。
9. 总结 tomcat性能优化方式及java源码编译
tomcat性能优化
常用属性:
connectionTimeout :连接超时时长,单位ms
maxThreads:最大线程数,默认200
minSpareThreads:最小空闲线程数
maxSpareThreads:最大空闲线程数
acceptCount:当启动线程满了之后,等待队列的最大长度,默认100
URIEncoding:URI 地址编码格式,建议使用 UTF-8
enableLookups:是否启用客户端主机名的DNS反向解析,缺省禁用,建议禁用,就使用客户端IP就行
compression:是否启用传输压缩机制,建议 "on",CPU和流量的平衡
compressionMinSize:启用压缩传输的数据流最小值,单位是字节
compressableMimeType:定义启用压缩功能的MIME类型text/html, text/xml, text/css,text/javascript
java源码编译
1.安装java就需要按照openjdk-8-jdk
2.同时下载maven
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz
解压:
tar xf apache-maven-3.9.4-bin.tar.gz -C /usr/local/
3.生成软连接:
ln -s /usr/local/apache-maven-3.9.4/ /usr/local/maven
4.生成变量文件:
echo 'PATH=/usr/local/maven/bin:$PATH' > /etc/profile.d/maven.sh
echo 'export MAVEN_HOME=/usr/local/maven' >> /etc/profile.d/maven.sh
bash /etc/profile.d/maven.sh
source /etc/profile
测试:
mvn -v
5.镜像加速:(需要把镜像源修改成国内的这样使用起来比较快)
vim /usr/local/maven/conf/settings.xml
在</mirror>
-->
下添加:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
6.编译安装输入的命令
mvn clean install package
7.编译测试软件:
git clone https://gitee.com/lbtooth/spring-boot-helloworld.git
d spring-boot-helloworld/
编译:(比较进入到编译软件的目录下看到pom.xml才可以编译)
mvn clean package -Dmaven.test.skip=ture
编译 清理之前的痕迹 打包 -并且忽略测试代码的编译
8.编译完成只会生成target目录,里面的带有jar的包就是编译完成的包
cp target/spring-boot-helloworld-0.9.0-SNAPSHOT.jar /opt/
cd /opt/
java -jar spring-boot-helloworld-0.9.0-SNAPSHOT.jar