web服务解析案例

题目

模拟一个基于 DNS(域名系统)和 Nginx 的 Web 服务架构。

整体是模拟从用户输入域名,经 DNS 解析找到 Web 服务器,再由 Web 服务器(Nginx)提供内容的完整 Web 服务流程。

主机规划

主机名ip地址软件说明
dns192.168.30.11bind用于dns解析
nginx192.168.30.10nginx为用户提供web访问相关服务

架构图

请添加图片描述

配置DNS

改服务器名称&ip

(可改可不改)

[root@tomcat1 ~]# hostnamectl hostname dns
[root@tomcat1 ~]# exit

安装bind

[root@dns ~]# dnf install bind -y
Updating Subscription Management repositories.
Unable to read consumer identityThis system is not registered with an entitlement server. You can use subscription-manager to register.Last metadata expiration check: 1 day, 18:52:48 ago on Sun 14 Sep 2025 06:32:32 PM CST.
Dependencies resolved.
====================================================================================Package                Arch        Version                     Repository     Size
====================================================================================
Installing:bind                   x86_64      32:9.16.23-14.el9_3         appSteam      506 k
Installing dependencies:bind-dnssec-doc        noarch      32:9.16.23-14.el9_3         appSteam       48 kbind-libs              x86_64      32:9.16.23-14.el9_3         appSteam      1.2 Mbind-license           noarch      32:9.16.23-14.el9_3         appSteam       13 kfstrm                  x86_64      0.6.1-3.el9                 appSteam       30 klibmaxminddb           x86_64      1.5.2-3.el9                 appSteam       36 klibuv                  x86_64      1:1.42.0-1.el9              appSteam      153 kprotobuf-c             x86_64      1.3.3-13.el9                baseOS         37 kpython3-bind           noarch      32:9.16.23-14.el9_3         appSteam       71 kpython3-ply            noarch      3.11-14.el9                 baseOS        111 k
Installing weak dependencies:bind-dnssec-utils      x86_64      32:9.16.23-14.el9_3         appSteam      119 kbind-utils             x86_64      32:9.16.23-14.el9_3         appSteam      211 kTransaction Summary
====================================================================================
Install  12 PackagesTotal size: 2.5 M
Installed size: 7.2 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transactionPreparing        :                                                            1/1 Installing       : bind-license-32:9.16.23-14.el9_3.noarch                   1/12 Installing       : protobuf-c-1.3.3-13.el9.x86_64                            2/12 Installing       : libuv-1:1.42.0-1.el9.x86_64                               3/12 Installing       : libmaxminddb-1.5.2-3.el9.x86_64                           4/12 Installing       : fstrm-0.6.1-3.el9.x86_64                                  5/12 Installing       : bind-libs-32:9.16.23-14.el9_3.x86_64                      6/12 Installing       : bind-utils-32:9.16.23-14.el9_3.x86_64                     7/12 Installing       : bind-dnssec-doc-32:9.16.23-14.el9_3.noarch                8/12 Installing       : python3-ply-3.11-14.el9.noarch                            9/12 Installing       : python3-bind-32:9.16.23-14.el9_3.noarch                  10/12 Installing       : bind-dnssec-utils-32:9.16.23-14.el9_3.x86_64             11/12 Running scriptlet: bind-32:9.16.23-14.el9_3.x86_64                          12/12 Installing       : bind-32:9.16.23-14.el9_3.x86_64                          12/12 Running scriptlet: bind-32:9.16.23-14.el9_3.x86_64                          12/12 Verifying        : protobuf-c-1.3.3-13.el9.x86_64                            1/12 Verifying        : python3-ply-3.11-14.el9.noarch                            2/12 Verifying        : bind-32:9.16.23-14.el9_3.x86_64                           3/12 Verifying        : bind-dnssec-doc-32:9.16.23-14.el9_3.noarch                4/12 Verifying        : bind-dnssec-utils-32:9.16.23-14.el9_3.x86_64              5/12 Verifying        : bind-libs-32:9.16.23-14.el9_3.x86_64                      6/12 Verifying        : bind-license-32:9.16.23-14.el9_3.noarch                   7/12 Verifying        : bind-utils-32:9.16.23-14.el9_3.x86_64                     8/12 Verifying        : fstrm-0.6.1-3.el9.x86_64                                  9/12 Verifying        : libmaxminddb-1.5.2-3.el9.x86_64                          10/12 Verifying        : libuv-1:1.42.0-1.el9.x86_64                              11/12 Verifying        : python3-bind-32:9.16.23-14.el9_3.noarch                  12/12 
Installed products updated.Installed:bind-32:9.16.23-14.el9_3.x86_64                                                   bind-dnssec-doc-32:9.16.23-14.el9_3.noarch                                        bind-dnssec-utils-32:9.16.23-14.el9_3.x86_64                                      bind-libs-32:9.16.23-14.el9_3.x86_64                                              bind-license-32:9.16.23-14.el9_3.noarch                                           bind-utils-32:9.16.23-14.el9_3.x86_64                                             fstrm-0.6.1-3.el9.x86_64                                                          libmaxminddb-1.5.2-3.el9.x86_64                                                   libuv-1:1.42.0-1.el9.x86_64                                                       protobuf-c-1.3.3-13.el9.x86_64                                                    python3-bind-32:9.16.23-14.el9_3.noarch                                           python3-ply-3.11-14.el9.noarch                                                    Complete!

