主頁 > 軟體設計 > Nginx----基礎篇

Nginx----基礎篇

2021-07-27 07:12:58 軟體設計

Nginx----基礎篇

  • 1、 Ngixn 簡介
    • 1.1 名詞解釋
      • 1.1.1 WEB服務器
      • 1.1.2 HTTP
      • 1.1.3 POP3/SMTP/IMAP:
      • 1.1.4 反向代理
        • 1.1.4.1 正向代理
        • 1.1.4.2 反向代理
  • 2、 常見服務器對比
    • 2.1 IIS
    • 2.2 Tomcat
    • 2.3 Apache
    • 2.4 Lighttpd
    • 2.5 其他的服務器
    • 2.6 Nginx的優點
      • (1) 速度更快、并發更高
      • (2) 配置簡單,擴展性強
      • (3) 高可靠性
      • (4) 熱部署
      • (5) 成本低、BSD許可證
  • 3、Nginx的功能特性及常用功能
    • 3.1 基本HTTP服務
    • 3.2 高級HTTP服務
    • 3.3 郵件服務
    • 3.4 Nginx常用的功能模塊
    • 3.5 Nginx的核心組成
  • 4、Nginx環境準備
    • 4.1 Nginx版本介紹
    • 4.2 獲取Nginx原始碼
    • 4.3 準備服務器系統
      • (1) 確認centos的內核
      • (2) 確保centos能聯網
      • (3) 確認關閉防火墻
      • (4) 確認停用selinux
    • 4.4 Nginx安裝方式介紹
        • 1) GCC編譯器
        • 2) PCRE
        • 3) zlib
        • 4) OpenSSL
      • 4.4.1 方案一:Nginx的原始碼簡單安裝
        • (1) 進入官網查找需要下載版本的鏈接地址,然后使用wget命令進行下載
        • (2) 建議大家將下載的資源進行包管理
        • (3) 解壓縮
        • (4) 進入資源檔案中,發現configure
        • (5) 編譯
        • (6) 安裝
        • 或(5)、(6) 安裝
      • 4.4.2 方案二:yum安裝
        • (1) 安裝yum-utils
        • (2) 添加yum源檔案
        • (3) 查看是否安裝成功
        • (4) 使用yum進行安裝
        • (5) 查看nginx的安裝位置
        • (6) 啟動測驗
      • 4.4.3 原始碼簡單安裝和yum安裝的差異:
          • 解壓Nginx目錄
      • 4.4.4 方案三:Nginx的原始碼復雜安裝
  • 5、Nginx目錄結構分析
  • 6、Nginx服務器啟停命令
    • 6.1 方式一:Nginx服務的信號控制
      • (1) 要想操作Nginx的master行程,就需要獲取到master行程的行程號ID,獲取方式簡單介紹兩個,
      • (2) 信號
    • 6.2 方式二:Nginx的命令列控制
  • 7、Nginx服務器版本升級和新增模塊
    • 7.1 環境準備
    • 7.2 方案一:使用Nginx服務信號進行升級
    • 7.3 方案二:使用Nginx安裝目錄的make命令完成升級
  • 8、Nginx核心組態檔結構
    • 8.1 全域塊
      • 8.1.1 user指令
        • (1)編輯nginx.conf, 設定一個用戶資訊"www"
        • (2) 創建一個用戶
        • (3)修改user屬性
        • (4)創建`/root/html/index.html`頁面,添加如下內容
        • (5)修改nginx.conf
        • (6)測驗啟動訪問
        • (7)分析原因
        • (8)將檔案創建到 `/home/www/html/index.html`,修改配置
        • (9)再次測驗啟動訪問
      • 8.1.2 work process指令
      • 8.1.3 其他指令
    • 8.2 events塊
      • 8.2.1 events指令配置實體
    • 8.3 http塊
      • 8.3.1 定義MIME-Type
      • 8.3.2 自定義服務日志
        • (1) access_log:用來設定用戶訪問日志的相關屬性,
        • (2) log_format:用來指定日志的輸出格式,
      • 8.3.3 其他配置指令
        • (1) sendfile:用來設定Nginx服務器是否使用sendfile()傳輸檔案,該屬性可以大大提高Nginx處理靜態資源的性能
        • (2) keepalive_timeout:用來設定長連接的超時時間,
        • (3) keepalive_requests:用來設定一個keep-alive連接使用的次數,
    • 8.4 server塊和location塊

1、 Ngixn 簡介

Nginx(“engine x”)一個具有高性能的【HTTP】和【反向代理】的【WEB服務器】,同時也是一個【POP3/SMTP/IMAP代理服務器】,是由伊戈爾·賽索耶夫(俄羅斯人)使用C語言撰寫的,Nginx的第一個版本是2004年10月4號發布的0.1.0版本,另外值得一提的是伊戈爾·賽索耶夫將Nginx的原始碼進行了開源,這也為Nginx的發展提供了良好的保障,

1.1 名詞解釋

1.1.1 WEB服務器

WEB服務器也叫網頁服務器,英文名叫Web Server,主要功能是為用戶提供網上資訊瀏覽服務,

1.1.2 HTTP

HTTP是超文本傳輸協議的縮寫,是用于從WEB服務器傳輸超文本到本地瀏覽器的傳輸協議,也是互聯網上應用最為廣泛的一種網路協議,HTTP是一個客戶端和服務器端請求和應答的標準,客戶端是終端用戶,服務端是網站,通過使用Web瀏覽器、網路爬蟲或者其他工具,客戶端發起一個到服務器上指定埠的HTTP請求,

