盤點Linux運維常用工具(二)-web篇之nginx
阿新 • • 發佈:2020-03-11
1.nginx的概述
1、nginx是一個開源的、支援高效能、高併發的WWW服務和代理服務軟體 2、是由俄羅斯人Igor Sysoev開發的,具有高併發、佔用系統資源少等特性 3、官網:http://nginx.org
#特點
1、支援高併發:能支援幾萬併發連線 2、資源消耗少:在3萬併發連線下,開啟10個nginx程序消耗的記憶體不到200MB 3、開源做HTTP反向代理及加速快取,即負載均衡 4、具備Squid等專業快取軟體等的快取功能 5、支援非同步網路I/O時間模型epoll(Linux2.6+ 核心)
#擴充套件:非同步網路和同步網路
#非同步網路:將資料傳送到緩衝區就返回,傳送成功的訊息是通過事件通知的 #同步網路:收發資料,等到資料真正傳送出去或者接收到,才返回
#nginx的企業應用
1、作為Web服務軟體 2、反向代理或負載均衡 3、前端業務資料快取服務 可通過proxy_cache模組進行快取
#nginx的應用場景
1、使用nginx執行HTML、JS、CSS、小圖片等靜態資料 2、nginx結合FastCGI執行PHP等動態程式 3、nginx結合Tomcat/Resin等支援Java動態程式
#nginx軟體使用排名
#檢視地址:https://w3techs.com/technologies/overview/web_server/all
#2020年的使用排名
2.nginx的安裝
1.編譯安裝 2.rpm安裝
1.rpm安裝
[root@ctos2 ~]# wget -q http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm [root@ctos2 ~]# rpm -ivh epel-release-6-8.noarch.rpm [root@ctos2 ~]# yum install nginx -y #安裝 [root@ctos2 ~]# rpm -qa nginx #檢視軟體是否安裝 nginx-1.16.1-1.el7.x86_64
2.編譯安裝
[root@ctos3 ~]# yum install gcc pcre pcre-devel wget openssl openssl-devel.x86_64 -y #安裝相關依賴包 [root@ctos3 ~]# useradd nginx -s /sbin/nologin -M [root@ctos3 ~]# mkdir -p /home/demo/tools/ [root@ctos3 ~]# cd /home/demo/tools/ [root@ctos3 tools]# wget http://nginx.org/download/nginx-1.16.0.tar.gz [root@ctos3 tools]# tar xf nginx-1.16.0.tar.gz [root@ctos3 tools]# cd nginx-1.16.0/ [root@ctos3 nginx-1.16.0]# ./configure --user=nginx --group=nginx --prefix=/application/nginx --with-http_stub_status_module --with-http_ssl_module [root@ctos3 nginx-1.16.0]# make -j 2 && make instal #安裝 [root@ctos3 nginx]# /application/nginx/sbin/nginx -t #檢視語法有誤錯誤 nginx: the configuration file /application/nginx/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx/conf/nginx.conf test is successful [root@ctos3 nginx]# /application/nginx/sbin/nginx #啟動服務 [root@ctos3 nginx]# ss -untpl | grep 80 #檢視服務是否啟動 [root@ctos3 ~]# /application/nginx/sbin/nginx -V #安裝完後檢視版本 nginx version: nginx/1.16.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --user=nginx --group=nginx --prefix=/application/nginx --with-http_stub_status_module --with-http_ssl_module
#引數介紹
1.yum install openssl-devel #是為了支援SSL 2.可以使用./configure --help檢視相關引數的幫助 3. --prefix=PATH #設定安裝路徑 4. --user=USER #程序使用者許可權 5. --group=GROUP #程序使用者組許可權 6. --with-http-stub_status_module #啟用狀態資訊 7. --with-http_ssl_module #啟用ssl功能 8. /application/nginx/sbin/nginx -t #語法檢查 9. /application/nginx/sbin/nginx #啟動服務 10. /application/nginx/sbin/nginx -s reload #重啟
#檢視配置編譯後的配置檔案資訊
[root@ctos3 ~]# tree /application/nginx/ /application/nginx/ ├── client_body_temp ├── conf #配置檔案目錄 │ ├── fastcgi.conf │ ├── fastcgi.conf.default │ ├── fastcgi_params │ ├── fastcgi_params.default │ ├── koi-utf │ ├── koi-win │ ├── mime.types │ ├── mime.types.default │ ├── nginx.conf #主配置檔案 │ ├── nginx.conf.default │ ├── scgi_params │ ├── scgi_params.default │ ├── uwsgi_params │ ├── uwsgi_params.default │ └── win-utf ├── fastcgi_temp ├── html │ ├── 50x.html │ └── index.html ├── logs │ ├── access.log │ ├── error.log │ └── nginx.pid ├── proxy_temp ├── sbin │ └── nginx ├── scgi_temp └── uwsgi_temp
#提示:
#1.temp結尾的檔案是臨時檔案
#2.default結尾的檔案是備份檔案
3.nginx的常用模組
4.nginx的虛擬主機
1、虛擬主機就是一個獨立的站點,這個站點對應獨立的域名、或者使IP或埠,也有獨立的程式和資源目錄 2、由一定的格式標籤段標記,Apache使用<VirtualHost></VirtualHost>,nginx使用server{} 來標籤一個虛擬主機,也支援多個虛擬主機 3、虛擬主機的官網配置文件:http://Nginx.org/en/docs/http/request_processing.html
#虛擬主機的型別
1.基於域名的虛擬主機 2.基於埠的虛擬主機 3.基於IP的虛擬主機
#配置不同型別的虛擬主機
#1.配置基於域名的虛擬主機
[root@ctos3 ~]# cd /application/nginx/conf/ [root@ctos3 conf]# grep -Ev '^$|#' nginx.conf.default > nginx.conf [root@ctos3 conf]# cat nginx.conf http { server { listen 80; server_name www.guoke.com; location / { root html; index index.html index.htm; } } server { listen 80; server_name bbs.guoke.com; location / { root html/bbs; index index.html index.htm; } } }
#2.配置基於埠的虛擬主機
只需將埠改成不同的就可以了
#3.配置基於IP的虛擬主機
本地有多個IP,然後listen監聽改成是地址,server_name也相應的修改一下
#總結配置虛擬主機的步驟
1、增加一個完整的server標籤段,要放再http裡面 2、更改server_name及root根目 錄 3、建立index.html檔案 4、檢查語法然後重啟服務 5、訪問
5.nginx的反向代理
反向代理:接收使用者請求代替使用者去後端訪問
#反向代理的重要引數
#例子:為10.1.1.1做域名www.guoke.com的代理,當訪問www.guoke.com就會訪問到10.1.1.1伺服器上,也可以寫upstream伺服器池
Server { Listen 80; Server_name www.guoke.com; Location / { Proxy_pass http://10.1.1.1; Proxy_set_header Host $host; } }
6.nginx的負載均衡
可以對使用者的訪問請求進行排程處理,對使用者的訪問請求進行壓力分擔
#關鍵引數upstream
#upstream的相關引數說明
server 10.10.1.1:80 weight=2 max_fails=3 fail_timeout=10 backup;
#配置例子:為www.guoke.com域名做負載均衡排程
http { upstream server{ server 192.168.226.146:80; server 192.168.226.147:80; } server { listen 80; server_name www.guoke.com; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://server; } }
#附加負載均衡有關的面試題
nginx有哪幾種排程演算法,這幾種區別是什麼 常用的有3種排程演算法(輪詢,ip hash,權重) 輪詢是預設的,每個請求按時間順序逐一分配都不同的後端服務,如果後端某臺伺服器宕機就會自動剔除故障系統,讓使用者訪問不受影響 權重:權重的值越大,訪問的概率就越高 iphash:請求按訪問的IP的雜湊結果分配,使來自同一個IP的訪客固定訪問一臺後端伺服器,可以解決會話問題
7.nginx的其他相關功能
7.1.別名
別名就是為虛擬主機設定除了主域名以外的一個或多個域名名字 配置方法 在原有的域名上新增server_name www.baidu.com baidu.com 應用場景 多數企業網站希望訪問www.baidu.com和baidu.com,所瀏覽的事一個頁面
7.2.狀態資訊功能
Nginx status介紹 模組為ngx_http_stub_status_module,主要是記錄nginx的基本訪問狀態資訊,如果想要新增,在編譯的時候就加入http_stub_status_module 配置:在location / { stub_status on }
7.3.錯誤日誌
#常見的日誌級別:[debug|info|notice|warn|error|crit|alert|emerg],級別越高,記錄的資訊越少 #error_log的預設值為 #default: error_log logs/error.log error; #參考資料:http://nginx.org/en/docs/ngx_core_module.html#error_log #配置 error_log logs/error.log;
7.4.訪問日誌
#access_log logs/access.log main;
7.5.日誌輪詢切割
預設情況下nginx會把所有的訪問日誌生成到一個指定日誌檔案access.log中,但是如果時間長了日誌檔案會很大,不利於分析和處理,所以又必要對日誌按天或按小時進行切割 #切割指令碼 [root@ctos3 script]# pwd /script [root@ctos3 script]# cat cut_ng_log.sh #!/bin/bash Dateformat=`date +%Y%m%d` #定義時間格式 Basedir="application/nginx" #目錄名 Nginxlogdir="$Basedir/logs" #日誌目錄 Logname="access_www" #日誌的名字 [ -d $Nginxlogdir ] && cd $Nginxlogdir exit 1 [ -f ${Logname}.log ] exit 1 /bin/mv ${Logname}.log ${Dateformat}_${Logname}.log #放訪問的日誌更名,加上時間 $Basedir/sbin/nginx -s reload #重啟服務 #然後將指令碼放進定時任務裡面,每天的00:00執行 [root@ctos3 ~]# cat /etc/crontab 00 00 * * * /bin/sh /script/cut_ng_log.sh > /dev/null
7.6.location
location指令的作用是根據使用者請求的URI來執行不同的應用
語法:location [=|~|~*|^~] uri{...}
7.7.rewrite
Nginx rewrite的主要功能是實現URL地址重寫
指令語法:rewrite regex replacement[flag]; #例子: server { listen 80; server_name guoke.com; rewrite ^/ (*.)http://www.guoke.com/$1 permanent;
#引數介紹
rewrite為固定關鍵字
regex匹配正則表示式
$1:取前面regex部分括號裡的內容
permanent:301永久跳轉
7.8.訪問認證
通常我們會為網站設定一些訪問認證,設定需要使用者認證訪問的,一般主要應用在企業內部人員的訪問地址上,例如企業網站後臺
#例子:
#配置基本使用者認證 [root@ctos3 conf]# cat nginx.conf server { listen 80; server_name localhost; location / { root html; index index.html index.htm; auth_basic "guoke"; auth_basic_user_file /application/nginx/conf/htpasswd; } } #提示:預設沒有htpasswd這個命令,需要安裝httpd才有 [root@ctos3 conf]# yum install httpd -y [root@ctos3 conf]# which htpasswd /usr/bin/htpasswd #建立使用者和密碼 [root@ctos3 conf]# htpasswd -bc /application/nginx/conf/htpasswd guoke guoke123 Adding password for user guoke [root@ctos3 conf]# chmod 400 /application/nginx/conf/htpasswd #修改許可權 [root@ctos3 conf]# chown nginx /application/nginx/conf/htpasswd [root@ctos3 conf]# /application/nginx/sbin/nginx -t #檢查語法 nginx: the configuration file /application/nginx/conf/nginx.conf syntax is ok nginx: configuration file /application/nginx/conf/nginx.conf test is successful
#訪問效果
#引數講解:
auth_basic:設定認證提示字串 auth_basic_user_file:用於設定認證的密碼檔案
&n