修改核心配置文件

修改模块初始为:

[root@dns ~]#vim /etc/named.confoptions {listen-on port 53 { 127.0.0.1; };listen-on-v6 port 53 { ::1; };directory       "/var/named";dump-file       "/var/named/data/cache_dump.db";statistics-file "/var/named/data/named_stats.txt";memstatistics-file "/var/named/data/named_mem_stats.txt";secroots-file   "/var/named/data/named.secroots";recursing-file  "/var/named/data/named.recursing";allow-query     { localhost; };/* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.- If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so willcause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatlyreduce such attack surface */recursion yes;dnssec-validation yes;managed-keys-directory "/var/named/dynamic";geoip-directory "/usr/share/GeoIP";pid-file "/run/named/named.pid";session-keyfile "/run/named/session.key";/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */include "/etc/crypto-policies/back-ends/bind.config";
};zone "." IN {type hint;file "named.ca";
};

改后:

[root@dns ~]#vim /etc/named.conf
options {listen-on port 53 { 192.168.30.11; };directory       "/var/named";};zone "zlp.com" IN {type master;file "named.zlp";
};

检测语法:

[root@dns named]# named-checkconf

写区域数据文件

可以找模板,我们记不到

[root@dns named]# vim named.localhost $TTL 1D
@       IN SOA  @ rname.invalid. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumNS      @A       127.0.0.1AAAA    ::1

再创建我们自己的named.zlp,在模板上修改就轻松多了

[root@dns ~]# cd /var/named
[root@dns named]# ls
data  dynamic  named.ca  named.empty  named.localhost  named.loopback  slaves
[root@dns named]# vim named.zlp
$TTL 1D
@       IN	SOA	 @ admin.zlp.com. (0       ; serial1D      ; refresh1H      ; retry1W      ; expire3H )    ; minimumIN	NS	ns
ns	IN	A	192.168.30.11
www	IN 	A	192.168.30.10#检测语法
[root@dns named]# named-checkzone zlp.com  /var/named/named.zlp
zone zlp.com/IN: loaded serial 0
OK

启动服务