1.1.3 POP3/SMTP/IMAP:

POP3(Post Offic Protocol 3)郵局協議的第三個版本,

SMTP(Simple Mail Transfer Protocol)簡單郵件傳輸協議,

IMAP(Internet Mail Access Protocol)互動式郵件存取協議,

通過上述名詞的解釋,我們可以了解到Nginx也可以作為電子郵件代理服務器,

1.1.4 反向代理

1.1.4.1 正向代理

在這里插入圖片描述

1.1.4.2 反向代理

在這里插入圖片描述

2、 常見服務器對比

在介紹這一節內容之前,我們先來認識一家公司叫Netcraft,

Netcraft公司于1994年底在英國成立,多年來一直致力于互聯網市場以及在線安全方面的咨詢服務,其中在國際上最具影響力的當屬其針對網站服務器、SSL市場所做的客觀嚴謹的分析研究,公司官網每月公布的調研資料(Web Server Survey)已成為當今人們了解全球網站數量以及服務器市場分額情況的主要參考依據,時常被諸如華爾街雜志,英國BBC,Slashdot等媒體報道或參考,

我們先來看一組資料,我們先打開Nginx的官方網站 http://nginx.org/,找到Netcraft公司公布的資料,對當前主流服務器產品進行介紹,

在這里插入圖片描述

上面這張圖展示了2019年全球主流Web服務器的市場情況,其中有Apache、Microsoft-IIS、google Servers、Nginx、Tomcat等,而我們在了解新事物的時候,往往習慣通過類比來幫助自己理解事物的概貌,所以下面我們把幾種常見的服務器來給大家簡單介紹下:

2.1 IIS

? 全稱(Internet Information Services)即互聯網資訊服務,是由微軟公司提供的基于windows系統的互聯網基本服務,windows作為服務器在穩定性與其他一些性能上都不如類UNIX作業系統,因此在需要高性能Web服務器的場合下,IIS可能就會被"冷落".

2.2 Tomcat

? Tomcat是一個運行Servlet和JSP的Web應用軟體,Tomcat技術先進、性能穩定而且開放源代碼,因此深受Java愛好者的喜愛并得到了部分軟體開發商的認可,成為目前比較流行的Web應用服務器,但是Tomcat天生是一個重量級的Web服務器,對靜態檔案和高并發的處理比較弱,

2.3 Apache

? Apache的發展時期很長,同時也有過一段輝煌的業績,從上圖可以看出大概在2014年以前都是市場份額第一的服務器,Apache有很多優點,如穩定、開源、跨平臺等,但是它出現的時間太久了,在它興起的年代,互聯網的產業規模遠遠不如今天,所以它被設計成一個重量級的、不支持高并發的Web服務器,在Apache服務器上,如果有數以萬計的并發HTTP請求同時訪問,就會導致服務器上消耗大量能存,作業系統內核對成百上千的Apache行程做行程間切換也會消耗大量的CUP資源,并導致HTTP請求的平均回應速度降低,這些都決定了Apache不可能成為高性能的Web服務器,這也促使了Lighttpd和Nginx的出現,

2.4 Lighttpd

? Lighttpd是德國的一個開源的Web服務器軟體,它和Nginx一樣,都是輕量級、高性能的Web服務器,歐美的業界開發者比較鐘愛Lighttpd,而國內的公司更多的青睞Nginx,同時網上Nginx的資源要更豐富些,

2.5 其他的服務器

Google Servers,Weblogic, Webshpere(IBM)…

經過各個服務器的對比,種種跡象都表明,Nginx將以性能為王,這也是我們為什么選擇Nginx的理由,

2.6 Nginx的優點

(1) 速度更快、并發更高

單次請求或者高并發請求的環境下,Nginx都會比其他Web服務器回應的速度更快,一方面在正常情況下,單次請求會得到更快的回應,另一方面,在高峰期(如有數以萬計的并發請求),Nginx比其他Web服務器更快的回應請求,Nginx之所以有這么高的并發處理能力和這么好的性能原因在于Nginx采用了多行程和I/O多路復用(epoll)的底層實作,

(2) 配置簡單,擴展性強

Nginx的設計極具擴展性,它本身就是由很多模塊組成,這些模塊的使用可以通過組態檔的配置來添加,這些模塊有官方提供的也有第三方提供的模塊,如果需要完全可以開發服務自己業務特性的定制模塊,

(3) 高可靠性

Nginx采用的是多行程模式運行,其中有一個master主行程和N多個worker行程,worker行程的數量我們可以手動設定,每個worker行程之間都是相互獨立提供服務,并且master主行程可以在某一個worker行程出錯時,快速去"拉起"新的worker行程提供服務,

(4) 熱部署

現在互聯網專案都要求以7*24小時進行服務的提供,針對于這一要求,Nginx也提供了熱部署功能,即可以在Nginx不停止的情況下,對Nginx進行檔案升級、更新配置和更換日志檔案等功能,

(5) 成本低、BSD許可證

BSD是一個開源的許可證,世界上的開源許可證有很多,現在比較流行的有六種分別是GPL、BSD、MIT、Mozilla、Apache、LGPL,這六種的區別是什么,我們可以通過下面一張圖來解釋下:

在這里插入圖片描述

