第八周

1. Tomcat 实现多虚拟主机

多虚拟主机是指在一台服务器上运行多个独立的网站,每个网站有自己的域名和应用。Tomcat 通过配置 server.xml 文件实现多虚拟主机:

  • conf/server.xml 文件中,找到 <Host> 标签,添加新的虚拟主机配置。
  • 配置示例:
    <Host name="www.example1.com"  appBase="webapps/example1"
          unpackWARs="true" autoDeploy="true">
    </Host>
    <Host name="www.example2.com"  appBase="webapps/example2"
          unpackWARs="true" autoDeploy="true">
    </Host>
    
  • 每个 <Host> 标签需要指定以下参数:
    • name:虚拟主机的域名。
    • appBase:虚拟主机的应用程序根目录。
    • unpackWARs:是否自动解压 .war 文件。
    • autoDeploy:是否自动部署应用。
  • 配置完成后,将对应的应用程序部署到指定的 appBase 目录下,并重启 Tomcat 服务。

2. Tomcat 定制访问日志格式和反向代理 Tomcat

  • 定制访问日志格式

    • conf/server.xml 文件中,找到 <Host><Valve> 标签,添加或修改 AccessLogValve 配置。
    • 示例:
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
             prefix="access_log." suffix=".txt"
             pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      
    • pattern 属性用于定义日志格式,常见的格式说明符包括:
      • %h:客户端 IP 地址。
      • %l:客户端身份认证的用户名。
      • %u:请求的用户。
      • %t:请求的时间。
      • %r:请求行。
      • %s:HTTP 状态码。
      • %b:发送的字节数。
  • 反向代理 Tomcat

    • 可以通过 Nginx 或 Apache HTTP Server 配置反向代理,将请求转发到 Tomcat 服务器。

    • 在 Nginx 中,配置示例:

      [root@ubuntu ~]# cat /etc/nginx/conf.d/java.m99-magedu.com.conf
      server{
       listen 80;
       server_name java.m99-magedu.com;
       location / {
       proxy_pass http://127.0.0.1:8080;
       proxy_set_header host $http_host;
       }
      }
      

3. iptables 5 表 5 链、基本使用及扩展模块

  • 5 表

    • raw:用于处理连接跟踪。
    • mangle:用于修改数据包内容。
    • nat:用于网络地址转换。
    • filter:用于数据包过滤。
    • security:用于安全相关的处理。
  • 5 链

    • PREROUTING:数据包进入网络接口后,路由决策前。
    • INPUT:数据包进入网络接口后,路由决策后。
    • OUTPUT:本地生成的数据包。
    • FORWARD:经过本机转发的数据包。
    • POSTROUTING:数据包离开网络接口前。
  • 基本使用

    • 添加规则:iptables -A 链名 -p 协议 --dport 端口 -j 动作
    • 删除规则:iptables -D 链名 规则编号
    • 查看规则:iptables -L -n
  • 扩展模块

    • conntrack:用于处理连接跟踪。
    • geoip:用于基于地理位置的过滤。
    • recent:用于限制特定 IP 的访问频率。

4. iptables 规则优化实践、规则保存和恢复

  • 规则优化

    • 尽量减少规则数量,避免重复规则。
    • 将最常用的规则放在前面,提高匹配效率。
  • 规则保存和恢复

    • 保存规则:iptables-save > 规则文件
    • 恢复规则:iptables-restore < 规则文件

5. NAT 转换原理、DNAT/SNAT 原理及架构设计

  • NAT 转换原理

    • NAT(网络地址转换)用于将一个 IP 地址空间的地址转换为另一个地址空间的地址,以解决 IP 地址不足的问题。
  • DNAT(目标地址转换)

    • 将进入的数据包的目标地址转换为另一个地址,常用于端口映射。
    • 示例:iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
  • SNAT(源地址转换)

    • 将发出的数据包的源地址转换为另一个地址,常用于多出口网络。
    • 示例:iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.1
  • 架构设计

    • DNAT 架构:在防火墙或路由器上配置 DNAT 规则,将外部请求转发到内部服务器。
    • SNAT 架构:在出口网关上配置 SNAT 规则,将内部网络的请求转换为外部 IP 地址。

