深入淺出學習透析 Nginx 伺服器的基本原理和設定指南「運維操作實戰篇」

2022-12-02 15:01:12

Nginx前提回顧

Nginx 是一個高效能的 Web 和反向代理伺服器, 它具有有很多非常優越的特性:

  • Web伺服器:相比 Apache,Nginx 使用更少的資源,支援更多的並行連線,體現更高的效率,這點使 Nginx 尤其受到虛擬主機提供商的歡迎。能夠支援高達 50,000 個並行連線數的響應,感謝 Nginx 為我們選擇了 epoll and kqueue 作為開發模型.

  • 負載均衡伺服器:Nginx 既可以在內部直接支援 Rails 和 PHP,也可以支援作為 HTTP代理伺服器 對外進行服務。Nginx 用 C 編寫, 不論是系統資源開銷還是 CPU 使用效率都比 Perlbal 要好的多。

  • 郵件代理伺服器: Nginx 同時也是一個非常優秀的郵件代理伺服器(最早開發這個產品的目的之一也是作為郵件代理伺服器),Last.fm 描述了成功並且美妙的使用經驗。

Nginx 安裝非常的簡單,且Nginx 啟動特別容易,並且幾乎可以做到24小時不間斷執行,即使執行數個月也不需要重新啟動。你還能夠在不間斷服務的情況下進行軟體版本的升級。接下來我們要針對於安裝和運維操作進行實戰和分析。

Nginx安裝指南

Windows 安裝

  1. 首先,進入官方下載地址,如下圖所示,之後我們選擇合適版本(nginx/Windows-xxx),進行點選下載。

  1. 下載結束之後進行解壓操作

  1. 啟動Nginx服務即可

使用CMD命令start命令啟動nginx,再執行nginx,到nginx所在目錄,如果啟動前已經啟動nginx並記錄下pid檔案,會kill指定程序,按照指定設定去啟動nginx

nginx.exe -c conf/nginx.conf

-t:代表測試組態檔語法正確性

nginx.exe -c -t conf\nginx.conf
  1. 啟動Nginx服務即可
nginx.exe -s stop
  1. 顯示版本資訊
nginx.exe -v
  1. 存取測試

啟動成功後,瀏覽器存取 localhost,即可看到Nginx 歡迎頁

Windows下的Nginx命令介紹

Nginx 的使用比較簡單,就是幾條命令,常用到的命令如下(nginx.exe 可以等價於nginx):

  • nginx -s stop 快速關閉Nginx,可能不儲存相關資訊,並迅速終止web服務。
  • nginx -s quit 平穩關閉Nginx,儲存相關資訊,有安排的結束web服務。
  • nginx -s reload 因改變了Nginx相關設定,需要重新載入設定而過載。
  • nginx -s reopen 重新開啟紀錄檔檔案。
  • nginx -c filename 為 Nginx 指定一個組態檔,來代替預設的。
  • nginx -t 不執行,僅僅測試組態檔。nginx 將檢查組態檔的語法的正確性,並嘗試開啟組態檔中所參照到的檔案。
  • nginx -v 顯示 nginx 的版本。
  • nginx -V 顯示 nginx 的版本,編譯器版本和設定引數。

MacOSX 安裝

Mac OSX 安裝特別簡單,首先你需要安裝 Brew, 通過 brew 快速安裝 nginx。

安裝nginx

brew install nginx
# Updating Homebrew...
# ==> Auto-updated Homebrew!
# Updated 2 taps (homebrew/core, homebrew/cask).
# ==> Updated Formulae
# ==> Installing dependencies for nginx: openssl, pcre
# ==> Installing nginx dependency: openssl
# ==> Downloading https://homebrew.bintray.com/bottles/openssl-1.0.2o_1.high_sierra.bottle.tar.gz
# ######################################################################## 100.0%
# ==> Pouring openssl-1.0.2o_1.high_sierra.bottle.tar.gz
# ==> Caveats
# A CA file has been bootstrapped using certificates from the SystemRoots
# keychain. To add additional certificates (e.g. the certificates added in
# the System keychain), place .pem files in
#   /usr/local/etc/openssl/certs
# 
# and run
#   /usr/local/opt/openssl/bin/c_rehash
# 
# This formula is keg-only, which means it was not symlinked into /usr/local,
# because Apple has deprecated use of OpenSSL in favor of its own TLS and crypto libraries.
# 
# If you need to have this software first in your PATH run:
#   echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc
# 
# For compilers to find this software you may need to set:
#     LDFLAGS:  -L/usr/local/opt/openssl/lib
#     CPPFLAGS: -I/usr/local/opt/openssl/include
# For pkg-config to find this software you may need to set:
#     PKG_CONFIG_PATH: /usr/local/opt/openssl/lib/pkgconfig
# 
# ==> Summary
# ?  /usr/local/Cellar/openssl/1.0.2o_1: 1,791 files, 12.3MB
# ==> Installing nginx dependency: pcre
# ==> Downloading https://homebrew.bintray.com/bottles/pcre-8.42.high_sierra.bottle.tar.gz
# ######################################################################## 100.0%
# ==> Pouring pcre-8.42.high_sierra.bottle.tar.gz
# ?  /usr/local/Cellar/pcre/8.42: 204 files, 5.3MB
# ==> Installing nginx
# ==> Downloading https://homebrew.bintray.com/bottles/nginx-1.13.12.high_sierra.bottle.tar.gz
# ######################################################################## 100.0%
# ==> Pouring nginx-1.13.12.high_sierra.bottle.tar.gz
# ==> Caveats
# Docroot is: /usr/local/var/www
# 
# The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
# nginx can run without sudo.
# 
# nginx will load all files in /usr/local/etc/nginx/servers/.
# 
# To have launchd start nginx now and restart at login:
#   brew services start nginx
# Or, if you don't wacd /usr/local/Cellar/nginx/1.13.12/n just run:
# cd /usr/local/Cellar/nginx/1.13.12/