Nginx本身是開源的,我們不僅可以免費的將Nginx應用在商業領域,而且還可以在專案中直接修改Nginx的原始碼來定制自己的特殊要求,這些點也都是Nginx為什么能吸引無數開發者繼續為Nginx來貢獻自己的智慧和青春,OpenRestry [Nginx+Lua] Tengine[淘寶]

3、Nginx的功能特性及常用功能

Nginx提供的基本功能服務從大體上歸納為"基本HTTP服務"、“高級HTTP服務”和"郵件服務"等三大類,

3.1 基本HTTP服務

Nginx可以提供基本HTTP服務,可以作為HTTP代理服務器和反向代理服務器,支持通過快取加速訪問,可以完成簡單的負載均衡和容錯,支持包過濾功能,支持SSL等,

  • 處理靜態檔案、處理索引檔案以及支持自動索引;
  • 提供反向代理服務器,并可以使用快取加上反向代理,同時完成負載均衡和容錯;
  • 提供對FastCGI、memcached等服務的快取機制,,同時完成負載均衡和容錯;
  • 使用Nginx的模塊化特性提供過濾器功能,Nginx基本過濾器包括gzip壓縮、ranges支持、chunked回應、XSLT、SSI以及影像縮放等,其中針對包含多個SSI的頁面,經由FastCGI或反向代理,SSI過濾器可以并行處理,
  • 支持HTTP下的安全套接層安全協議SSL.
  • 支持基于加權和依賴的優先權的HTTP/2

3.2 高級HTTP服務

  • 支持基于名字和IP的虛擬主機設定
  • 支持HTTP/1.0中的KEEP-Alive模式和管線(PipeLined)模型連接
  • 自定義訪問日志格式、帶快取的日志寫操作以及快速日志輪轉,
  • 提供3xx~5xx錯誤代碼重定向功能
  • 支持重寫(Rewrite)模塊擴展
  • 支持重新加載配置以及在線升級時無需中斷正在處理的請求
  • 支持網路監控
  • 支持FLV和MP4流媒體傳輸

3.3 郵件服務

Nginx提供郵件代理服務也是其基本開發需求之一,主要包含以下特性:

  • 支持IMPA/POP3代理服務功能
  • 支持內部SMTP代理服務功能

3.4 Nginx常用的功能模塊

1) 靜態資源部署

2) Rewrite地址重寫
	正則運算式
	
3) 反向代理

4) 負載均衡
	輪詢、加權輪詢、ip_hash、url_hash、fair
	
5) Web快取

6) 環境部署
	高可用的環境
	
7) 用戶認證模塊...

3.5 Nginx的核心組成

nginx二進制可執行檔案
nginx.conf組態檔
error.log錯誤的日志記錄
access.log訪問日志記錄

4、Nginx環境準備

4.1 Nginx版本介紹

Nginx的官方網站為: http://nginx.org

打開原始碼可以看到如下的頁面內容

在這里插入圖片描述

Nginx的官方下載網站為http://nginx.org/en/download.html,當然你也可以之間在首頁選中右邊的download進入版本下載網頁,在下載頁面我們會看到如下內容:

在這里插入圖片描述

4.2 獲取Nginx原始碼

http://nginx.org/download/

打開上述網站,就可以查看到Nginx的所有版本,選中自己需要的版本進行下載,下載我們可以直接在windows上下載然后上傳到服務器,也可以直接從服務器上下載,這個時候就需要準備一臺服務器,

4.3 準備服務器系統

環境準備

VMware WorkStation
Centos7
MobaXterm
	xsheel,SecureCRT
網路

(1) 確認centos的內核

準備一個內核為2.6及以上版本的作業系統,因為linux2.6及以上內核才支持epoll,而Nginx需要解決高并發壓力問題是需要用到epoll,所以我們需要有這樣的版本要求,

我們可以使用uname -a命令來查詢linux的內核版本,

(2) 確保centos能聯網

ping www.baidu.com

在這里插入圖片描述

(3) 確認關閉防火墻

這一項的要求僅針對于那些對linux系統的防火墻設定規則不太清楚的,建議大家把防火墻都關閉掉,因為我們此次課程主要的內容是對Nginx的學習,把防火墻關閉掉,可以省掉后續Nginx學習程序中遇到的諸多問題,

關閉的方式有如下兩種:

systemctl stop firewalld      # 關閉運行的防火墻,系統重新啟動后,防火墻將重新打開
systemctl disable firewalld   # 永久關閉防火墻,,系統重新啟動后,防火墻依然關閉
systemctl status firewalld	 # 查看防火墻狀態

(4) 確認停用selinux

selinux(security-enhanced linux),美國安全域對于強制訪問控制的實作,在linux2.6內核以后的版本中,selinux已經成功內核中的一部分,可以說selinux是linux史上最杰出的新安全子系統之一,雖然有了selinux,我們的系統會更安全,但是對于我們的學習Nginx的歷程中,會多很多設定,所以這塊建議大家將selinux進行關閉,

sestatus查看狀態

如果查看不是disabled狀態,我們可以通過修改組態檔來進行設定,修改SELINUX=disabled,然后重啟下系統即可生效,

vim /etc/selinux/config

在這里插入圖片描述

4.4 Nginx安裝方式介紹

Nginx的安裝方式有兩種分別是:

通過Nginx原始碼
	通過Nginx原始碼簡單安裝 (1)
	通過Nginx原始碼復雜安裝 (3)
通過yum安裝 (2)

如果通過Nginx原始碼安裝需要提前準備的內容:

