目錄
基礎前沿
1 vulhub環境搭建
1 proxychains工具:編輯配置文件
2 docker
docker環境搭建
配置docker的代理:
2 nginx編譯安裝--FPM
1 php.ini
2 php-fpm
3 nginx
4 nginx php-fpm php
1 基本角色分工
2. 請求處理全流程
步驟 1:客戶端發送請求
步驟 2:Nginx 接收請求
步驟 3:Nginx 配置示例
步驟 4:Nginx 與 PHP-FPM 通信
步驟 5:PHP-FPM 處理請求
步驟 6:PHP 腳本執行
步驟 7:結果返回
步驟 8:Nginx 返回響應
總結
3 DNS
命令解釋
1 dig
2 nslookup
DNS的解析過程
基礎前沿
1 vulhub環境搭建
1 proxychains工具:編輯配置文件
vim /etc/proxychains.conf
查看代理端口號:7890
查看本機網卡,一般虛擬機都是vmnet8:
設置配置文件,改代理IP和端口號
測試: proxychains curl http://www.google.com
后面又去訪問了google發現不行了,但是訪問其他的外網可以正常訪問
2 docker
docker環境搭建
需要下載以下的包,如果下載失敗可以先apt upgrade 或者 --fix-missing解決問題
sudo apt-get install --fix-missing docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
配置docker的代理:
先創建配置目錄
mkdir -p /etc/systemd/system/docker.service.d
寫代理:
sudo tee /etc/systemd/system/docker.service.d/proxy.conf <<-'EOF'
[Service]
Environment="HTTP_PROXY=http://192.168.37.1:7890"
Environment="HTTPS_PROXY=http://192.168.37.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.37.0/24" # 不代理本地和局域網地址 EOF
測試:拉取環境
docker ps -a
docker rm -f $(docker ps -aq)
docker images
docker rmi $(docker images | awk '{print $3}')
刪除第三列的ID
然后構建鏡像環境:
docker compose up -d
部署完成,查看鏡像和容器:
docker ps -a
docker images
本地訪問查看是否成功:
ok!部署完成
進入容器:
docker exec -it 9b7a360a3476 /bin/bash
這里有一個.dockerenv文件,說明我是在docker容器里面,如果說拿下一個網站有這個說明是在容器里面,并沒有進入真實的物理機(所以有docker逃逸)
因為docker是最小化的安裝,所以他的很多命令都沒有
修改docker文件的方法:
1,直接下載軟件安裝包或者更新源
apt-get upgrade
2,將文件名復制出來,在本地進行修改
docker cp 9b7a360a3476:/var/www/html/color.php /tmp
打開進行修改再復制回去,因為cp是覆蓋
3,vscode直接修改
2 nginx編譯安裝--FPM
1 php.ini
2 php-fpm
3 nginx
進入此配置目錄
修改nginx的配置文件,配置與php聯動的文件
root@yang:/usr/local/nginx/conf#vim nginx.conf
4 nginx php-fpm php
1 基本角色分工
- Nginx:高性能的 Web 服務器和反向代理服務器,負責接收客戶端請求、靜態文件處理和請求轉發。
- PHP-FPM:PHP FastCGI 進程管理器,負責管理 PHP 進程池并處理 PHP 腳本的執行。
- PHP:腳本語言,執行 PHP 代碼并生成動態內容
2. 請求處理全流程
步驟 1:客戶端發送請求
用戶通過瀏覽器或其他客戶端工具(如?curl
)訪問網站,例如請? 求?http://example.com/index.php
。
步驟 2:Nginx 接收請求
Nginx 作為 Web 服務器監聽 80/443 端口,接收到請求后根據配置文件(nginx.conf
?中的配置)決定如何處理:
- 靜態文件請求:直接返回 HTML、CSS、JS、圖片等靜態資源。
- PHP 腳本請求:通過?
fastcgi_pass
?指令將請求轉發給 PHP-FPM 處理
步驟 3:Nginx 配置示例
步驟 4:Nginx 與 PHP-FPM 通信
Nginx 通過?FastCGI 協議?將請求轉發給 PHP-FPM:
- 通信方式:
- TCP 套接字(如?
127.0.0.1:9000
):適合跨服務器通信或調試。 - Unix 套接字(如?
/run/php/php7.4-fpm.sock
):性能更高,適合本地通信。
- TCP 套接字(如?
- 傳遞參數:Nginx 將請求信息(如?
SCRIPT_FILENAME
、QUERY_STRING
、HTTP_HOST
?等)封裝為 FastCGI 參數傳遞給 PHP-FPM。
步驟 5:PHP-FPM 處理請求
PHP-FPM 接收到請求后:
- 進程池管理:從空閑進程池中選擇一個 PHP 進程(若沒有則創建新進程,需配置允許)。
- 執行 PHP 腳本:PHP 進程讀取并執行指定的 PHP 文件(如?
index.php
)。 - 環境準備:PHP 進程會加載?
php.ini
?配置,并根據腳本需求加載擴展(如?mysqli
、redis
?等)。
步驟 6:PHP 腳本執行
PHP 解釋器執行腳本,可能涉及:
- 數據庫查詢(如 MySQL、PostgreSQL)。
- 文件讀寫。
- 調用第三方 API。
- 生成動態內容(如 HTML、JSON)。
步驟 7:結果返回
PHP 執行完成后,將生成的內容(如 HTML 頁面)返回給 PHP-FPM,PHP-FPM 再通過 FastCGI 協議將結果返回給 Nginx。
步驟 8:Nginx 返回響應
Nginx 收到 PHP-FPM 的響應后,添加 HTTP 頭(如?Content-Type
、Cache-Control
),并將內容返回給客戶端瀏覽器。
總結
- Nginx 負責請求分發:靜態文件自己處理,PHP 腳本轉發給 PHP-FPM。
- PHP-FPM 管理進程池:提高 PHP 腳本執行效率,避免頻繁創建進程。
- PHP 專注業務邏輯:執行代碼并生成動態內容。
3 DNS
命令解釋
此節介紹了DNS查詢常用命令nslookup和dig。nslookup可進行正向解析、查詢指定數據類型和TTL值等,支持指定域名服務器;dig能正向、反向解析,查詢特定記錄及追蹤解析過程。nslookup適合基本查詢和診斷,dig功能更強大全面。
1 dig
1.正向解析:使用 dig 域名 @server-ip 的格式,其中server-ip是指定的DNS服務器IP地址。
2.反向解析:使用 dig –x ip @server-ip 的格式,可以查詢指定IP地址對應的域名。
3.查詢特定類型的記錄:使用 dig 域名 type 的格式,其中type是想要查詢的記錄類型,如A、AAAA、MX、NS、SOA等。
4.追蹤解析過程:使用 dig +trace 域名 的格式,可以追蹤域名的解析過程,顯示從根域名服務器開始到最終權威服務器的解析路徑。
2 nslookup
1.正向解析:直接輸入 nslookup 域名,例如 nslookup www.baidu.com,即可查詢指定域名的IP地址。
2.查詢域名制定數據類型:使用 nslookup type=類型 域名 的格式,其中類型可以是A、AAAA、MX、NS、SOA等,用于查詢指定類型的記錄。 3.查詢域名TTL值:使用 nslookup –d 域名 的格式,可以查詢指定域名的TTL值。 此外,nslookup還支持指定域名服務器進行查詢。例如,nslookup server 8.8.8.8 可以將Google的公共DNS服務器8.8.8.8設置為默認服務器進行查詢。
nslookup更適合基本的DNS查詢和網絡診斷,而dig則提供了更為深入和全面的DNS查詢和分析功能。
DNS的解析過程
①客戶機向其本地域名服務器發出DNS請求報文。
②本地域名服務器收到請求后,查詢本地緩存,若沒有該記錄,則以DNS客戶的身份向根域名服務器發出解析請求。
③根域名服務器收到請求后,判斷該域名屬于.com域,將對應的頂級域名服務器dns.com的IP地址返回給本地域名服務器。 ④本地域名服務器向頂級域名服務器dns.com發出解析請求報文。
⑤頂級域名服務器dns.com收到請求后,判斷該域名屬于abc.com域,因此將對應的授權域名服務器dns.abc.com的IP地址返回給本地域名服務器。
⑥本地域名服務器向授權域名服務器dns.abc.com發起解析請求報文。
⑦授權域名服務器dns.abc.com收到請求后,將查詢結果返回給本地域名服務器。
⑧本地域名服務器將查詢結果保存到本地緩存,同時返回給客戶機