啟動服務

注意預設埠不是80檢視確認埠是否被佔用。

brew services start nginx

http://localhost:8080/

CentOS安裝

Nginx可以使用各平臺的預設包來安裝,包括具體的編譯引數資訊。正式開始前,編譯環境gcc g++ 開發庫之類的需要提前裝好,這裡預設你已經裝好。CentOS6.5左右預設這兩個包都沒安裝全,所以這兩個都執行安裝即可。

yum -y install gcc make gcc-c++ wget
yum -y install openssl openssl-devel

安裝依賴

prce(重定向支援)和openssl(https支援,如果不需要https可以不安裝。)

yum install -y pcre-devel 

其他版本也可以採用一下指令執行

安裝make:
yum -y install gcc automake autoconf libtool make
安裝g++:
 yum -y install gcc make gcc-c++ openssl-devel

如果不安裝會出現安裝報錯誤的話比如:「C compiler cc is not found」,這個就是缺少編譯環境,安裝一下就可以了。

下載

下載Linux版本的地址根頁面:http://nginx.org/download/,如下圖所示。

如果沒有安裝wget

下載已編譯版本
yum install wget
wget http://nginx.org/download/nginx-1.X.X.tar.gz
解壓壓縮包
tar -zxvf nginx-X.X.X.tar.gz
編譯安裝

然後進入目錄編譯安裝,configure引數說明

cd nginx-1.xx
./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/usr/local/src/pcre-8.34 \
--with-zlib=/usr/local/src/zlib-1.2.8 \
--with-openssl=/usr/local/src/openssl-1.0.1c
configure引數設定介紹

./configure --prefix=/你的安裝目錄 --add-module=/第三方模組目錄

  • —prefix=path 定義一個目錄,存放伺服器上的檔案 ,也就是nginx的安裝目錄。預設使用 /usr/local/nginx。
  • —sbin-path=path 設定nginx的可執行檔案的路徑,預設為 prefix/sbin/nginx.
  • —conf-path=path 設定在nginx.conf組態檔的路徑。nginx允許使用不同的組態檔啟動,通過命令列中的-c選項。預設為prefix/conf/nginx.conf.
  • —pid-path=path 設定nginx.pid檔案,將儲存的主程序的程序號。安裝完成後,可以隨時改變的檔名 , 在nginx.conf組態檔中使用 PID指令。預設情況下,檔名 為prefix/logs/nginx.pid.
  • —error-log-path=path 設定主錯誤,警告,和診斷檔案的名稱。安裝完成後,可以隨時改變的檔名 ,在nginx.conf組態檔中 使用 的error_log指令。預設情況下,檔名 為prefix/logs/error.log.
  • —http-log-path=path 設定主請求的HTTP伺服器的紀錄檔檔案的名稱。安裝完成後,可以隨時改變的檔名 ,在nginx.conf組態檔中 使用 的access_log指令。預設情況下,檔名 為prefix/logs/access.log.
  • —user=name 設定nginx工作程序的使用者。安裝完成後,可以隨時更改的名稱在nginx.conf組態檔中 使用的 user指令。預設的使用者名稱是nobody。
  • —group=name 設定nginx工作程序的使用者組。安裝完成後,可以隨時更改的名稱在nginx.conf組態檔中 使用的 user指令。預設的為非特權使用者。
  • —with-select_module``—without-select_module 啟用或禁用構建一個模組來允許伺服器使用select()方法。該模組將自動建立,如果平臺不支援的kqueue,epoll,rtsig或/dev/poll。
  • —with-poll_module``—without-poll_module 啟用或禁用構建一個模組來允許伺服器使用poll()方法。該模組將自動建立,如果平臺不支援的kqueue,epoll,rtsig或/dev/poll。
  • —without-http_gzip_module — 不編譯壓縮的HTTP伺服器的響應模組。編譯並執行此模組需要zlib庫。
  • —without-http_rewrite_module 不編譯重寫模組。編譯並執行此模組需要PCRE庫支援。
  • —without-http_proxy_module — 不編譯http_proxy模組。
  • —with-http_ssl_module — 使用https協定模組。預設情況下,該模組沒有被構建。建立並執行此模組的OpenSSL庫是必需的。
  • —with-pcre=path — 設定PCRE庫的原始碼路徑。PCRE庫的原始碼(版本4.4 - 8.30)需要從PCRE網站下載並解壓。其餘的工作是Nginx的./ configure和make來完成。正規表示式使用在location指令和 ngx_http_rewrite_module 模組中。
  • —with-pcre-jit —編譯PCRE包含「just-in-time compilation」(1.1.12中, pcre_jit指令)。
  • —with-zlib=path —設定的zlib庫的原始碼路徑。要下載從 zlib(版本1.1.3 - 1.2.5)的並解壓。其餘的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模組需要使用zlib 。
  • —with-cc-opt=parameters — 設定額外的引數將被新增到CFLAGS變數。例如,當你在FreeBSD上使用PCRE庫時需要使用:—with-cc-opt="-I /usr/local/include。.如需要需要增加 select()支援的檔案數量:—with-cc-opt="-D FD_SETSIZE=2048".
  • —with-ld-opt=parameters —設定附加的引數,將用於在連結期間。例如,當在FreeBSD下使用該系統的PCRE庫,應指定:—with-ld-opt="-L /usr/local/lib".