1) GCC編譯器

Nginx是使用C語言撰寫的程式,因此想要運行Nginx就需要安裝一個編譯工具,GCC就是一個開源的編譯器集合,用于處理各種各樣的語言,其中就包含了C語言,

使用命令yum install -y gcc來安裝

安裝成功后,可以通過gcc --version來查看gcc是否安裝成功

2) PCRE

Nginx在編譯程序中需要使用到PCRE庫(perl Compatible Regular Expressoin 兼容正則運算式庫),因為在Nginx的Rewrite模塊和http核心模塊都會使用到PCRE正則運算式語法,

可以使用命令yum install -y pcre pcre-devel來進行安裝

安裝成功后,可以通過rpm -qa pcre pcre-devel來查看是否安裝成功

3) zlib

zlib庫提供了開發人員的壓縮演算法,在Nginx的各個模塊中需要使用gzip壓縮,所以我們也需要提前安裝其庫及源代碼zlib和zlib-devel

可以使用命令yum install -y zlib zlib-devel來進行安裝

安裝成功后,可以通過rpm -qa zlib zlib-devel來查看是否安裝成功

4) OpenSSL

OpenSSL是一個開放源代碼的軟體庫包,應用程式可以使用這個包進行安全通信,并且避免被竊聽,

SSL:Secure Sockets Layer安全套接協議的縮寫,可以在Internet上提供秘密性傳輸,其目標是保證兩個應用間通信的保密性和可靠性,在Nginx中,如果服務器需要提供安全網頁時就需要用到OpenSSL庫,所以我們需要對OpenSSL的庫檔案及它的開發安裝包進行一個安裝,

可以使用命令yum install -y openssl openssl-devel來進行安裝

安裝成功后,可以通過rpm -qa openssl openssl-devel來查看是否安裝成功

上述命令,一個個來的話比較麻煩,我們也可以通過一條命令來進行安裝

yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel進行全部安裝,

4.4.1 方案一:Nginx的原始碼簡單安裝

(1) 進入官網查找需要下載版本的鏈接地址,然后使用wget命令進行下載

wget http://nginx.org/download/nginx-1.16.1.tar.gz

(2) 建議大家將下載的資源進行包管理

mkdir -p nginx/core
mv nginx-1.16.1.tar.gz nginx/core

(3) 解壓縮

tar -xzf nginx-1.16.1.tar.gz

(4) 進入資源檔案中,發現configure

./configure

(5) 編譯

make

(6) 安裝

make install

或(5)、(6) 安裝

make & make install

4.4.2 方案二:yum安裝

使用原始碼進行簡單安裝,我們會發現安裝的程序比較繁瑣,需要提前準備GCC編譯器、PCRE兼容正則運算式庫、zlib壓縮庫、OpenSSL安全通信的軟體庫包,然后才能進行Nginx的安裝,

(1) 安裝yum-utils

sudo yum  install -y yum-utils

(2) 添加yum源檔案

vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

(3) 查看是否安裝成功

yum list | grep nginx

(4) 使用yum進行安裝

yun install -y nginx

(5) 查看nginx的安裝位置

whereis nginx

(6) 啟動測驗

4.4.3 原始碼簡單安裝和yum安裝的差異:

這里先介紹一個命令: ./nginx -V,通過該命令可以查看到所安裝Nginx的版本及相關配置資訊,

簡單安裝

在這里插入圖片描述

yum安裝

在這里插入圖片描述

解壓Nginx目錄

執行tar -zxvf nginx-1.16.1.tar.gz對下載的資源進行解壓縮,進入壓縮后的目錄,可以看到如下結構

在這里插入圖片描述

內容解釋:

auto:存放的是編譯相關的腳本

CHANGES:版本變更記錄

CHANGES.ru:俄羅斯文的版本變更記錄

conf:nginx默認的組態檔

configure:nginx軟體的自動腳本程式,是一個比較重要的檔案,作用如下:

? (1)檢測環境及根據環境檢測結果生成C代碼

? (2)生成編譯代碼需要的Makefile檔案

contrib:存放的是幾個特殊的腳本檔案,其中README中對腳本有著詳細的說明

html:存放的是Nginx自帶的兩個html頁面,訪問Nginx的首頁和錯誤頁面

LICENSE:許可證的相關描述檔案

man:nginx的man手冊

README:Nginx的閱讀指南

src:Nginx的源代碼

4.4.4 方案三:Nginx的原始碼復雜安裝

這種方式和簡單的安裝配置不同的地方在第一步,通過./configure來對編譯引數進行設定,需要我們手動來指定,那么都有哪些引數可以進行設定,接下來我們進行一個詳細的說明,

PATH:是和路徑相關的配置資訊

with:是啟動模塊,默認是關閉的

without:是關閉模塊,默認是開啟的

我們先來認識一些簡單的路徑配置已經通過這些配置來完成一個簡單的編譯:

–prefix=PATH

指向Nginx的安裝目錄,默認值為/usr/local/nginx   

–sbin-path=PATH

指向(執行)程式檔案(nginx)的路徑,默認值為<prefix>/sbin/nginx

–modules-path=PATH

指向Nginx動態模塊安裝目錄,默認值為<prefix>/modules

–conf-path=PATH

指向組態檔(nginx.conf)的路徑,默認值為<prefix>/conf/nginx.conf

–error-log-path=PATH

指向錯誤日志檔案的路徑,默認值為<prefix>/logs/error.log

