第九周作业

本文详细介绍了如何配置Nginx进行反向代理和HTTPS安全加密,包括DNS设置、LNMP架构下部署WordPress应用。接着,概述了Tomcat实现多虚拟机的方法,以及定制访问日志格式和反向代理。此外,还讨论了垃圾回收算法和Tomcat的性能优化策略。
摘要由CSDN通过智能技术生成

目录

1.总结nginx反向代理及https安全加密

 2.完成nginx实现LNMP架构wordpress应用

3.总结tomcat实现多虚拟机

 4.总结tomcat定制访问日志格式和反向代理tomcat

5.完成tomcat实现MSM集群 

6.总结垃圾算法和分代回收

7.总结tomcat性能优化方式及java源码编译 


1.总结nginx反向代理及https安全加密

(1)反向代理:reverse proxy,指的是代理外网用户的请求到内部的指定的服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。

#环境搭建:
#10.0.0.10为代理服务器
#10.0.0.20为后端服务器

*****************代理服务器操作***********************************

server {
     listen 80;
     server_name www.zyb.com;
     location ~ \.(jpg|gif|png)  {
            proxy_pass http://10.0.0.20:8080;
     }
}

******************后端服务器操作**********************************

更改80端口为8080就好了

(2)https安全加密:是http+ssl/tls实现的,就是当用户手动输入一个不带https://前缀的域名的时候,对网站的请求是用的http这种简单的协议而且是不加密发送。web服务器收到以后会立即返回重定向,将用户升级到https连接。这种方法存在一定的中间人攻击的安全隐患。所以我们要使用HSTS(Strict-Transport-Security)的方法来解决。

server {
    server_name www.zyb.com;
    root /data/nginx/html/pc;
    listen 80;
    listen 443 ssl;
    ssl_certificate /etc/pki/ca/cacert.pem;
    ssl_certificate_key /etc/pki/ca/private/cakey.pem;
    ssl_session_cache shared:sslcache:20m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    location / {
       if ( $scheme = http ) {
          rewrite ^/(.*)$ https://www.zyb.com/$1 redirect;
       }
    }
}

 2.完成nginx实现LNMP架构wordpress应用

#环境搭建
#10.0.0.20为DNS服务器
#10.0.0.10为nginx和php服务器
#10.0.0.40为mysql服务器

#补充:下载wordpress并解压后,把worepress下的文件放到/usr/share/nginx/html/下并修改所有者和所属组为nginx。

***********************DNS脚本******************************

#!/bin/bash
DOMAIN=zyb.com
HOST=www
HOST_IP1=10.0.0.10
#HOST_IP2=10.0.0.30

#配置颜色提示
set_color () {
        RES_COL=60
        MOVE_TO_COLOR="echo -en \e[${RES_COL}G"
        SETCOLOR_SUCCESS="echo -en \e[1;32m [ok]\n"
        SETCOLOR_FAILURE="echo -en \e[1;31m [failure]\n"
        SETCOLOR_WARNING="echo -en \e[1;33m [worning]\n"
        echo -n "$1" && ${MOVE_TO_COLOR}
        if [ $2 = "success" -o $2 = "0" ];then
                ${SETCOLOR_SUCCESS}
        elif [ $2 = "failure" -o $2 = "1" ];then
        fi
        ${SETCOLOR_NORMAL}
}

#配置DNS
        sed -i -e /listen-on/s/127.0.0.1/any/g -e /allow-query/s/localhost/any/g /etc/named.conf
        cat > /var/named/$DOMAIN.zone <<EOF
\$TTL 1D
master   A   `hostname -I`
$HOST    A    $HOST_IP1
EOF
        named-checkzone $DOMAIN /var/named/$DOMAIN.zone &> /dev/null && set_color 专区文件正确 0;sleep 1 || exit;

        chmod 640 /var/named/$DOMAIN.zone
        chgrp named /var/named/$DOMAIN.zone

        cat>/etc/named.rfc1912.zones<<EOF
