1. 总结 nginx反向代理及https安全加密。
七层代理(应用层)在http模块下配置
http stream配置参数
http {
upstream name {
hash $cookie_sessionid
#hash key
#ip_hash
#least_conn;
server ip:port //至少一个server服务器配置
server ip:port weight=3
server ip:port down
}
server {
listen 80;
location / {
proxy_pass http://name;
}
}
server支持的parameters如下:
weight=number #设置权重,默认为1,实现类似于LVS中的WRR,WLC等
max_conns=number
#给当前后端server设置最大活动链接数,默认为0表示没有限制
max_fails=number
#后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测
多少次,如果都失败就标记为不可用,默认为工次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测
fail_timeout=time #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒
backup
#设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器
down
#标记为down状态,可以平滑下线后端服务器,新用户不再调度到此主机,旧用户不受影响
hash KEY [consistent];
#基于指定请求报文中首部字段或者URI等key做hash计算,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用,Consistent定义使用一致性hash运算,一致性hash基于取模运算
#示例
hash Srequest_uri consistent; #基于用户请求的uri做hash
hash Scookie_sessionid
#基于cookie中的sessionid这个key进行hash调度,实现会话绑定
ip_hash;
#源地址hash调度方法,基于的客户端的remote_addr(源地址IPv4的前24位或整个IPv6地址)做hash计算,以实现会话保持
#hash Sremote_addr 则是对全部32bit的IPv4进行hash计t算
least_conn;
#敏少连接调度算法,优先将客户端请求调度到当前连接量少的后端服务器,相当于LVS中的WLC
四层代理(传输层)在stream模块下配置
stream {
upstream dns {
server ip:port;
server ip:port;
server {
listen 53 udp;
proxy_pass dns;
}
}
2. 完成nginx实现LNMP架构wordpress应用
1.安装mysql数据库,创建用户和数据库并授权
create database wordpress;
create user wordpress@'%' identified by '123456'
grant all on wordpress.* to wordpress@'%';
2.安装nginx,配置文件添加内容
server {
listen 80;
server_name www.liguox.org;
location / {
root /data/nginx/wordpress;
index index.php index.html index. html;
}
location ~ \-php$ {
root /data/nginx/wordpress;
fastcgi_pass 127.0.0.1: 9000;
fastcgi_index index. php;
fastcgi_param SCRIPT_FILENAME Sdocument_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ ^/(ping|pm_status)$ { #实现状态页
include fastcgi_params;
fastogi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME Sdocument_root$fastcgi_script_name;
#fastcgi_param PATH_TRANSLATED Sdocument_rootSfastcgi_script_name;
}
3.部署php-fpm服务
4.解压wordpress文件,修改目录权限
5.启动服务器访问
3. 总结 JumpServer管理配置
jumpSever管理配置
用户管理
用户列表:根据系统管理员、普通用户、系统审计员权限创建对应用户
用户组:将创建的用户进行分组
资产管理(可以使用模板批量导入)
资产列表:录入对应资产信息创建
添加资产节点:将资产进行分组
授权管理:
通过在linux中创建的用户,实现关联使用jumpserver中的用户资产
创建授权规则
会话管理:
查看用户操作,和完整会话录像
4. 总结 tomcat实现多虚拟机
多虛拟主机配置说明
• name 必须是主机名,用主机名来匹配
• appBase 当前主机的网页根目录,是相对于 SCATALINA_HOME,也可以使用绝对路径
• unpackWARs 是否自动解压war格式
• autoDeploy 热部署,自动加载并运行应用
vim conf/server.xml
<Host name="web1.magedu.org"appBase=" /data/webapps/" unpackwARs="True"autoDeploy=" false">
#虚拟主机专有访问日志
<Valve className="org.apache.catalina.valves AccessLogvalve" directory="logs" prefix="web1_access_log" suffix=" .txt" pattern="%h %1 %u %t "%r" %s
%b"/>
</Host>
#以下行是自带的不需要修改
</Engine>
</Service>
</Server>
#或者如果不加日志也可以用下面简化写法
<Host name="web1.magedu.org" appbase="/data/webapps/" unpackwARs="True" autoDeploy=" false" />
准备虚拟主机数据目录并授权
mkdir /data/app{1,2}/ROOT -pv
chown -R tomcat. /data/app{1,2}/
5. 总结 tomcat定制访问日志格式和反向代理tomcat
环境准备:
192.168.29.100 #nginx反向代理并实现https加密
192.168.29.255 #tomcat运行java程序和数据库
192.168.29.100环境配置:
1.安装nginx
2.修改配置文件
upstream tomcat {
server 192.168.29.225:8080; //代理地址端口
}
server {
listen 80;
server_name www.liguox.org;
return 302 https://$server_name$request_uri; //实现http跳转到https加密
}
server {
listen 443 ssl;
ssl_certificate /apps/nginx/certs/www.liguox.org.crt; 指定证书相关文件路径
ssl_certificate_key /apps/nginx/certs/www.liguox.org.key;
location / {
proxy_pass http://tomcat;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3.重载nginx配置文件
nginx -s reload
192.168.29.225环境配置:
1.安装tomcat
2.安装mysql,创建用户并授权
create database jpress;
create user jpress@'%' identified by '123456'
grant all on jpress.* to jpress@'%';
3.将jpress的java程序包移动到TOMCAT的webapps目录下改名为ROOT.war,删除原本ROOT目录
4.启动tomcat服务
6. 完成 tomcat实现MSM集群
non-sticky模式:
1.将jedis.jar放到tomcatd安装目录的lib目录下
2.redis服务器修改配置文件,开启远程连接
3.两台tomcat服务器配置文件修改
<Context>
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="redis://192.168.29.225"
sticky="false"
sessionBackupAsync="false"
lockingMode="uriPattern:/path1|/path2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
7. 总结 JVM垃圾回收算法和分代
1.标记-清除 Mark-Sweep
分垃圾标记阶段和内存释放两个阶段
标记阶段,找到所有可访问对象打个标记。清理阶段,遍历整个堆
对未标记对象逐一进行清理
特点:
优点:算法简单
缺点:标记-清除最大的问题会造成内存碎片,但是不浪费空间,效率较高
2.标记-压缩
分垃圾标记阶段和内存整理两个阶段
标记阶段,找到所有可访问对象打个标记
内存清理阶段时,整理时将对象向内存一端移动,整理后存活对象连续的集中在内存一端
特点:
优点:整理后的内存空间连续分配,有大段的连续内存可分配,没有内存碎片
缺点:内存整理过程有消耗,效率相对低
3.复制Copying
先将可用内存分为A、B相同两块区域,每次只用其中一块,比如A,当A用完后,则将A中存活的对象复制到B。复制到B的时候连续的使用内存,最后将A一次性清除干净
特点:
优点:没有碎片,复制过程中保证对象使用连续空间,且一次性清除所有垃圾,所以即使对象很多,收回效率也很高
缺点:比较浪费内存,只能使用原来一半内存,因为内存对半划分,复制过程也是代价
不同场景最合适算法
效率:复制算法>标记清除算法>标记压缩算法
内存整齐度:复制算法=标记压缩算法>标记清除算法
内里利用率:标记压缩算法=标记清除算法>复制算法
JVM分代的实现方式是通过不同的垃圾回收算法来处理不同的内存区域。
新生代:使用复制算法进行垃圾回收,将内存分为一个Eden区和两个Survivor区,
每次只使用一个Survivor区,当这个Survivor区满了之后,
将其中的存活对象复制到另一个Survivor区中,同时清空原来的Survivor区。
老年代:使用标记-清除算法进行垃圾回收,标记出所有存活的对象,然后清除所有未标记的对象。
9. 总结 tomcat性能优化方式及java源码编译
内存空间优化
vim /usr/local/tomcat/bin/catalina.sh
JAVA_OPTS="-server -Xms4g -Xmx4g -XX: NewSize= -XX:MaxNewSize=
-server:服务器模式
-Xms:堆内存初始化大小
Xmx:堆内存空向上限
-XX: Newsize=:新生代空间初始化大小
-XX:MaxNewSize=:新生代空间最大值
线程池调整
vim /usr/local/tomcat/conf/server.xml
[root@centos8 ~]#vim /usr/local/tomcat/conf/server.xml
<Connector port="8080"
protocol="нтр/1.1" connectionTimeout="20000"
redirectport=8443"/>
常用属性:
• 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.安装maven,修改配置文件
vim /etc/maven/settings.xml
‹mirrors>
<!--阿里云镜像-->
‹mirror>
<i d>nexus-aliyun</id>
<mirrorof>*</mirrorof>
‹name>Nexus aliyun</name≥
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
2.进入到包含“pom.xml”路径中,执行:
mvn clean install package -Dmaven.test.skip=true