• Nginx 学习(六)Nginx + Tomcat


    一  RPM打包

    1  基本概念

    大量源码包,希望提供统一的软件管理机制

    2  软件打包

    (1)打包流程

    • 准备源码软件
    • 安装rpm-build
    • 编写编译配置文件
    • 编译RPM包

    (2)安装rpm-build软件

            制作nginx的RPM包
    - 问题

    本案例使用nginx-1.22.1版本的源码软件,生成对应的RPM包软件,具体要求如下:

    软件名称为nginx

    软件版本为1.22.1

    RPM软件包可以查询描述信息

    RPM软件包可以安装及卸载

    - 方案

    安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。

    - 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:安装rpm-build软件

    1. 1)安装rpm-build软件包
    2. [root@web1 ~]# yum -y install rpm-build
    3. 2)生成rpmbuild目录结构
    4. [root@web1 ~]# rpmbuild -ba nginx.spec #会报错,没有文件或目录
    5. [root@web1 ~]# ls /root/rpmbuild #自动生成的目录结构
    6. BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
    7. 3)准备工作,将源码软件复制到SOURCES目录
    8. [root@web1 ~]# cp nginx-1.22.1.tar.gz /root/rpmbuild/SOURCES/
    9. 4)创建并修改SPEC配置文件
    10. [root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec
    11. Name:nginx #源码包软件名称
    12. Version:1.22.1 #源码包软件的版本号
    13. Release: 10 #制作的RPM包版本号
    14. Summary: nginx is a web server software. #RPM软件的概述
    15. License:GPL #软件的协议
    16. URL: www.test.com #网址
    17. Source0:nginx-1.22.1.tar.gz #源码包文件的全称
    18. #BuildRequires: #制作RPM时的依赖关系
    19. Requires: pcre-devel openssl-devel #安装RPM时的依赖关系
    20. %description
    21. nginx is an HTTP and reverse proxy server. #软件的详细描述
    22. %post
    23. useradd nginx #非必需操作:安装后脚本(创建账户)
    24. %prep
    25. %setup -q #自动解压源码包,并cd进入目录
    26. %build
    27. ./configure
    28. make %{?_smp_mflags}
    29. %install
    30. make install DESTDIR=%{buildroot}
    31. %files
    32. %doc
    33. /usr/local/nginx/* #对哪些文件与目录打包
    34. %changelog

    步骤二:使用配置文件创建RPM包

    1. 1)安装依赖软件包
    2. [root@web1 ~]# yum -y install gcc pcre-devel openssl-devel
    3. 2)rpmbuild创建RPM软件包
    4. [root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
    5. [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-10.x86_64.rpm

    步骤三:安装软件

    1. [root@web1 ~]# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.22.1-10.x86_64.rpm
    2. [root@web1 ~]# rpm -qa |grep nginx
    3. [root@web1 ~]# ls /usr/local/nginx/

    二  VPN 服务器

    1  GRE VPN

    (1)VPN概述

    Virtual Private Network (虚拟专用网络)

    在公用网络上建立专用私有网络,进行加密通讯。多用于为集团公司的各地子公司建立连接,连接完成后,各个地区的子公司可以像局域网一样通讯在企业网络中有广泛应用

    偶尔可以用于翻墙,目前主流的VPN技术(GRE,PPTP,L2TP+IPSec,SSL)

    (2)拓扑图

    (3)GRE模式 

    • Linux内核模块:ip_gre
    • 加载模块
    lsmod | grep ip_gre显示模块列表
    modprobe ip_gre加载模板
    modinfo ip_gre查看模块信息
    • 缺点:缺少加密机制

    2  创建VPN隧道

    (1)问题

    本案例要求搭建一个GRE VPN环境,并测试该VPN网络是否能够正常通讯,要求如下:

    • 启用内核模块ip_gre
    • 创建一个VPN隧道
    • 实现两台主机点到点的隧道通讯

    (2)方案

    使用lsmod查看当前计算机已经加载的模块,使用modprobe加载Linux内核模块,使用modinfo可以查看内核模块的信息。

    (3)步骤

    实现此案例需要按照如下步骤进行。

    步骤一:启用GRE模块

    1. 1)查看计算机当前加载的模块
    2. [root@web1 ~]# lsmod # 显示模块列表
    3. [root@web1 ~]# lsmod | grep ip_gre # 确定是否加载了gre模块
    4. 2)加载模块ip_gre
    5. [root@web1 ~]# modprobe ip_gre
    6. [root@web1 ~]# lsmod | grep ip_gre

    步骤二:web1主机创建VPN隧道

    1. 1)创建隧道
    2. [root@web1 ~]# ip tunnel add tun0 mode gre \
    3. > remote 192.168.99.200 local 192.168.99.100
    4. #ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助
    5. #mode设置隧道使用gre模式
    6. #local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址
    7. 2)启用该隧道(类似与设置网卡up
    8. [root@web1 ~]# ip add show tun0
    9. [root@web1 ~]# ip link set tun0 up #设置UP
    10. 3)为VPN配置隧道IP地址
    11. [root@web1 ~]# ip addr add 10.10.10.100/8 peer 10.10.10.200/8 dev tun0
    12. #为隧道tun0设置本地IP地址10.10.10.100/24
    13. #隧道对面的主机IP为10.10.10.200/24
    14. [root@web1 ~]# ip add show tun0 #查看IP地址

    步骤三:web2主机创建VPN隧道

    1. 1)加载模块ip_gre
    2. [root@web2 ~]# modprobe ip_gre
    3. [root@web2 ~]# lsmod | grep ip_gre
    4. 2)创建隧道
    5. [root@web2 ~]# ip tunnel add tun0 mode gre \
    6. > remote 192.168.99.100 local 192.168.99.200
    7. 3)启用该隧道
    8. [root@web2 ~]# ip add show tun0
    9. [root@web2 ~]# ip link set tun0 up #设置UP
    10. 4)为VPN配置隧道IP地址
    11. [root@web2 ~]# ip addr add 10.10.10.200/8 peer 10.10.10.100/8 dev tun0
    12. [root@web2 ~]# ip add show tun0 #查看IP地址
    13. 5)测试连通性
    14. [root@web1 ~]# ping 10.10.10.200
    15. [root@web2 ~]# ping 10.10.10.100

    3  L2TP+IPSec VPN

    (1)概述

    • Layer Two Tunneling Protocol (L2TP)
    • L2TP建立主机之间的VPN隧道,压缩、验证
    • IPSec提供数据加密、数据校验、访问控制的功能

    (2)拓扑图

    4  创建L2TP+IPSec VPN

    (1)问题

    本案例要求搭建一个L2TP+IPSec VPN环境,并测试该VPN网络是否能够正常通讯,具体要求如下:

    • 使用L2TP协议创建一个支持身份验证与加密的隧道连接
    • 使用IPSec对数据进行加密
    • 为客户端分配10.10.10.10的地址池
    • 客户端连接的用户名为:tom,密码为:123456
    • 预共享密钥为:randpass

    (2)方案

    使用web1作为服务端,windows10虚拟机作为客户端,首先要修改window10的ip为99网段,然后加入99网段的虚拟网络

    (3)步骤

    实现此案例需要按照如下步骤进行。

    步骤一:部署IPSec服务

    1. 1)安装
    2. [root@web1 vpn]# yum -y install libreswan # 安装加密工具
    3. [root@web1 vpn]# cp myipsec.conf /etc/ipsec.d/ # 复制配置IPSec密钥验证配置文件
    4. 到ipsec.d目录
    5. 2)配置
    6. [root@web1 vpn]# vim /etc/ipsec.d/myipsec.conf # 修改配置第16
    7. left=192.168.99.100 # 设置为本机ip(此处在真实环境为公网ip)
    8. [root@web1 vpn]# vim /etc/ipsec.secrets # 修改配置,添加加密信息
    9. 192.168.99.100 %any: PSK "randpass" # 另起一行,添加99.100是本机ip,%any:是允许任何客户机连接本服务器,PSK(pre share key)是预共享密钥,randpass是密码,等windows客户连接vpn服务器时需要该密码

    步骤二:安装vpn工具

    1. 1)安装
    2. [root@web1 vpn]#yum -y install ./xl2tpd-1.3.8-2.el7.x86_64.rpm
    3. [root@web1 vpn]#vim /etc/xl2tpd/xl2tpd.conf # 打开配置文件,3233
    4. ip range = 10.10.10.10-10.10.10.18 # 给客户分配的ip
    5. local ip = 192.168.99.100 # 本机ip
    6. 2)配置
    7. [root@web1 vpn]#vim /etc/ppp/options.xl2tpd # 修改配置文件,将第1016行注释掉,删除掉21行的#以及空格,就可以启用加密
    8. #crtscts # 注释该行
    9. #lock # 注释该行
    10. 3)创建账户
    11. [root@web1 vpn]#vim /etc/ppp/chap-secrets # 定义windows客户机的用户名和密码
    12. tom * 123456 * # 另起一行创建用户tom,配置密码123456
    13. 4)开启服务
    14. systemctl start ipsec # 开启加密服务
    15. ss -ntulp |grep :500 # 检查加密服务
    16. /usr/sbin/xl2tpd # 开启vpn服务
    17. ss -ntulp |grep xl2tpd # 检查加vpn服务
    18. 5)翻墙设置(非必需操作)
    19. [root@client ~]# echo "1" > /proc/sys/net/ipv4/ip_forward # 开启路由转发
    20. [root@client ~]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 \
    21. > -j SNAT --to-source 201.1.2.10

    步骤三:客户端设置

    1,启动一台Windows虚拟机,将虚拟机网卡桥接到99网段的虚拟网络,ip配置为99网段的即可

    2. 设置Windows注册表,具体操作如下:

    • 单击"开始",单击"运行",键入"regedit",然后单击"确定"
    • 找到下面的注册表子项,然后单击它:
    • HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services\Rasman\Parameters
    • 在"编辑"菜单上,单击"新建"->"DWORD值"
    • 在"名称"框中,键入"ProhibitIpSec"
    • 在"数值数据"框中,键入"1",然后单击"确定"
    • 退出注册表编辑器,然后重新启动计算机

    连接VPN并测试网络连通性,效果如图-1所示。

    最下面输入用户名tom 密码 123456。

    三  Systemd

    1  概述

    (1)systemd简介

    • systemd是Linux系统的一组基本构建块
    • 它提供了一个系统和服务管理器
    • 它作为PID1运行并启动系统的其余部分进程
    • 控制systemd的主要命令是systemctl

    (2)systemctl 命令

    2  Unit 文件

    (1)概述

    systemd管理服务时会读取对应的配置文件也就是unit文件

    读取Unit文件的目录(优先级由高到低)

    • /etc/systemd/system (设置了开机自启的Unit文件)
    • /usr/lib/systemd/system (所有已经安装软件的Unit文件)

    (2)文件范例

     (3)语法描述

    (4)应用案列 

            编写systemd Unit文件
    -  问题

    本案例要求熟练掌握systemd进程如何管理其他服务器,具体要求如下:

    • 熟悉systemctl常用命令
    • 通过systemd管理Nginx服务
    -  方案
    • Unit文件语法格式参考表
    -  步骤

    实现此案例需要按照如下步骤进行。

    步骤一:使用systemd管理shell脚本

    1. 1)编写shell脚本
    2. [root@web1 ~]# vim /root/test.sh
    3. #!/bin/bash
    4. while :
    5. do
    6. echo NB
    7. echo DACHUI
    8. sleep 1
    9. done
    10. [root@web1 ~]# chmod +x /root/test.sh
    11. 2)编写Unit文件
    12. [root@web1 ~]# cp /usr/lib/systemd/system/{crond.service,test.service}
    13. [root@web1 ~]# vim /usr/lib/systemd/system/test.service
    14. [Unit]
    15. Description=my test script
    16. After=time-sync.target
    17. [Service]
    18. ExecStart=/root/test.sh
    19. ExecReload=/bin/kill -HUP $MAINPID
    20. KillMode=process
    21. [Install]
    22. WantedBy=multi-user.target

    步骤二:使用systemd管理Nginx服务

    1. 编写Unit文件
    2. [root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
    3. [Unit]
    4. Description=The Nginx HTTP Server #描述信息
    5. After=network.target remote-fs.target nss-lookup.target
    6. [Service]
    7. Type=forking
    8. #仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
    9. ExecStart=/usr/local/nginx/sbin/nginx
    10. ExecReload=/usr/local/nginx/sbin/nginx -s reload
    11. ExecStop=/bin/kill -s QUIT $MAINPID
    12. [Install]
    13. WantedBy=multi-user.target

  • 相关阅读:
    23062QTday1
    【AI新趋势期刊#1】GPT自动理解视频、AI法律顾问、大模型安全围栏
    2022下半年软件评测师真题评析
    ps 命令 快捷键 知识点汇总
    C# 读写TXT文件
    服务器制作RAID磁盘阵列并管理
    未来趋势:探索Facebook在数字化时代的发展方向
    基站天线交叉极化比测量的不确定度评定
    【EKF】EKF原理
    ViewPager2 使用
  • 原文地址:https://blog.csdn.net/2301_79227925/article/details/132630785