kqueue(sun os),epoll (linux kenel 2.6+), rtsig(- 實時訊號)或者/dev/poll(一種類似select的模式,底層實現與SELECT基本相 同,都是採用輪訓方法) SELECT模式將是預設安裝模式

啟動後會進行列印對應的設定資訊

....
Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + using system zlib library
  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx modules path: "/usr/local/nginx/modules"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

Requires OpenSSL. On Debian, this is libssl-dev. 開啟HTTP SSL模組,使NGINX可以支援HTTPS請求。這個模組需要已經安裝了OPENSSL,在DEBIAN上是libssl

編譯原始碼

設定完成之後,使用 make 和 make install 編譯和安裝 nginx。

rpm 包方式(推薦)

  1. 進入下載頁面:http://nginx.org/packages/

  1. 選擇合適版本下載:http://nginx.org/packages/centos/7/noarch/RPMS,如下圖所示。

$ wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  1. 安裝 nginx rpm 包

nginx rpm 包實際上安裝的是 nginx 的 yum 源。

$ rpm -ivh nginx-*.rpm
  1. 正式安裝 rpm 包
$ yum install nginx
  1. 關閉防火牆
$ firewall-cmd --zone=public --add-port=80/tcp --permanent
$ firewall-cmd --reload
make
make install

CentOS7 環境安裝指令碼

安裝說明

  • 採用編譯方式安裝 Nginx, 並將其註冊為 systemd 服務

  • 安裝路徑為:/usr/local/nginx

  • 預設下載安裝 1.16.0 版本

使用方法

預設安裝 - 執行以下任意命令即可:

curl -o- https://gitee.com/turnon/linux-tutorial/raw/master/codes/linux/soft/nginx-install.sh | bash
wget -qO- https://gitee.com/turnon/linux-tutorial/raw/master/codes/linux/soft/nginx-install.sh | bash

自定義安裝 - 下載指令碼到本地,並按照以下格式執行:

sh nginx-install.sh [version]

服務管理(1)

啟動
/usr/local/nginx/sbin/nginx
重啟
/usr/local/nginx/sbin/nginx -s reload
關閉程序
/usr/local/nginx/sbin/nginx -s stop
平滑關閉nginx
/usr/local/nginx/sbin/nginx -s quit
檢視nginx的安裝狀態,
/usr/local/nginx/sbin/nginx -V

服務管理(2)

啟動nginx服務
systemctl start nginx.service
停止開機自啟動
systemctl disable nginx.service
檢視服務當前狀態
systemctl status nginx.service
檢視所有已啟動的服務
systemctl list-units --type=service
重新啟動服務
systemctl restart nginx.service
設定開機自啟動
systemctl enable nginx.service
檢查服務狀態
systemctl is-enabled servicename.service # 查詢服務是否開機啟動
systemctl enable *.service # 開機執行服務
systemctl disable *.service # 取消開機執行
systemctl start *.service # 啟動服務
systemctl stop *.service # 停止服務
systemctl restart *.service # 重啟服務
systemctl reload *.service # 重新載入服務組態檔
systemctl status *.service # 查詢服務執行狀態
systemctl --failed # 顯示啟動失敗的服務

Nginx解除安裝指南

如果通過yum安裝,使用下面命令安裝。

yum remove nginx

編譯安裝,刪除/usr/local/nginx目錄即可,如果設定了自啟動指令碼,也需要刪除。

防火牆管理

CentOS 7或RHEL 7或Fedora中防火牆由 firewalld 來管理

假如採用傳統請執行一下命令:

傳統命令

systemctl stop firewalld
systemctl mask firewalld

或者設定防火牆過濾規則

Iptables 是用來設定、維護和檢查 Linux核心 的IP包過濾規則的。

安裝命令

yum install iptables-services
systemctl enable iptables 
service iptables restart