分类 软件 下的文章

修改boot.wim

  1. 获取wim索引信息

    D:\windows_7>dism /Get-ImageInfo /imagefile:src\sources\boot.wim
    
    部署映像服务和管理工具
    版本: 10.0.17763.5830
    
    映像详细信息: src\sources\boot.wim
    
    索引: 1
    名称: Microsoft Windows PE (x64)
    描述: Microsoft Windows PE (x64)
    大小: 1,158,437,921 字节
    
    索引: 2
    名称: Microsoft Windows Setup (x64)
    描述: Microsoft Windows Setup (x64)
    大小: 1,257,727,060 字节
    
    操作成功完成。
  2. 挂载boot.wim第一个映像

    D:\windows_7>dism /Mount-Image /ImageFile:src\sources\boot.wim /Index:1 /MountDir:"mount"
    
    部署映像服务和管理工具
    版本: 10.0.17763.5830
    
    正在安装映像
    [==========================100.0%==========================]
    操作成功完成。
    

    /MountDir:"mount":挂载到当前工作目录下的mount文件夹。

  3. 添加NVMe支持

    D:\windows_7>dism /Image:"mount" /Add-Package /PackagePath:nvme\hotfix
    
    部署映像服务和管理工具
    版本: 10.0.17763.5830
    
    映像版本: 6.1.7601.17514
    
    正在处理 1 (共 2) - 正在添加程序包 D:\windows_7\nvme\hotfix\Windows6.1-KB2990941-v3-x64.msu
    [==========================100.0%==========================]
    正在处理 2 (共 2) - 正在添加程序包 D:\windows_7\nvme\hotfix\Windows6.1-KB3087873-v2-x64.msu
    [===========================99.6%========================= ]
    操作成功完成。
    
    D:\windows_7>dism /Image:mount /Add-Driver /Driver:nvme /Recurse /ForceUnsigned
    
    部署映像服务和管理工具
    版本: 10.0.17763.5830
    
    映像版本: 6.1.7601.17514
    
    正在搜索要安装的驱动程序包...
    找到 2 个要安装的驱动程序包。
    正在安装第 1 个,共有 2 个 - D:\windows_7\nvme\intel\IaNVMe.inf: 驱动程序包已成功安装。
    正在安装第 2 个,共有 2 个 - D:\windows_7\nvme\samsung\secnvme.inf: 驱动程序包已成功安装。
    操作成功完成。
    

    /Driver:nvme:加载当前工作目录下nvme目录下的驱动程序。

  4. 添加USB3.1驱动

    D:\windows_7>dism /Image:mount /Add-Driver /Driver:usb /Recurse /ForceUnsigned
    
    部署映像服务和管理工具
    版本: 10.0.17763.5830
    
    映像版本: 6.1.7601.17514
    
    正在搜索要安装的驱动程序包...
    找到 13 个要安装的驱动程序包。
    正在安装第 1 个,共有 13 个 - D:\windows_7\usb\amd\bolton\amdhub\amdhub30.inf: 驱动程序包已成功安装。
    正在安装第 2 个,共有 13 个 - D:\windows_7\usb\amd\bolton\amdxhc\amdxhc.inf: 驱动程序包已成功安装。
    正在安装第 3 个,共有 13 个 - D:\windows_7\usb\amd\usb30_zp\amdhub\amdhub3.INF: 驱动程序包已成功安装。
    正在安装第 4 个,共有 13 个 - D:\windows_7\usb\amd\usb30_zp\amdxhc\amdxhc.INF: 驱动程序包已成功安装。
    正在安装第 5 个,共有 13 个 - D:\windows_7\usb\amd\usb31_pt\amdhub\amdhub31.INF: 驱动程序包已成功安装。
    正在安装第 6 个,共有 13 个 - D:\windows_7\usb\amd\usb31_pt\amdxhc\amdxhc31.INF: 驱动程序包已成功安装。
    正在安装第 7 个,共有 13 个 - D:\windows_7\usb\asmedia\asmthub3.inf: 驱动程序包已成功安装。
    正在安装第 8 个,共有 13 个 - D:\windows_7\usb\asmedia\asmtxhci.inf: 驱动程序包已成功安装。
    正在安装第 9 个,共有 13 个 - D:\windows_7\usb\atheros\USBController\ausb3xhc.inf: 驱动程序包已成功安装。
    正在安装第 10 个,共有 13 个 - D:\windows_7\usb\atheros\USBHub\ausb3hub.inf: 驱动程序包已成功安装。
    正在安装第 11 个,共有 13 个 - D:\windows_7\usb\intel\HCSwitch\iusb3hcs.inf: 驱动程序包已成功安装。
    正在安装第 12 个,共有 13 个 - D:\windows_7\usb\intel\Win7\iusb3hub.inf: 驱动程序包已成功安装。
    正在安装第 13 个,共有 13 个 - D:\windows_7\usb\intel\Win7\iusb3xhc.inf: 驱动程序包已成功安装。
    操作成功完成。
    
  5. 验证并提交

    D:\windows_7>dism /Unmount-Image /MountDir:"mount" /Commit
    
    部署映像服务和管理工具
    版本: 10.0.17763.5830
    
    正在保存映像
    [==========================100.0%==========================]
    正在卸载映像
    [==========================100.0%==========================]
    操作成功完成。
    
  6. 挂载boot.wim第二个映像

    D:\windows_7>dism /Mount-Image /ImageFile:src\sources\boot.wim /Index:2 /MountDir:"mount"
  7. 添加NVMe支持

    D:\windows_7>dism /Image:"mount" /Add-Package /PackagePath:nvme\hotfix
    D:\windows_7>dism /Image:mount /Add-Driver /Driver:nvme /Recurse /ForceUnsigned
  8. 添加USB3.1驱动

    D:\windows_7>dism /Image:mount /Add-Driver /Driver:usb /Recurse /ForceUnsigned
  9. 更新补丁文件

    将mount\sources目录内文件按修改时间排序,将最新修改的58个文件(arunres.dll、autorun.dll...xmllite.dll)复制到src/sources目录内。

  10. 验证并提交

    D:\windows_7>dism /Unmount-Image /MountDir:"mount" /Commit