–http-log-path=PATH

指向訪問日志檔案的路徑,默認值為<prefix>/logs/access.log

–pid-path=PATH

指向Nginx啟動后進行ID的檔案路徑,默認值為<prefix>/logs/nginx.pid

–lock-path=PATH

指向Nginx鎖檔案的存放路徑,默認值為<prefix>/logs/nginx.lock

要想使用可以通過如下命令

./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--modules-path=/usr/local/nginx/modules \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/usr/local/nginx/logs/nginx.lock

在使用上述命令之前,需要將之前服務器已經安裝的nginx進行卸載,卸載的步驟分為三步驟:

步驟一:需要將nginx的行程關閉

./nginx -s stop

步驟二:將安裝的nginx進行洗掉

rm -rf /usr/local/nginx

步驟三:將安裝包之前編譯的環境清除掉

cd /nginx/core/nginx-1.16.1
make clean

5、Nginx目錄結構分析

在使用Nginx之前,我們先對安裝好的Nginx目錄檔案進行一個分析,在這塊給大家介紹一個工具tree,通過tree我們可以很方面的去查看centos系統上的檔案目錄結構,當然,如果想使用tree工具,就得先通過yum install -y tree來進行安裝,安裝成功后,可以通過執行tree /usr/local/nginx(tree后面跟的是Nginx的安裝目錄),獲取的結果如下:

在這里插入圖片描述

conf:nginx所有組態檔目錄

? CGI(Common Gateway Interface)通用網關【介面】,主要解決的問題是從客戶端發送一個請求和資料,服務端獲取到請求和資料后可以呼叫呼叫CGI【程式】處理及相應結果給客戶端的一種標準規范,

? fastcgi.conf:fastcgi相關組態檔

? fastcgi.conf.default:fastcgi.conf的備份檔案

? fastcgi_params:fastcgi的引數檔案

? fastcgi_params.default:fastcgi的引數備份檔案

? scgi_params:scgi的引數檔案

? scgi_params.default:scgi的引數備份檔案

? uwsgi_params:uwsgi的引數檔案

? uwsgi_params.default:uwsgi的引數備份檔案

? mime.types:記錄的是HTTP協議中的Content-Type的值和檔案后綴名的對應關系

? mime.types.default:mime.types的備份檔案

? nginx.conf:這個是Nginx的核心組態檔,這個檔案非常重要,也是我們即將要學習的重點

? nginx.conf.default:nginx.conf的備份檔案

? koi-utf、koi-win、win-utf這三個檔案都是與編碼轉換映射相關的組態檔,用來將一種編碼轉換成另一種編碼

html:存放nginx自帶的兩個靜態的html頁面

? 50x.html:訪問失敗后的失敗頁面

? index.html:成功訪問的默認首頁

logs:記錄入門的檔案,當nginx服務器啟動后,這里面會有 access.log error.log 和nginx.pid三個檔案出現,

sbin:是存放執行程式檔案nginx

? nginx是用來控制Nginx的啟動和停止等相關的命令,

6、Nginx服務器啟停命令

Nginx安裝完成后,接下來我們要學習的是如何啟動、重啟和停止Nginx的服務,

對于Nginx的啟停在linux系統中也有很多種方式,我們本次課程介紹兩種方式:

  1. Nginx服務的信號控制

  2. Nginx的命令列控制

6.1 方式一:Nginx服務的信號控制

Nginx中的master和worker行程?
Nginx的作業方式?
如何獲取行程的PID?
信號有哪些?
如何通過信號控制Nginx的啟停等相關操作?

前面在提到Nginx的高性能,其實也和它的架構模式有關,Nginx默認采用的是多行程的方式來作業的,當將Nginx啟動后,我們通過ps -ef | grep nginx命令可以查看到如下內容:

從上圖中可以看到,Nginx后臺行程中包含一個master行程和多個worker行程,master行程主要用來管理worker行程,包含接收外界的資訊,并將接收到的信號發送給各個worker行程,監控worker行程的狀態,當worker行程出現例外退出后,會自動重新啟動新的worker行程,而worker行程則是專門用來處理用戶請求的,各個worker行程之間是平等的并且相互獨立,處理請求的機會也是一樣的,nginx的行程模型,我們可以通過下圖來說明下:
在這里插入圖片描述

我們現在作為管理員,只需要通過給master行程發送信號就可以來控制Nginx,這個時候我們需要有兩個前提條件,一個是要操作的master行程,一個是信號,

(1) 要想操作Nginx的master行程,就需要獲取到master行程的行程號ID,獲取方式簡單介紹兩個,

方式一:通過ps -ef | grep nginx

方式二:在講解nginx的./configure的配置引數的時候,有一個引數是--pid-path=PATH默認是/usr/local/nginx/logs/nginx.pid,所以可以通過查看該檔案來獲取nginx的master行程ID.

(2) 信號

信號作用
TERM/INT立即關閉整個服務
QUIT"優雅"地關閉整個服務
HUP重讀組態檔并使用服務對新配置項生效
USR1重新打開日志檔案,可以用來進行日志切割
USR2平滑升級到最新版的nginx
WINCH所有子行程不在接收處理新連接,相當于給work行程發送QUIT指令

呼叫命令為kill -signal PID

signal:即為信號;PID即為獲取到的master執行緒ID

  1. 發送TERM/INT信號給master行程,會將Nginx服務立即關閉,