zone "$DOMAIN" IN {
type master;
file "$DOMAIN.zone";
};
EOF
        named-checkconf /etc/named.rfc1912.zones &> /dev/null && set_color 专区配置文件正确 0; sleep 1 || exit;
        set_color  已完成  0
        sleep 1
        systemctl enable --now named
}

dns_config


**********************************nginx源码编译和php配置脚本************************

#!/bin/bash
core_number=`grep "processor" /proc/cpuinfo |wc -l`

nginx_install () {
	yum -y install gcc pcre-devel openssl-devel zlib-devel
	wget http://nginx.org/download/nginx-1.22.1.tar.gz -P /usr/local/src/
	cd /usr/local/src/
	tar xf nginx-1.22.1.tar.gz
	cd nginx-1.22.1/
	useradd -s /sbin/nologin nginx
	./configure --prefix=/usr/local/nginx  --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module
	 make -j $core_number install
	chown -R nginx.nginx /usr/local/nginx
#	mkdir /apps/nginx/run/
#	sed -ri "s/(^#)(pid)(.*)/\2   \/apps\/nginx\/run\/nginx.pid\;/g" /apps/nginx/conf/nginx.conf
	cat>/usr/lib/systemd/system/nginx.service<<EOF
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target
EOF

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin

gzip -c /usr/local/src/nginx-1.22.1/man/nginx.8 > /usr/share/man/man8/nginx.8.gz


}

nginx_config () {

    sed -i "$ i include \/usr\/local\/nginx\/conf.d\/*\.conf;" /usr/local/nginx/conf/nginx.conf        

    mkdir /usr/local/nginx/conf.d/pc.conf
cat>/usr/local/nginx/conf.d/pc.conf<<EOF
server {
     server_name www.zyb.com;
     listen 80;
     location ~ \.php$ {
             root           /usr/share/nginx/html/;
             fastcgi_pass   127.0.0.1:9000;
             fastcgi_param  SCRIPT_FILENAME  \$document_root$fastcgi_script_name;
             include        fastcgi_params;
     }
     location / {
              root          /usr/share/nginx/html/;
              index         index.php;
     }

}
EOF
systemctl enable --now nginx
}

php_install () {

     yum -y install php-fpm php-mysqlnd php-json

     sed -i -e "/user = apache/c user = nginx" -e "/group = apache/c group = nginx" -e "/listen = \/run\/php-fpm\/www.sock/c listen = 127.0.0.1:9000" -e "/;pm.status_path = \/status/c pm.status_path = \/pm-status" -e  "/;ping.path = \/ping/c ping.path = \/ping" -e "/;ping.response = pong/c ping.response = pong" -e "/;access.log = log\/\$pool.access.log/c access.log = \/var\/log\/php-fpm\/\$pool.access.log" /etc/php-fpm.d/www.conf

     systemctl enable --now php-fpm
}

nginx_install 
nginx_config
php_install

***************************mysql配置脚本****************************

#!/bin/bash

yum -y install mysql-server&& systemctl enable --now mysqld&>/dev/null
mysql -e "create user wordpress@'10.0.0.%' identified by '123456'"
mysql -e "grant all on *.* to wordpress@'10.0.0.%'"
mysql -e "create database wordpress"

3.总结tomcat实现多虚拟机

(1)访问www.zyb.com使用jpress博客系统。

访问www.zhangyongbiao.com使用zrlog博客系统。

#提前配置好dns
#提前安装好jdk和tomcat

*****************修改tomcat配置文件*************************

[root@Rocky8 ~]#vim /usr/local/tomcat/conf/server.xml

</Realm>                                                    #原来的行
<Host name="www.zhangyongbiao.com"  appBase="/data/zrlog"   #修改的行
            unpackWARs="true" autoDeploy="true">            #原来的行

</Host>                                                     #新添加的行
       <Host name="www.zyb.com"  appBase="/data/jpress"     #新添加的行
            unpackWARs="true" autoDeploy="true">            #新添加的行