修改install.wim

  1. 挂载WIM映像

    D:\windows_7>dism /Mount-Image /ImageFile:src\sources\install.wim /Index:1 /MountDir:"mount"
  2. 添加NVMe支持

    D:\windows_7>dism /Image:"mount" /Add-Package /PackagePath:nvme\hotfix
    D:\windows_7>dism /Image:mount /Add-Driver /Driver:nvme /Recurse /ForceUnsigned
  3. 添加USB3.1驱动

    D:\windows_7>dism /Image:mount /Add-Driver /Driver:usb /Recurse /ForceUnsigned
  4. 验证并提交

    D:\windows_7>dism /Unmount-Image /MountDir:"mount" /Commit

打包镜像

  • Legacy BIOS启动

    D:\windows_7>oscdimg\amd64\oscdimg -LGSP1RMCPRXVOL_CN_DVD -m -u2 -boscdimg\amd64\etfsboot.com src cn_windows_7_professional_with_sp2_vl_build_x64_dvd.iso
  • Legacy和UEFI BIOS启动

    复制efi\boot\bootx64.efi到src\efi\boot\bootx64.efi。

    D:\windows_7>oscdimg\amd64\oscdimg -LGSP1RMCPRXVOL_CN_DVD -h -m -o -u2 -udfver102 -bootdata:2#p0,e,boscdimg\amd64\etfsboot.com#pEF,e,boscdimg\amd64\efisys.bin src cn_windows_7_professional_with_sp2_vl_build_x64_dvd.iso
    • -h:包含隐藏文件。
    • -m:忽略最大大小限制。
    • -o:优化存储(重复文件只存一份)。
    • -u2 -udfver102:生成UDF文件系统(版本1.02),UEFI搭配efisys.bin需要UDF支持。
    • -bootdata:2:创建多引导(multi-boot)镜像,2为引导条目数量。
    • #p0,e,boscdimg\amd64\etfsboot.com:第1条引导条目:p0指定平台ID为BIOS(0x00),e表示禁用软驱,b指定BIOS引导文件。
    • #pEF,e,boscdimg\amd64\efisys.bin:第2条引导条目:pEF指向平台ID为UEFI(0xEF),b指向UEFI引导文件,除了需要添加UEFI引导,还必须添加efi\boot\bootx64.efi。
  • 不带引导的打包镜像(可忽略)

    D:\windows_7>cdimage.exe -lGSP1RMCPRXVOL_CN_DVD -t08/28/2026,10:00:00 -g -h -n -o -m src cn_windows_7_professional_with_sp2_vl_build_x64_dvd.iso