kill -TERM PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
kill -INT PID / kill -INT `cat /usr/local/nginx/logs/nginx.pid`
  1. 發送QUIT信號給master行程,master行程會控制所有的work行程不再接收新的請求,等所有請求處理完后,在把行程都關閉掉,
kill -QUIT PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
  1. 發送HUP信號給master行程,master行程會把控制舊的work行程不再接收新的請求,等處理完請求后將舊的work行程關閉掉,然后根據nginx的組態檔重新啟動新的work行程
kill -HUP PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
  1. 發送USR1信號給master行程,告訴Nginx重新開啟日志檔案
kill -USR1 PID / kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
  1. 發送USR2信號給master行程,告訴master行程要平滑升級,這個時候,會重新開啟對應的master行程和work行程,整個系統中將會有兩個master行程,并且新的master行程的PID會被記錄在/usr/local/nginx/logs/nginx.pid而之前的舊的master行程PID會被記錄在/usr/local/nginx/logs/nginx.pid.oldbin檔案中,接著再次發送QUIT信號給舊的master行程,讓其處理完請求后再進行關閉
kill -USR2 PID / kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT PID / kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

在這里插入圖片描述

  1. 發送WINCH信號給master行程,讓master行程控制不讓所有的work行程在接收新的請求了,請求處理完后關閉work行程,注意master行程不會被關閉掉
kill -WINCH PID /kill -WINCH`cat /usr/local/nginx/logs/nginx.pid`

6.2 方式二:Nginx的命令列控制

此方式是通過Nginx安裝目錄下的sbin下的可執行檔案nginx來進行Nginx狀態的控制,我們可以通過nginx -h來查看都有哪些引數可以用:

在這里插入圖片描述

-?和-h:顯示幫助資訊

-v:列印版本號資訊并退出

-V:列印版本號資訊和配置資訊并退出

-t:測驗nginx的組態檔語法是否正確并退出

-T:測驗nginx的組態檔語法是否正確并列出用到的組態檔資訊然后退出

-q:在配置測驗期間禁止顯示非錯誤訊息

-s:signal信號,后面可以跟 :

? stop[快速關閉,類似于TERM/INT信號的作用]

? quit[優雅的關閉,類似于QUIT信號的作用]

? reopen[重新打開日志檔案類似于USR1信號的作用]

? reload[類似于HUP信號的作用]

-p:prefix,指定Nginx的prefix路徑,(默認為: /usr/local/nginx/)

-c:filename,指定Nginx的組態檔路徑,(默認為: conf/nginx.conf)

-g:用來補充Nginx組態檔,向Nginx服務指定啟動時應用全域的配置

7、Nginx服務器版本升級和新增模塊

如果想對Nginx的版本進行更新,或者要應用一些新的模塊,最簡單的做法就是停止當前的Nginx服務,然后開啟新的Nginx服務,但是這樣會導致在一段時間內,用戶是無法訪問服務器,為了解決這個問題,我們就需要用到Nginx服務器提供的平滑升級功能,這個也是Nginx的一大特點,使用這種方式,就可以使Nginx在7*24小時不間斷的提供服務了,接下來我們分析下加粗樣式需求:

需求:Nginx的版本最開始使用的是Nginx-1.14.2,由于服務升級,需要將Nginx的版本升級到Nginx-1.16.1,要求Nginx不能中斷提供服務,

為了應對上述的需求,這里我們給大家提供兩種解決方案:

方案一:使用Nginx服務信號完成Nginx的升級

方案二:使用Nginx安裝目錄的make命令完成升級

7.1 環境準備

(1)先準備兩個版本的Nginx分別是 1.14.2和1.16.1

(2)使用Nginx原始碼安裝的方式將1.14.2版本安裝成功并正確訪問

進入安裝目錄
./configure
make && make install

(3)將Nginx1.16.1進行引數配置和編譯,不需要進行安裝,

進入安裝目錄
./configure
make 

7.2 方案一:使用Nginx服務信號進行升級

第一步:將1.14.2版本的sbin目錄下的nginx進行備份

cd /usr/local/nginx/sbin
mv nginx nginxold

第二步:將Nginx1.16.1安裝目錄編譯后的objs目錄下的nginx檔案,拷貝到原來/usr/local/nginx/sbin目錄下

cd ~/nginx/core/nginx-1.16.1/objs
cp nginx /usr/local/nginx/sbin

第三步:發送信號USR2給Nginx的1.14.2版本對應的master行程

第四步:發送信號QUIT給Nginx的1.14.2版本對應的master行程

kill -QUIT `more /usr/local/logs/nginx.pid.oldbin`

7.3 方案二:使用Nginx安裝目錄的make命令完成升級

第一步:將1.14.2版本的sbin目錄下的nginx進行備份

cd /usr/local/nginx/sbin
mv nginx nginxold

第二步:將Nginx1.16.1安裝目錄編譯后的objs目錄下的nginx檔案,拷貝到原來/usr/local/nginx/sbin目錄下

cd ~/nginx/core/nginx-1.16.1/objs
cp nginx /usr/local/nginx/sbin

第三步:進入到安裝目錄(/nginx/core/nginx-1.16.1),執行make upgrade

在這里插入圖片描述

第四步:查看是否更新成功

./nginx -v