6. 使用 REDIRECT 将 90 端口重定向到 80 端口

iptables -t nat -A PREROUTING -p tcp --dport 90 -j REDIRECT --to-port 80

该规则将进入的 TCP 90 端口请求重定向到本机的 80 端口。


7. firewalld 常见区域总结

  • trusted:完全信任的区域,允许所有流量。
  • home:家庭网络区域,允许部分可信流量。
  • work:工作网络区域,允许部分可信流量。
  • public:公共网络区域,仅允许必要的流量。
  • dmz:非军事区,允许有限的流量。
  • block:阻止所有流量。
  • drop:丢弃所有流量。

8. 通过 nftables 暴露本机 80/443/ssh 服务端口给指定网络访问

nft add rule inet filter input ip saddr 192.168.1.0/24 tcp dport 80 accept
nft add rule inet filter input ip saddr 192.168.1.0/24 tcp dport 443 accept
nft add rule inet filter input ip saddr 192.168.1.0/24 tcp dport 22 accept

这些规则允许来自指定网络(192.168.1.0/24)的流量访问本机的 80、443 和 22 端口。


9. Nginx 反向代理 Tomcat 实现基于 Redis 会话复制的集群构建

  • Nginx 反向代理

    • 配置 Nginx 将请求转发到多个 Tomcat 实例。

    • 示例:

      [root@fan:~]#cat /etc/nginx/sites-enabled/java.m99-magedu.com.conf 
      upstream tomcat {
      hash $cookie_JSESSION consistent;
          server 10.0.0.176:8080;
       	server 10.0.0.177:8080;
      }
      server{
       listen 80;
       server_name java.m99-magedu.com;
       return 302 https://$host$request_uri;
       }
       server{
       listen 443 ssl;
       server_name java.m99-magedu.com;
       root /var/www/html/java.m99-magedu.com;
       ssl_certificate /usr/share/easy-rsa/pki/java.m99-magedu.com.pem;
       ssl_certificate_key /usr/share/easy-rsa/pki/private/java.m99-magedu.com.key;
       ssl_session_cache shared:sslcache:20m;
       ssl_session_timeout 10m;
       location ~* \.jsp$ {
       proxy_pass http://tomcat;
       proxy_set_header host $http_host;
       }
      }
      
    • tomcat配置

    • cat /usr/local/tomcat/conf/context.xml
      <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
          memcachedNodes="redis://10.0.0.153"
          sticky="false"
          sessionBackupAsync="false"
          lockingMode="uriPattern:/path1|/path2"
          requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"  
      transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFact
      ory"/>
      
      
  • Redis 会话复制

    • 127.0.0.1:6379> keys *
      1) "validity:5DD87372E4E7C3627F06A02811CA857B"
      2) "5DD87372E4E7C3627F06A02811CA857B"
      127.0.0.1:6379> keys *
      1) "6E1A13A63BB2D716E71F24B5AB43C0A6"
      2) "validity:5DD87372E4E7C3627F06A02811CA857B"
      3) "5DD87372E4E7C3627F06A02811CA857B"
      4) "validity:6E1A13A63BB2D716E71F24B5AB43C0A6"
      127.0.0.1:6379> 
      

10. JVM 垃圾回收算法和分代

  • 分代

    • 新生代:频繁创建和销毁的对象存储在这里,包括 Eden 区和两个 Survivor 区。
    • 老年代:长期存活的对象存储在这里。
    • 永久代/元空间:存储类的元数据(JDK 8 及以后使用元空间)。
  • 垃圾回收算法

    • 标记-清除算法:标记活动对象,清除未标记的对象。适用于老年代。
    • 复制算法:将对象从一个空间复制到另一个空间。适用于新生代。
    • 标记-压缩算法:标记活动对象并压缩内存,减少内存碎片。适用于老年代。
    • 分代回收:新生代使用复制算法,老年代使用标记-压缩算法。

posted @ 2025-04-13 17:37  你好,运维人  阅读(17)  评论(0)    收藏  举报