项目地址:https://www.github.com/henrygd/beszel

安装Hub

  1. 测试运行beszel hub

    [root@ecs ~]# cd /usr/local/beszel
    [root@ecs beszel]# chmod a+x beszel
    [root@ecs beszel]# ./beszel serve --http 0.0.0.0:8090
    2026/08/29 11:03:09 Server started at http://0.0.0.0:8090
    ├─ REST API:  http://0.0.0.0:8090/api/
    └─ Dashboard: http://0.0.0.0:8090/_

    Server started at http://0.0.0.0:8090表明beszel hub已经启动成功,ctrl + c结束进程,以便接下来通过服务方式启动。

  2. 注册服务

    [root@ecs ~]# cat > /etc/systemd/system/beszel.service << EOF
    [Unit]
    Description=Beszel Hub
    After=network.target
    
    [Service]
    Type=simple
    Restart=always
    RestartSec=3
    User=root
    WorkingDirectory=/usr/local/beszel
    ExecStart=/usr/local/beszel/beszel serve --http "0.0.0.0:8090"
    
    [Install]
    WantedBy=multi-user.target
    EOF
  3. 启动服务

    [root@ecs ~]# systemctl enable --now beszel

    测试访问:http://192.168.1.100:8090/

反向代理

  • nginx

    http {
        server {
            listen 80;
            server_name beszel.dev.wiseidc.com;
        
            location / {
                proxy_pass http://127.0.0.1:8090;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
            }
        }
    }

    必须设置Upgrade,否则Windows客户端WebSocket连接会失败,报400错误。

添加agent

  1. hub端添加系统

    登录beszel hub端,点击右上角的“添加系统”,弹出“添加系统”对话框,切换到“二进制”标签页,填写“名称”和“主机/IP”,“公钥”和“令牌”会自动生成,接下来的步骤要用到。

    添加系统

  2. agent端测试运行beszel agent

    [root@ecs ~]# cd /usr/local/beszel
    [root@ecs beszel]# chmod a+x beszel-agent
    [root@ecs beszel]# ./beszel-agent -key "<公钥>" -token "<令牌>" -url "http://beszel.dev.wiseidc.com"
    • -key:为第一步获取的公钥。
    • -token:为第一步获取的令牌。
    • http://beszel.dev.wiseidc.com:是做了反向代理的域名地址,也可以使用IP:45876
    • 当配置了url或HUB_URL后,agent会主动连接hub(WebSocket),这种方式数据传输是实时双向的,性能更好。这种方式要求hub必须处于公网环境(或做内网穿透)。在没做反向代理的情况下,必须开放hub的8090端口。
    • 当去掉url或HUB_URL后,hub会主动连接agent(ssh),这种方式数据传输采用轮训模式,开销较大。这种方式要求agent必须处于公网环境且开放45876端口。
  3. 注册服务

    [root@ecs ~]# cat > /etc/systemd/system/beszel-agent.service << EOF
    [Unit]
    Description=Beszel Agent Service
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    ExecStart=/usr/local/beszel/beszel-agent
    Environment="LISTEN=45876"
    Environment="KEY=<公钥>"
    Environment="TOKEN=<令牌>"
    Environment="HUB_URL=http://beszel.dev.wiseidc.com"
    Restart=on-failure
    RestartSec=5
    StateDirectory=beszel-agent
    
    KeyringMode=private
    LockPersonality=yes
    NoNewPrivileges=yes
    PrivateTmp=yes
    ProtectClock=yes
    ProtectHome=read-only
    ProtectHostname=yes
    ProtectKernelLogs=yes
    ProtectSystem=strict
    RemoveIPC=yes
    RestrictSUIDSGID=true
    
    [Install]
    WantedBy=multi-user.target
    EOF

    Windows

    C:\Users\Administrator>beszel-agent -listen 45876 -key "公钥" -token "令牌" -url "http://beszel.dev.wiseidc.com"

    bat脚本:

    @echo off
    
    nssm install BeszelAgent "C:\beszel\beszel-agent.exe"
    nssm set BeszelAgent AppDirectory "C:\beszel"
    nssm set BeszelAgent AppParameters "-listen 45876 -key ""<公钥>"" -token ""<令牌>"" -url ""http://beszel.dev.wiseidc.com"""
    nssm set BeszelAgent AppStdout "C:\beszel\logs\out.log"
    nssm set BeszelAgent AppStderr "C:\beszel\logs\error.log"
    nssm set BeszelAgent Start SERVICE_AUTO_START
    nssm set BeszelAgent AppExit Default Restart
    
    nssm start BeszelAgent

    nssm命令:

    命令说明
    nssm restart BeszelAgent重启BeszelAgent服务
    nssm stop BeszelAgent停止BeszelAgent服务
    nssm remove BeszelAgent删除BeszelAgent服务
    nssm edit BeszelAgent修改BeszelAgent服务
  4. 启动服务

    [root@ecs ~]# systemctl enable --now beszel-agent