在整個程序中,其實Nginx是一直對外提供服務的,并且當Nginx的服務器啟動成功后,我們是可以通過瀏覽器進行直接訪問的,同時我們可以通過更改html目錄下的頁面來修改我們在頁面上所看到的內容,那么問題來了,為什么我們要修改html目錄下的檔案,能不能多添加一些頁面是Nginx的功能更加豐富,還有前面聊到Nginx的前端功能又是如何來實作的,這就需要我們對Nginx的核心組態檔進行一個詳細的學習,

8、Nginx核心組態檔結構

從前面的內容學習中,我們知道Nginx的核心組態檔默認是放在/usr/local/nginx/conf/nginx.conf,這一節,我們就來學習下nginx.conf的內容和基本配置方法,

讀取Nginx自帶的Nginx組態檔,我們將其中的注釋部分【學習一個技術點就是在Nginx的組態檔中可以使用#來注釋】洗掉掉后,就剩下下面內容:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}
指令名	指令值;  #全域塊,主要設定Nginx服務器整體運行的配置指令

#events塊,主要設定,Nginx服務器與用戶的網路連接,這一部分對Nginx服務器的性能影響較大
events {	 
    指令名	指令值;
}

#http塊,是Nginx服務器配置中的重要部分,代理、快取、日志記錄、第三方模塊配置...             
http {		
    指令名	指令值;
    server { #server塊,是Nginx配置和虛擬主機相關的內容
        指令名	指令值;
        location / { 
        #location塊,基于Nginx服務器接收請求字串與location后面的值進行匹配,對特定請求進行處理
            指令名	指令值;
        }
    }
	...
}

簡單小結下:

nginx.conf組態檔中默認有三大塊:全域塊、events塊、http塊

http塊中可以配置多個server塊,每個server塊又可以配置多個location塊,

8.1 全域塊

8.1.1 user指令

(1)user:用于配置運行Nginx服務器的worker行程的用戶和用戶組,

語法user user [group]
默認值nobody
位置全域塊

該屬性也可以在編譯的時候指定,語法如下./configure --user=user --group=group,如果兩個地方都進行了設定,最終生效的是組態檔中的配置,

該指令的使用步驟:

(1)編輯nginx.conf, 設定一個用戶資訊"www"

user www;

在這里插入圖片描述

(2) 創建一個用戶

useradd www

(3)修改user屬性

user www

(4)創建/root/html/index.html頁面,添加如下內容


<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
<p><em>I am WWW</em></p>
</body>
</html>

(5)修改nginx.conf

location / {
	root   /root/html;
	index  index.html index.htm;
}

(6)測驗啟動訪問

頁面會報403拒絕訪問的錯誤

(7)分析原因

因為當前用戶沒有訪問/root/html目錄的權限

(8)將檔案創建到 /home/www/html/index.html,修改配置

location / {
	root   /home/www/html;
	index  index.html index.htm;
}

(9)再次測驗啟動訪問

能正常訪問,

綜上所述,使用user指令可以指定啟動運行作業行程的用戶及用戶組,這樣對于系統的權限訪問控制的更加精細,也更加安全,

8.1.2 work process指令

在這里插入圖片描述

master_process:用來指定是否開啟作業行程,

語法master_process on|off;
默認值master_process on;
位置全域塊

worker_processes:用于配置Nginx生成作業行程的數量,這個是Nginx服務器實作并發處理服務的關鍵所在,理論上來說workder process的值越大,可以支持的并發處理量也越多,但事實上這個值的設定是需要受到來自服務器自身的限制,建議將該值和服務器CPU的內核數保存一致,

語法worker_processes num/auto;
默認值1
位置全域塊

如果將worker_processes設定成2,則會看到如下內容:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QFFeSn4a-1627116249135)(assets/1581563242526.png)]

8.1.3 其他指令

daemon:設定Nginx是否以守護行程的方式啟動,

守護式行程是linux后臺執行的一種服務行程,特點是獨立于控制終端,不會隨著終端關閉而停止,

語法daemon on|off;
默認值daemon on;
位置全域塊

pid:用來配置Nginx當前master行程的行程號ID存盤的檔案路徑,

語法pid file;
默認值默認為:/usr/local/nginx/logs/nginx.pid
位置全域塊

該屬性可以通過./configure --pid-path=PATH來指定

error_log:用來配置Nginx的錯誤日志存放路徑

語法error_log file [日志級別];
默認值error_log logs/error.log error;
位置全域塊、http、server、location

該屬性可以通過./configure --error-log-path=PATH來指定

其中日志級別的值有:debug|info|notice|warn|error|crit|alert|emerg,翻譯過來為試|資訊|通知|警告|錯誤|臨界|警報|緊急,這塊建議大家設定的時候不要設定成info以下的等級,因為會帶來大量的磁盤I/O消耗,影響Nginx的性能,

(5)include:用來引入其他組態檔,使Nginx的配置更加靈活

語法include file;
默認值
位置any

8.2 events塊

(1)accept_mutex:用來設定Nginx網路連接序列化

語法accept_mutex on|off;
默認值accept_mutex on;
位置events

這個配置主要可以用來解決常說的"驚群"問題,大致意思是在某一個時刻,客戶端發來一個請求連接,Nginx后臺是以多行程的作業模式,也就是說有多個worker行程會被同時喚醒,但是最終只會有一個行程可以獲取到連接,如果每次喚醒的行程數目太多,就會影響Nginx的整體性能,如果將上述值設定為on(開啟狀態),將會對多個Nginx行程接收連接進行序列號,一個個來喚醒接收,就防止了多個行程對連接的爭搶,

在這里插入圖片描述

(2)multi_accept:用來設定是否允許同時接收多個網路連接