****************重新启动tomcat*********************************

[root@Rocky8 ~]#systemctl restart tomcat.service

******************创建存放数据的文件**************************

[root@Rocky8 ~]#mkdir -p /data/{jpress,zrlog}/ROOT            #必须用ROOT命名的文件夹,这样系统能找到默认页面
#下载jpress和zrlog的war后缀的压缩文件,发送到对应的/data/jpress或zrlog目录下,稍后系统会自动生成war后缀的文件夹。再把该文件夹下的所有文件发到ROOT文件夹下。

**********************创建对应的数据库*******************************

[root@Rocky8 ~]#mysql -e "create user jpress@'10.0.0.%' identified by '123456'"
[root@Rocky8 ~]#mysql -e "create database jpress"
[root@Rocky8 ~]#mysql -e "grant all on jpress.* to jpress@'10.0.0.%'"

[root@Rocky8 ~]#mysql -e "create user zrlog@'10.0.0.%' identified by '123456'"
[root@Rocky8 ~]#mysql -e "create database zrlog"
[root@Rocky8 ~]#mysql -e "grant all on zrlog.* to zrlog@'10.0.0.%'"


 4.总结tomcat定制访问日志格式和反向代理tomcat

(1)定制访问日志格式:生成json格式

***************************添加json格式的日志***********************

[root@Rocky8 ~]#vim /usr/local/tomcat/conf/server.xml

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot;:&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot;AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot;%r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot;:&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner&quot;:&quot;%{Referer}i&quot;,&quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/>

**************************查看json格式日志*****************************

[root@Rocky8 ~]#cat /usr/local/tomcat/logs/localhost_access_log.2023-03-05.txt |jq

{
  "clientip": "10.0.0.1",
  "ClientUser": "-",
  "authenticated": "-",
  "AccessTime": "[05/Mar/2023:13:21:15 +0800]",
  "method": "GET /favicon.ico?t=1624781874000 HTTP/1.1",
  "status": "200",
  "SendBytes": "16958",
  "Query?string": "?t=1624781874000",
  "partner": "http://www.zhangyongbiao.com:8080/",
  "AgentVersion": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
}

(2)反向代理及负载均衡:

**********************修改nginx配置文件*******************

[root@nginx ~]#vim  /usr/local/nginx/conf/nginx.conf

http {
    upstream tomcat {
#            ip_hash;
            hash $cookie_JSESSIONID;        #用SESSIONID为调度算法
            server 10.0.0.10:8080;          #tomcat服务器1
            server 10.0.0.30:8080;          #tomcat服务器2
}

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat;       #转到tomcat
            proxy_set_header Host $http_host; #携带host头,要不然默认显示tomcat主页面
        }

5.完成tomcat实现MSM集群 

****************************环境搭建**************************

#10.0.0.10:安装Nginx
#10.0.0.20:安装tomcat和memcached
#10.0.0.30:安装tomcat和memcached

*************************Nginx的配置*************************

[root@nginx ~]#vim /usr/local/nginx/conf/nginx.conf

