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
英文地址,請注明出處:http://en.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萬…