語法multi_accept on|off;
默認值multi_accept off;
位置events

如果multi_accept被禁止了,nginx一個作業行程只能同時接受一個新的連接,否則,一個作業行程可以同時接受所有的新連接

(3)worker_connections:用來配置單個worker行程最大的連接數

語法worker_connections number;
默認值worker_commections 512;
位置events

這里的連接數不僅僅包括和前端用戶建立的連接數,而是包括所有可能的連接數,另外,number值不能大于作業系統支持打開的最大檔案句柄數量,

(4)use:用來設定Nginx服務器選擇哪種事件驅動來處理網路訊息,

語法use method;
默認值根據作業系統定
位置events

注意:此處所選擇事件處理模型是Nginx優化部分的一個重要內容,method的可選值有select/poll/epoll/kqueue等,之前在準備centos環境的時候,我們強調過要使用linux內核在2.6以上,就是為了能使用epoll函式來優化Nginx,

另外這些值的選擇,我們也可以在編譯的時候使用

--with-select_module--without-select_module

--with-poll_module--without-poll_module來設定是否需要將對應的事件驅動模塊編譯到Nginx的內核,

8.2.1 events指令配置實體

打開Nginx的組態檔 nginx.conf,添加如下配置

events{
	accept_mutex on;
	multi_accept on;
	worker_commections 1024;
	use epoll;
}

啟動測驗

./nginx -t
./nginx -s reload

8.3 http塊

8.3.1 定義MIME-Type

我們都知道瀏覽器中可以顯示的內容有HTML、XML、GIF等種類繁多的檔案、媒體等資源,瀏覽器為了區分這些資源,就需要使用MIME-Type,所以說MIME-Type是網路資源的媒體型別,Nginx作為web服務器,也需要能夠識別前端請求的資源型別,

在Nginx的組態檔中,默認有兩行配置

include mime.types;
default_type application/octet-stream;

(1)default_type:用來配置Nginx回應前端請求默認的MIME型別,

語法default_type mime-type;
默認值default_type text/plain;
位置http、server、location

在default_type之前還有一句include mime.types,include之前我們已經介紹過,相當于把mime.types檔案中MIMT型別與相關型別檔案的檔案后綴名的對應關系加入到當前的組態檔中,

舉例來說明:

有些時候請求某些介面的時候需要回傳指定的文本字串或者json字串,如果邏輯非常簡單或者干脆是固定的字串,那么可以使用nginx快速實作,這樣就不用撰寫程式回應請求了,可以減少服務器資源占用并且回應性能非常快,

如何實作:

location /get_text {
	#這里也可以設定成text/plain
    default_type text/html;
    return 200 "This is nginx's text";
}
location /get_json{
    default_type application/json;
    return 200 '{"name":"TOM","age":18}';
}

8.3.2 自定義服務日志

Nginx中日志的型別分access.log、error.log,

access.log:用來記錄用戶所有的訪問請求,

error.log:記錄nginx本身運行時的錯誤資訊,不會記錄用戶的訪問請求,

Nginx服務器支持對服務日志的格式、大小、輸出等進行設定,需要使用到兩個指令,分別是access_log和log_format指令,

(1) access_log:用來設定用戶訪問日志的相關屬性,

語法access_log path[format[buffer=size]]
默認值access_log logs/access.log combined;
位置http, server, location

(2) log_format:用來指定日志的輸出格式,

語法log_format name [escape=default|json|none] string…;
默認值log_format combined “…”;
位置http

8.3.3 其他配置指令

(1) sendfile:用來設定Nginx服務器是否使用sendfile()傳輸檔案,該屬性可以大大提高Nginx處理靜態資源的性能

語法sendfile on|off;
默認值sendfile off;
位置http、server、location

(2) keepalive_timeout:用來設定長連接的超時時間,

》為什么要使用keepalive?

我們都知道HTTP是一種無狀態協議,客戶端向服務端發送一個TCP請求,服務端回應完畢后斷開連接,
如何客戶端向服務端發送多個請求,每個請求都需要重新創建一次連接,效率相對來說比較多,使用keepalive模式,可以告訴服務器端在處理完一個請求后保持這個TCP連接的打開狀態,若接收到來自這個客戶端的其他請求,服務端就會利用這個未被關閉的連接,而不需要重新創建一個新連接,提升效率,但是這個連接也不能一直保持,這樣的話,連接如果過多,也會是服務端的性能下降,這個時候就需要我們進行設定其的超時時間,
語法keepalive_timeout time;
默認值keepalive_timeout 75s;
位置http、server、location

(3) keepalive_requests:用來設定一個keep-alive連接使用的次數,

語法keepalive_requests number;
默認值keepalive_requests 100;
位置http、server、location

8.4 server塊和location塊

server塊和location塊都是我們要重點講解和學習的內容,因為我們后面會對Nginx的功能進行詳細講解,所以這塊內容就放到靜態資源部署的地方給大家詳細說明,

本節我們主要來認識下Nginx默認給的nginx.conf中的相關內容,以及server塊與location塊在使用的時候需要注意的一些內容,

server {
       listen       80;
       server_name  localhost;
       location / {
           root   html;
           index  index.html index.htm;
       }
      
       error_page   500 502 503 504 404  /50x.html;
       location = /50x.html {
           root   html;
       }
 }

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/290219.html

標籤:其他

上一篇:申請https證書相關說明

下一篇:小白式部署前端頁面

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more