http {
    upstream tomcat {
            server 10.0.0.20:8080;
            server 10.0.0.30:8080;
    
    server {
        listen       80;
        server_name  www.zyb.com;
        location / {
            proxy_pass http://tomcat;
            proxy_set_header Host $http_host;
        }
}


***********************tomcat1和tomcat2的配置*************************************

[root@tomcat1 ~]#vim /usr/local/tomcat/conf/server.xml
</Host>
       <Host name="www.zyb.com"  appBase="/data/tomcat/node1"
            unpackWARs="true" autoDeploy="true">

[root@tomcat1 ~]#mkdir -p /data/tomcat/node1/ROOT/

[root@tomcat1 ~]#vim /usr/local/tomcat/conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
        memcachedNodes="n1:10.0.0.20:11211,n2:10.0.0.30:11211"
        failoverNodes="n1"                                     #当改tomcat2时,这应该是n2
        requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
        transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
        />

#把需要的jar包放入/usr/local/tomcat/lib/下

[root@tomcat1 ~]#systemctl restart tomcat

*************************memcached的配置******************************************

[root@tomcat1 ~]#vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#OPTIONS="-l 127.0.0.1,::1"                       #注释这行,允许远程连接

6.总结垃圾算法和分代回收

(1)垃圾算法:

①:标记-扫描清除(mark-sweep)

优点:算法简单

缺点:会造成内存碎片,但是不浪费空间,效率较高(如果对象较多时,逐一删除效率也 会受到影响)

②:标记-压缩 (Mark-Compact)

优点:整理后内存空间连续分配,有大段的连续内存可分配,没有内存碎片。

缺点:内存整理过程有消耗,效率相对低下

③:复制 Copying

优点:复制过程中保证对象使用连续空间,且一次性清除所有垃圾,所以即使对象很多,收回效 率也很高

缺点:比较浪费内存,只能使用原来一半内存,因为内存对半划分了,复制过程毕竟也是有代价。

算法总结:

效率: 复制算法>标记清除算法> 标记压缩算法

内存整齐度: 复制算法=标记压缩算法> 标记清除算法

内存利用率: 标记压缩算法=标记清除算法>复制算法

(2)分代:

Heap堆内存分为:

年轻代Young:Young Generation

伊甸园区eden: 只有一个,刚刚创建的对象

幸存(存活)区Servivor Space:有2个幸存区,一个是from区,一个是to区。大小相等、地位 相同、可互换。

from 指的是本次复制数据的源区

to 指的是本次复制数据的目标区

老年代Tenured:Old Generation, 长时间存活的对象

默认空间大小比例:

默认JVM试图分配最大内存的总内存的1/4,初始化默认总内存为总内存的1/64,年青代中heap的1/3,老 年代占2/3

(3)回收:

年轻代回收 Minor GC

1. 起始时,所有新建对象(特大对象直接进入老年代)都出生在eden,当eden满了,启动GC。这个称 为Young GC 或者 Minor GC。

2. 先标记eden存活对象,然后将存活对象复制到s0(假设本次是s0,也可以是s1,它们可以调 换),eden剩余所有空间都清空。GC完成。

3. 继续新建对象,当eden再次满了,启动GC。

4. 先同时标记eden和s0中存活对象,然后将存活对象复制到s1。将eden和s0清空,此次GC完成

5. 继续新建对象,当eden满了,启动GC。

6. 先标记eden和s1中存活对象,然后将存活对象复制到s0。将eden和s1清空,此次GC完成

老年代回收 Major GC

进入老年代的数据较少,所以老年代区被占满的速度较慢,所以垃圾回收也不频繁。 如果老年代也满了,会触发老年代GC,称为Old GC或者 Major GC。 由于老年代对象一般来说存活次数较长,所以较常采用标记-压缩算法。 当老年代满时,会触发 Full GC,即对所有"代"的内存进行垃圾回收

Minor GC比较频繁,Major GC较少。但一般Major GC时,由于老年代对象也可以引用新生代对象,所 以先进行一次Minor GC,然后在Major GC会提高效率。可以认为回收老年代的时候完成了一次Full GC。 所以可以认为 MajorGC = FullGC

7.总结tomcat性能优化方式及java源码编译 

(1)tomcat性能优化:

①内存空间优化:在bin/catalina.sh文件添加JAVA_OPTS="xxx"  调整为物理内存的1/2。默认是1/4

②线程池的调整:在/tomcat/conf/server.xml文件中修改connnectiontimeout参数

(2)java源码编译jpress:

①步:安装jdk

②步:安装tomcat

③步:安装maven

④步:安装git

⑤步:git clone jpress源码链接

⑥步:进入pom.xml文件所在位置

⑦步:执行mvn clean install package -Dmaven.test.skip=true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值