告警

  1. 配置通知

    点击hub web管理界面右上角的“设置”(齿轮图标)按钮,打开“设置”界面,切换到“通知”页面。

    beszel设置

    • 电子邮件通知

      1. 点击“配置SMTP服务器”,打开PocketBase登录界面(beszel基于PocketBase开发),输入管理员账号和密码,进入后台管理。
      2. 点击“Settings”,进入“System”管理页面,切换到“Mail settings”页面。

        邮件设置

        • Sender name:麦思
        • Sender address:yclyk@qq.com
        • 开启“Use SMTP mail server”
        • SMTP server host:smtp.qq.com
        • Port:465
        • Username:yclyk@qq.com
        • Password:
        • TLS encryption:Always

        配置完之后,点击“Send test email”,如果收到测试邮件则表明SMTP配置成功了。

    • 企业微信通知

      点击Webhook / 推送通知后面的“添加 URL”按钮,输入企业微信webhook地址(格式为:wecom://<key>,key到企业微信机器人中获取)。

      Webhook

      点击“测试URL”,如果收到企业微信的推送消息则表明Webhook配置成功了。

  2. 配置告警规则

    1. 进入Beszel管理页面,点击客户端列表最后的“铃铛”图标,弹出告警规则设置页面。

    Beszel客户端管理

    1. 设置硬盘容量小于80%则告警,且10分钟不重复告警。

    告警设置

安装

CentOS 7.9

源码安装

  1. 安装apr

    [root@ecs ~]# yum install -y bzip2 gcc
    [root@ecs ~]# cd /usr/local/src && tar -jxvf apr-1.7.6.tar.bz2 && cd apr-1.7.6
    [root@ecs apr-1.7.6]# ./configure --prefix=/usr/local/apr
    [root@ecs apr-1.7.6]# make && make install
  2. 安装apr-util

    [root@ecs ~]# yum install -y expat-devel
    [root@ecs ~]# cd /usr/local/src && tar -jxvf apr-util-1.6.5.tar.bz2 && cd apr-util-1.6.5
    [root@ecs apr-util-1.6.5]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    [root@ecs apr-util-1.6.5]# make && make install
    • apr-util(Apache Portable Runtime Utility)从1.6.0开始依赖Expat库(xml解析器)。
    • apr-util从1.6.0开始要求gcc不能低于5.0(必须支持__has_attribute ),而CentOS 7.9默认gcc版本为4.8.5,因此必须升级gcc,否则只能安装1.6以下的版本(最高版本1.5.4)。

    安装apr-util 1.5.4

    [root@ecs ~]# cd /usr/local/src && tar -jxvf apr-util-1.5.4.tar.bz2 && cd apr-util-1.5.4
    [root@ecs apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
    [root@ecs apr-util-1.5.4]# make && make install
  3. 安装pcre

    [root@ecs ~]# yum install -y gcc-c++
    [root@ecs ~]# cd /usr/local/src && tar -jxvf pcre-8.45.tar.bz2 && cd pcre-8.45
    [root@ecs pcre-8.45]# ./configure --prefix=/usr/local/pcre
    [root@ecs pcre-8.45]# make && make install
    [root@ecs pcre-8.45]# echo "export PATH=\$PATH:/usr/local/pcre/bin" >> /etc/profile
    [root@ecs pcre-8.45]# source /etc/profile

    需要将pcre加入PATH环境变量,否则编译apache时会因找不到pcre-config而报错:configure: error: Did not find working script at pcre-config

    pcre已停止维护,最后一个版本为8.45,2015年发布了新构版本pcre2,pcre2当前最新版为10.47。

  4. 安装openssl

    [root@ecs ~]# yum install -y perl perl-IPC-Cmd perl-Time-Piece
    [root@ecs ~]# cd /usr/local/src && tar xzvf openssl-3.5.7.tar.gz && cd openssl-3.5.7
    [root@ecs openssl-3.5.7]# ./config --prefix=/usr/local/openssl -fPIC no-gost
    [root@ecs openssl-3.5.7]# make depend && make install

    OpenSSL在3.0.0之前,版本格式为主版本.次版本.补丁版本[字母],字母代表补丁级别。如1.0.2表示1.0.2系列的首个版本,1.0.2q则表示1.0.2系列的第17个补丁版本。从3.0.0开始改为标准语义化版本,即Major(主版本).Minor(次版本).Patch(补丁版本)

    3.5系列为LTS版,此系列当前(2026年8月)最高版为:3.5.7,3.0之前的最高版为:1.1.1w。

    OpenSSL 3.0之前仅依赖perl,从3.0开始除了依赖perl,还依赖IPC::Cmd和Time::Piece模块,因此必须安装perl-IPC-Cmd和perl-Time-Piece。

    查看是否支持perl IPC::Cmd模块:perl -MIPC::Cmd -e 'print "success\n"'

  5. 安装apache

    [root@ecs ~]# cd /usr/local/src && tar -xvf httpd-2.4.68.tar.bz2 && cd httpd-2.4.68
    [root@ecs httpd-2.4.68]# ./configure --prefix=/usr/local/apache \
    --with-apr=/usr/local/apr \
    --with-apr-util=/usr/local/apr-util \
    --with-pcre=/usr/local/pcre \
    --enable-mods-shared=most \
    --enable-rewrite \
    --enable-ssl \
    --with-ssl=/usr/local/openssl \
    --enable-mpms-shared=all \
    --enable-dav
    [root@ecs httpd-2.4.68]# make && make install
    [root@ecs httpd-2.4.68]# echo "export PATH=\$PATH:/usr/local/apache/bin" >> /etc/profile
    [root@ecs httpd-2.4.68]# source /etc/profile
    • --enable-dav启用dav模块,可以通过dav管理svn。
    • --enable-mpms-shared=all会在modules目录下生成mod_mpm_prefork.somod_mpm_worker.somod_mpm_event.so三个模块文件,可在httpd.conf中通过LoadModule切换MPM(默认为event模式,查看mpm模式:apachectl -V | grep -i mpm)。
      也可在编译时使用--with-mpm=指定MPM模式,有效值:preforkworkerevent,编译后不可切换。

    如果使用yum方式安装apr、apr-util、pcre和openssl等依赖,则需要调整--with-apr、--with-apr-util、--with-pcre和--with-ssl的参数值:

    [root@ecs ~]# yum install -y apr-devel apr-util-devel pcre-devel openssl-devel \
    bzip2 gcc
    [root@ecs ~]# cd /usr/local/src && tar -xvf httpd-2.4.68.tar.bz2 && cd httpd-2.4.68
    [root@ecs httpd-2.4.68]# ./configure --prefix=/usr/local/apache \
    --with-apr=/usr \
    --with-apr-util=/usr \
    --with-pcre \
    --enable-mods-shared=most \
    --enable-rewrite \
    --enable-ssl \
    --with-ssl \
    --enable-mpms-shared=all \
    --enable-dav
    [root@ecs httpd-2.4.68]# make && make install
    [root@ecs httpd-2.4.68]# echo "export PATH=\$PATH:/usr/local/apache/bin" >> /etc/profile
    [root@ecs httpd-2.4.68]# source /etc/profile
  6. 注册服务

    [root@ecs ~]# cp -f /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
    [root@ecs ~]# sed -i '/#!\/bin\/sh/a\# description: Activates/Deactivates Apache Web Server' /etc/rc.d/init.d/httpd
    [root@ecs ~]# sed -i '/#!\/bin\/sh/a\# chkconfig: 2345 50 90' /etc/rc.d/init.d/httpd

    或者:

    [root@ecs ~]# cat > /usr/lib/systemd/system/httpd.service <<EOF
    [Unit]
    Description=The Apache HTTP Server
    After=network.target remote-fs.target nss-lookup.target
    Documentation=man:httpd(8)
    Documentation=man:apachectl(8)
    
    [Service]
    Type=forking
    PIDFile=/usr/local/apache/logs/httpd.pid
    ExecStart=/usr/local/apache/bin/apachectl -k start
    ExecReload=/usr/local/apache/bin/apachectl -k graceful
    ExecStop=/usr/local/apache/bin/apachectl -k stop
    PrivateTmp=true
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    EOF
    • 源码apache默认是后台守护进程,因此用Type=forking
    • PrivateTmp=true为服务提供隔离的私有文件。
  7. 开启服务并设置开机自启动

    [root@ecs ~]# systemctl enable --now httpd
  8. 防火墙放行端口

    [root@ecs ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
    [root@ecs ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent
    [root@ecs ~]# firewall-cmd --reload
  9. 配置apache

    [root@ecs ~]# groupadd www
    [root@ecs ~]# useradd -s /sbin/nologin www -g www
    [root@ecs ~]# sed -i -e "s/^#LoadModule rewrite_module/LoadModule rewrite_module/" \
    -e "/^User/cUser www" \
    -e "/^Group/cGroup www" \
    -e "/^#ServerName/cServerName localhost:80" \
    -e "s/DirectoryIndex index.html/DirectoryIndex index.html index.php/" \
    -e "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" \
    -e '0,/AllowOverride none/s/AllowOverride none/AllowOverride all/' \
    /usr/local/apache/conf/httpd.conf

    自动安装脚本apache.sh

yum安装

  1. 安装httpd

    [root@ecs ~]# yum install -y httpd
  2. 常见目录说明

    目录说明
    /etc/httpd/conf/httpd.conf主配置文件
    /etc/httpd/conf.d配置片段,会被主配置文件包含
    /etc/httpd/conf.modules.d/模块加载配置
    /var/www/html/网站根目录
    /var/log/httpd/日志目录
    /usr/sbin/httpdapache主程序文件
    /usr/lib64/httpd/modules/模块目录

安装

CentOS 7.9

  1. 安装依赖

    [root@ecs ~]# yum install -y gcc pcre-devel openssl-devel
  2. 安装nginx

    [root@ecs ~]# groupadd www && useradd -g www www -s /sbin/nologin
    [root@ecs ~]# cd /usr/local/src
    [root@ecs src]# tar -zxvf nginx-1.30.1.tar.gz && cd nginx-1.30.1
    [root@ecs src]# ./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-http_gzip_static_module \
    --user=www --group=www
    [root@ecs src]# make && make install
    • nginx安装时依赖pcre、openssl和zlib模块。使用yum install -y pcre-devel openssl-devel安装这3个模块(安装openssl-devel会安装依赖zlib-devel),nginx会自动查找依赖模块。
    • 如果不想安装这些依赖模块,可以使用--with-pcre=--with-openssl=--with-zlib=指定模块源码路径。

    模块说明:

    模块说明
    pcre提供正则表达式支持,rewrite模块依赖PCRE库,编译pcre依赖gcc-c++。
    下载地址:https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.bz2/download
    openssl--with-http_ssl_module启用ssl模块,依赖openssl。
    下载地址:https://www.openssl.org/source/openssl-1.1.1v.tar.gz
    zlib文件压缩和解压缩的库,使用zlib对http数据包进行gzip压缩和解压缩。
    下载地址:https://zlib.net/fossils/zlib-1.3.1.tar.gz

    模块源码安装

    [root@ecs ~]# yum install -y bzip2 gcc-c++
    [root@ecs ~]# cd /usr/local/src
    [root@ecs src]# tar -jxvf pcre-8.45.tar.bz2
    [root@ecs src]# tar -zxvf openssl-1.1.1v.tar.gz
    [root@ecs src]# tar -zxvf zlib-1.3.1.tar.gz
    [root@ecs src]# groupadd www && useradd -g www www -s /sbin/nologin
    [root@ecs src]# tar -zxvf nginx-1.30.4.tar.gz && cd nginx-1.30.4
    [root@ecs src]# ./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-http_gzip_static_module \
    --with-pcre=/usr/local/src/pcre-8.45 \
    --with-zlib=/usr/local/src/zlib-1.3.1 \
    --with-openssl=/usr/local/src/openssl-1.1.1v \
    --user=www --group=www
    [root@ecs src]# make && make install
  3. 开放防火墙端口

    [root@ecs ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
    [root@ecs ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent
    [root@ecs ~]# firewall-cmd --reload
  4. 开机自启动

    [root@ecs ~]# sed -i '/#pid/apid logs/nginx.pid;' /usr/local/nginx/conf/nginx.conf
    [root@ecs ~]# cat > /usr/lib/systemd/system/nginx.service <<EOF
    [Unit]
    Description=The nginx HTTP and reverse proxy server
    After=network-online.target remote-fs.target nss-lookup.target
    Wants=network-online.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    KillSignal=SIGQUIT
    TimeoutStopSec=5
    KillMode=process
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    EOF
    [root@ecs ~]# chmod a+x /usr/lib/systemd/system/nginx.service
    [root@ecs ~]# systemctl enable --now nginx
  5. 设置虚拟主机

    [root@ecs ~]# mkdir -p /usr/local/nginx/conf/conf.d
    [root@ecs ~]# sed -i '/^http {$/,/^}$/ {
    /^}$/ i\    include /usr/local/nginx/conf/conf.d/*.conf;
    }' /usr/local/nginx/conf/nginx.conf
    [root@ecs ~]# mkdir -p /data/{wwwroot,wwwlog}
    [root@ecs ~]# cat > /usr/local/nginx/conf/conf.d/wiseidc.conf <<EOF
    log_format wiseidc '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
    
    server {
        listen 80;
        server_name wiseidc.com www.wiseidc.com;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/wiseidc.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/wiseidc.com/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
    
        server_name wiseidc.com www.wiseidc.com;
        
        root /data/wwwroot/wiseidc;
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
        client_max_body_size 2M;
        location ~ .*\.(php|php5)?$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
            expires 30d;
        }
        location ~ .*\.(js|css)?$ {
            expires 12h;
        }
        location / {
            index index.html index.htm index.php;
            if (!-e $request_filename) {
                rewrite ^(.*)$ /index.php/$1 last;
                break;
            }
            if (!-e $request_filename) {
                rewrite ^/index.php/(.*)$ /index.php?$1 last;
                break;
            }
        }
    
        access_log /data/wwwlog/wiseidc.log wiseidc;
    }
    EOF
    • /^http {$/,/^}$/:匹配第一个http {所在行到第一个}所在行之间的所有行。
    • /A/,/B/ {}:对A到B范围内的行执行{}内的命令。
    • /^}$/ i\:在}所在行前插入。
  6. 禁止IP访问

    [root@ecs ~]# sed -i '/^[[:space:]]*server[[:space:]]*{/i\
        server {\
            listen 80;\
            server_name localhost;\
            deny all;\
        }\
    ' /usr/local/nginx/conf/nginx.conf

    或者:

    [root@ecs ~]# sed -i '0,/server_name  localhost;/{
    /localhost;$/a\        deny all;
    }' /usr/local/nginx/conf/nginx.conf
  7. 部署网站

    [root@ecs wwwroot]# scp root@172.22.159.123:/data/wwwroot/wiseidc.tar.gz /data/wwwroot/
    [root@ecs wwwroot]# tar -zxvf wiseidc.tar.gz
    [root@ecs wwwroot]# chown -R www:www /data/wwwroot/wiseidc
    [root@ecs wwwroot]# chmod -R 550 /data/wwwroot/wiseidc
    [root@ecs wwwroot]# cd /data/wwwroot/wiseidc
    [root@ecs wiseidc]# chmod -R 770 index.html caches/ uploadfile/ phpsso_server/
    [root@ecs wiseidc]# echo "open_basedir=/data/wwwroot/wiseidc/:/tmp/" >> .user.ini
    [root@ecs wiseidc]# chattr +i .user.ini

Ubuntu

apt安装

  1. 安装nginx

    maisi@ecs:~$ apt-get install nginx
    maisi@ecs:~$ nginx -v
    nginx version: nginx/1.18.0 (Ubuntu)
  2. 启动nginx

    maisi@ecs:~$ systemctl enable --now nginx
    maisi@ecs:~$ systemctl status nginx
  3. 防火墙放行端口

    maisi@ecs:~$ sudo ufw allow 80/tcp
    maisi@ecs:~$ sudo ufw allow 443/tcp

    或者:

    maisi@ecs:~$ sudo sudo ufw allow http
    maisi@ecs:~$ sudo sudo ufw allow https
  4. 常见目录说明

    路径说明
    /usr/sbin/nginx主程序
    /etc/nginx存放配置文件
    /usr/share/nginx存放静态文件
    /var/log/nginx存放日志

源码编译安装

  1. 安装依赖

    maisi@ecs:~$ apt-get install make gcc zlib1g-dev libpcre3-dev libssl-dev

    Ubuntu 26.04

    maisi@ecs:~$ apt install zlib1g-dev libpcre2-dev libssl-dev
  2. 编译nginx

    maisi@ecs:~$ groupadd www
    maisi@ecs:~$ useradd -g www www -s /sbin/nologin
    maisi@ecs:~$ cd /usr/local/src && tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0
    maisi@ecs:/usr/local/src/nginx-1.24.0$ ./configure --prefix=/usr/local/nginx \
    --with-http_stub_status_module \
    --with-http_gzip_static_module \
    --with-http_ssl_module \
    --user=www --group=www
    maisi@ecs:/usr/local/src/nginx-1.24.0$ make && sudo make install

    nginx安装时依赖pcreopensslzlib模块。使用apt-get安装依赖之后,则无需使用--with-pcre=--with-openssl=--with-zlib=指定模块源码路径。

    Ubuntu 26.04

    root@ecs:~# cd /usr/local/src
    root@ecs:/usr/local/src# tar -jxvf pcre-8.45.tar.bz2
    root@ecs:/usr/local/src# tar -zxvf zlib-1.3.2.tar.gz
    root@ecs:/usr/local/src# tar -zxvf openssl-3.5.7.tar.gz
    root@ecs:/usr/local/src# groupadd www && useradd -g www www -s /sbin/nologin
    root@ecs:/usr/local/src# tar -zxvf nginx-1.30.4.tar.gz && cd nginx-1.30.4
    root@ecs:/usr/local/src/nginx-1.30.4# ./configure --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-http_gzip_static_module \
    --with-pcre=/usr/local/src/pcre-8.45 \
    --with-zlib=/usr/local/src/zlib-1.3.2 \
    --with-openssl=/usr/local/src/openssl-3.5.7 \
    --user=www --group=www
    root@ecs:/usr/local/src/nginx-1.30.4# make && make install
  3. 启动nginx

    maisi@ecs:~$ sudo /usr/local/nginx/sbin/nginx

    查看进程

    maisi@ecs:~$ ps -ef | grep nginx
  4. 关闭nginx

    maisi@ecs:~$ sudo /usr/local/nginx/sbin/nginx -s stop
  5. 开启自启动

    maisi@ecs:~$ cat > /etc/systemd/system/nginx.service <<EOF
    [Unit]
    Description=The nginx HTTP and reverse proxy server
    After=network.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s quit
    
    [Install]
    WantedBy=multi-user.target
    EOF
    maisi@ecs:~$ chown root:root /etc/systemd/system/nginx.service
    maisi@ecs:~$ chmod a+x /etc/systemd/system/nginx.service
    maisi@ecs:~$ systemctl enable --now nginx

Windows

配置

模块