[root@dns ~]# systemctl start named
[root@dns ~]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; preset: disab>Active: active (running) since Tue 2025-09-16 13:50:24 CST; 10s agoProcess: 2048 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes>Process: 2052 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code>Main PID: 2053 (named)Tasks: 10 (limit: 12043)Memory: 33.2MCPU: 93msCGroup: /system.slice/named.service└─2053 /usr/sbin/named -u named -c /etc/named.confSep 16 13:50:24 dns named[2053]: network unreachable resolving './NS/IN': 2001:500:>
Sep 16 13:50:24 dns named[2053]: network unreachable resolving './DNSKEY/IN': 2001:>
Sep 16 13:50:24 dns named[2053]: network unreachable resolving './DNSKEY/IN': 2001:>
Sep 16 13:50:25 dns named[2053]: resolver priming query complete
Sep 16 13:50:25 dns named[2053]: checkhints: b.root-servers.net/A (170.247.170.2) m>
Sep 16 13:50:25 dns named[2053]: checkhints: b.root-servers.net/A (199.9.14.201) ex>
Sep 16 13:50:25 dns named[2053]: checkhints: b.root-servers.net/AAAA (2801:1b8:10::>
Sep 16 13:50:25 dns named[2053]: checkhints: b.root-servers.net/AAAA (2001:500:200:>
Sep 16 13:50:25 dns named[2053]: managed-keys-zone: Initializing automatic trust an>
Sep 16 13:50:25 dns named[2053]: managed-keys-zone: Initializing automatic trust an>

测试

能不能将Nginx ip调出

[root@dns ~]# dig -t A www.zlp.com @192.168.30.11; <<>> DiG 9.16.23-RH <<>> -t A www.zlp.com @192.168.30.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40508
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 1a2ba8463985d47e0100000068c8fae89cc93c52d0eac7d5 (good)
;; QUESTION SECTION:
;www.zlp.com.			IN	A;; ANSWER SECTION:
www.zlp.com.		86400	IN	A	192.168.30.10 #可以;; Query time: 0 msec
;; SERVER: 192.168.30.11#53(192.168.30.11)
;; WHEN: Tue Sep 16 13:51:36 CST 2025
;; MSG SIZE  rcvd: 84

配置Nginx

改服务器名称&ip

#略

安装nginx

[root@nginx ~]# rpm -qa | grep nginx
nginx-filesystem-1.20.1-14.el9_2.1.noarch
nginx-core-1.20.1-14.el9_2.1.x86_64
nginx-1.20.1-14.el9_2.1.x86_64
#已经安装

配置nginx

[root@nginx ~]# cd /etc/nginx/conf.d/
[root@nginx conf.d]# ls
web.conf
[root@nginx conf.d]# vim web.conf 
[root@nginx conf.d]# rm web.conf 
rm: remove regular file 'web.conf'? y
#这个web.conf是上次nginx-tomcat案例时建的,可以删了
[root@nginx conf.d]# vim nginx.conf
#写好了可以检查语法
[root@nginx conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful#没问题
[root@nginx conf.d]# cat nginx.conf#内容
server {listen	80;server_name	www.zlp.com;root	/usr/share/nginx/html;#可以自己定义,主要这个文件存在就ok。多种定义方法,详见nginx章节
}

修改主页

(如果通了,我们能知道是nginx传回客户端的)

当curl www.zlp.com 时,返回该内容,说明客户端发送访问强求后,Nginx服务器已经通过我们自定义的dns服务器拿到nginx服务器里面的nginx IP,找到nginx并拿到这个首页(现实中是拿到zlp网页ip给客户端,客户端直接用ip拿到首页)

[root@nginx conf.d]# echo "welcome nginx,now successful" > /usr/share/nginx/html/index.html

测试域名

[root@nginx conf.d]# ping www.zlp.com -c 3
PING overdue.aliyun.com (170.33.12.185) 56(84) bytes of data.
64 bytes from 170.33.12.185 (170.33.12.185): icmp_seq=1 ttl=128 time=89.2 ms
64 bytes from 170.33.12.185 (170.33.12.185): icmp_seq=2 ttl=128 time=154 ms
64 bytes from 170.33.12.185 (170.33.12.185): icmp_seq=3 ttl=128 time=325 ms
#ping通了,但不是我们要的ip啊,why

问题:通了,但是返回一个未知ip

因为此时我们的dns服务器是默认的,而不是我们前面配置的,所以我们想要的网页ip压根不在默认dns服务器上

可以检验一下

[root@nginx ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]:                             223.5.5.5

修改Nginx主机上dns地址

默认是223.5.5.5,但是要用我们自己配置的dns服务器,才能找我们自己弄的网页,否则是外网的(就像我们测试的那样)

[root@nginx ~]# nmcli c modify ens160 ipv4.dns 192.168.30.11
[root@nginx ~]# nmcli c up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@nginx ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]:                             192.168.30.11#修改过来了

访问服务(检验)

开启服务

[root@nginx ~]# systemctl start nginx

测试

[root@nginx ~]# curl www.zlp.com
welcome nginx,now successful#成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/97936.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/97936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭示电解液与界面奥秘,理论计算赋能水系电池创新

揭示电解液与界面奥秘&#xff0c;理论计算赋能水系电池创新随着全球对高安全、低成本储能需求的激增&#xff0c;水系电池成为了下一代电池技术的重要候选者。然而&#xff0c;其性能瓶颈&#xff0c;如循环寿命、能量密度等&#xff0c;深深根植于复杂的电解液化学和电极-电解…

xv6实验:Ubuntu2004 WSL2实验环境配置(包括git clone网络问题解决方法)

基本配置参考MIT6.S081 Ubuntu22.04 WSL2实验环境配置,wsl安装配置参考本栏的另一篇文章WSL2&#xff08;ubuntu20.04&#xff09;vscode联合开发(附迁移方法) 如执行: git clone git://github.com/mit-pdos/xv6-riscv.git出现错误,或者无法clone情况,可以挂一个代理,然后按如…

reversed()方法

在 Python 中&#xff0c;reversed() 是一个内置函数&#xff0c;用于返回一个反向迭代器对象。这个函数可以处理多种序列类型的数据&#xff0c;如列表、元组、字符串、范围对象等&#xff0c;通过它可以方便地实现序列元素的反向遍历。下面从基本语法、适用对象、使用示例等方…

根据文本区域`textarea`的内容调整大小`field-sizing:content`

field-sizing:content 新属性&#xff0c;可以让 文本域textarea 根据输入的内容自动调整大小&#xff0c; 无需使用javascript See the Pen 根据文本区域textarea的内容调整大小field-sizing:content by liu874396180 ( liu874396180) on CodePen.

Python3练习题

上一节中全面讲解了基础知识&#xff0c;为了巩固知识点&#xff0c;当然最好的方法就是练习了。 练习 1&#xff1a;变量类型转换与算术运算 需求&#xff1a;接收用户输入的两个数字&#xff08;可能是整数或字符串格式&#xff09;&#xff0c;转换为浮点数后计算 “幂运算、…

Motioncam Color S + 蓝激光:3D 视觉革新,重塑工业与科研应用新格局

在工业自动化、科研探索及智能检测等前沿领域&#xff0c;对物体进行高精度、高速度且稳定可靠的三维成像&#xff0c;始终是推动技术进步与效率提升的关键诉求。过往的 3D 成像设备&#xff0c;常因精度欠佳、对复杂材质适应性差、难以应对动态场景等局限&#xff0c;在实际应…

用html5写一个第一视角的摩托车开车游戏,画上摩托车把手,把手两侧放上可操控方向的按钮,再加上,前进和减速的按钮

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>第一视角摩托车</title><style>html…

SpringMVC 系列博客(一):基础概念与注解开发入门

目录 一、引言 二、MVC 模式&#xff1a;SpringMVC 的设计基石 2.1 MVC 三大组件 2.2 主流 MVC 框架对比 2.3 MVC 模式的核心优势 三、SpringMVC 框架&#xff1a;是什么&#xff1f;为什么学&#xff1f; 3.1 什么是 SpringMVC&#xff1f; 3.2 为什么要学 SpringMVC&a…

Java 字符串操作教程:三个任务完整复现与解析

这次是完成一些小任务来试试身手&#xff0c;免得生疏&#xff1a; 编写程序&#xff0c;使用charAt和length方法&#xff0c;将字符串"HelloWorld"拆分为"Hello"和"World"两个子串并输出。 设计一个方法&#xff0c;利用indexOf和lastlndexOf&a…

向量技术研究报告:从数学基础到AI革命的支柱

1. 向量的数学本质与历史演变 1.1 核心定义与数学表示 向量是同时具有大小&#xff08;Magnitude&#xff09;和方向&#xff08;Direction&#xff09;的量&#xff0c;在数学上被严格定义为向量空间中的元素。与仅有大小的标量&#xff08;Scalar&#xff09;不同&#xff0c…

Qt QHorizontalStackedBarSeries详解

1、概述QHorizontalStackedBarSeries 是 Qt Charts 模块中的一个类&#xff0c;用于创建水平堆叠条形图。它继承自 QAbstractBarSeries 类&#xff0c;允许将多个数据系列堆叠在一起显示&#xff0c;每个条形由多个部分组成&#xff0c;这些部分共同构成一个完整的条形&#xf…

《股票智能查询与投资决策辅助应用项目方案》

前引&#xff1a;本股票智能查询与投资决策辅助应用通过整合多源金融数据&#xff0c;运用量化分析 机器学习技术&#xff0c;为普通投资者提供全方位股票信息服务和个性化投资建议。系统不仅解决了传统工具 “数据分散、分析复杂” 的问题&#xff0c;更通过人性化交互和直观…

从零开始构建Kubernetes Operator:一个完整的深度学习训练任务管理方案

从零开始构建Kubernetes Operator&#xff1a;一个完整的深度学习训练任务管理方案一、引言二、为什么需要Operator&#xff1f;1. Controller vs Operator&#xff1a;本质区别2. 有状态服务 vs 无状态服务的挑战三、项目架构设计3.1整体架构图3.2核心组件4.核心实现解析1. CR…

第二十二篇|新世界语学院教育数据深度解析:学制函数、能力矩阵与升学图谱

第二十二篇&#xff5c;新世界语学院教育数据深度解析&#xff1a;学制函数、能力矩阵与升学图谱 系列主题&#xff1a;500所日本语言学校结构数据工程 关键词&#xff1a;新世界语学院、东京新宿、学制函数建模、JLPT能力矩阵、升学网络、教育数据工程 一、合规与法人建模&…

Java开发工具选择指南:Eclipse、NetBeans与IntelliJ IDEA对比

在Java开发的世界里&#xff0c;选择合适的开发工具就如同挑选一把称手的禅杖&#xff0c;能助你在代码修行的路上更加得心应手。本文将为Java开发者提供一份实用的IDE选择指南&#xff0c;从功能、适用人群、性能等方面深入解析几款主流的Java开发工具&#xff0c;帮助你找到最…

iOS App 内存泄漏与性能调优实战 如何排查内存问题、优化CPU与GPU性能、降低耗电并提升流畅度(uni-app iOS开发优化指南)

在 iOS 应用开发中&#xff0c;内存泄漏 是最常见且最难排查的性能问题之一。 它会导致应用 运行越来越卡、占用内存过高、频繁崩溃&#xff0c;甚至严重消耗电池。 尤其在 uni-app 跨平台开发 中&#xff0c;JS 层和原生层的混合调用更容易隐藏内存问题&#xff1a; 对象未释放…

从源代码开始构建、部署和管理应用程序

1.创建项目目录并准备应用程序的代码及其依赖1.创建项目目录&#xff0c;并将当前目录切换到该目录[roothost1 ~]# mkdir python-web && cd python-web2.创建 app.py 文件并添加以下代码[roothost1 python-web]# vi app.py [roothost1 python-web]# cat app.py import …

Flutter-[2]第一个应用

摘要 根据官方文档搭配好环境&#xff0c;使用vscode创建完应用后&#xff0c;会遇到以下问题 设备无法选择打开了lib\main.dart右上角也没有运行按钮 环境 Windows11Flutter 3.35.4 必要设置 1. 查看是否开启Windows桌面应用开发flutter config --list输出如下: All Settings:…

QListWidget选择阻止问题解决方案

QListWidget选择阻止问题解决方案QListWidget选择阻止问题解决方案问题背景QListWidget工作机制详解1. 事件处理流程2. 关键机制说明2.1 鼠标事件与信号的分离2.2 信号阻塞的局限性2.3 断开连接方法的问题问题的根本原因1. 异步事件处理2. 多层状态管理3. 事件优先级解决方案演…

TCL华星计划投建第8.6代印刷OLED产线

近日&#xff0c;TCL科技集团股份有限公司&#xff08;000100.SZ&#xff09;发布公告&#xff0c;公司、旗下子公司TCL华星与广州市人民政府、广州经济技术开发区管理委员会共同签署项目合作协议&#xff0c;拟共同出资于广州市建设一条月加工2290mm2620mm玻璃基板能力约2.25万…