Spring第十篇【事務配置】
一、nignx相關概念
1、nginx是什麼?
nginx是一個開源、支援高效能高併發的www服務和代理服務軟體。
2、nginx主要應用
web服務軟體
nginx是一個支援高效能,高併發的web服務軟體,它具有很多優秀的特性,作為web伺服器,與apache相比,nginx能夠支援更多的併發連線訪問,但是佔用的資源確實更少,效率更高,在功能上也強大了很多,幾乎不遜色於apache。
反向代理或負載均衡服務
在反向代理或負載均衡方面,nginx可以作為web服務、php等動態服務及memcached快取的代理伺服器。
前端業務資料快取服務
在web快取服務方面,nginx可通過自身的proxy_cache模組實現快取軟體的功能。
3、反向代理和正向代理的區別
https://www.cnblogs.com/taostaryu/p/10547132.html
4、如何正確選擇web伺服器
靜態業務:如是高併發場景,儘量採用nginx;
動態業務:理論上採用nginx和apache均可,建議選擇nginx。動態業務可以有nginx兼做前端代理,再根據頁面元素的型別或者目錄,轉發到後端相應伺服器進行處理;
既有靜態業務又有動態業務:採用nginx
二、nginx安裝
1、檢視當前linux系統環境:cat /etc/redhat-release uname -m
2、安裝nginx所需要的pcre庫
安裝pcre庫是為了使nginx只是具備uri重寫功能的rewrite模組。
yum install pcre pcre-devel -y
rpm -qa pcre-devel pcre
3、安裝nghinx所需要的openssl庫
nginx在使用https服務的時候要用到此模組
rpm -qa openssl openssl-devel
4、安裝nginx
mkdir -p /home/zhaoyang/tools cd /home/zhaoyang/tools wget -q http://nginx.org/download/nginx-1.6.3.tar.gz ls -l nginx-1.6.3.tar.gz tar xf nginx-1.6.3.tar.gz useradd nginx-s /sbin/nologin -M cd nginx-1.6.3/ ./configure --user=nginx --group=nginx --prefix=/applicaiton/nginx/ --with-http_stub_status_module --with-http_ssl_module make make install /application/ nginx/sbin/nginx netstat -lnt|grep 80 curl 127.0.0.1
5、nginx的目錄結構
6、nginx主配置檔案nginx.conf
因為nginx配置檔案數百行,我們先去掉所有的預設註釋行:
egrep -v "#|^$" nginx.conf.default
整個nginx配置檔案核心框架如下:
三、nginx虛擬主機配置
1、虛擬主機概念
所謂虛擬主機,在web服務裡就是一個獨立的網站站點。這個站點對應獨立的域名,具有獨立的程式以及資源,可以獨立的對外提供服務共使用者訪問;
在nginx中使用一個server{}來表示一個虛擬主機,一個web服務裡面可以有多個虛擬主機,就是可以支援多個虛擬主機站點;
2、虛擬主機型別
基於域名的虛擬主機
根據不同的域名來區分不同的虛擬主機,該方式是現在最為廣泛使用的。(掌握)
基於埠的虛擬主機
根據不同的埠來區分不同的虛擬主機(瞭解)
基於ip的虛擬主機
根據不同的ip來區分不同的虛擬主機(瞭解)
3、基於域名的虛擬主機配置
使用grep過濾命令來生成基礎的nginx主配置檔案nginx.conf,然後根據生成的初始化配置進行修改。
diff nginx.conf nginx.conf.default
egrep -v "#|^$" nginx.conf.default >nginx.conf
建立域名對應的站點目錄和檔案
mkdir ../html/www -p
echo "http://www.etiantian.org" >../html/www/index.html
檢查語法並重新載入nginx
../sbin/nginx -t
../sbin/nginx -s reload
配置本地hosts檔案
echo "120.25.122.83www.etiantian.org" >> /etc/hosts
驗證配置站點是否成功
4、配置多個基於域名的虛擬主機
其實就是將server複製一份,修改相應的域名和站點目錄即可
建立域名對應的站點目錄和檔案
mkdir ../html/bbs -p
mkdir ../html/blog -p
echo "http://bbs.etiantian.org" >../html/bbs/index.html
echo "http://blog.etiantian.org" >../html/blog/index.html
配置本地hosts檔案
echo "120.25.122.83www.etiantian.org bbs.etiantian.org blog.etiantian.org" >> /etc/hosts
5、nginx配置虛擬主機的步驟
-
- 增加一個完整的server標籤段大結尾處,注意要放在http的結束大括號前面,也就是將server標籤放入http標籤;
- 更改server_name以及對應網頁的root根目錄,如果需要其他引數可以增加或者修改;
- 建立server_name域名對應的網頁根目錄,並且建立測試檔案,如果沒有index首頁,訪問會出現403錯誤;
- 檢查nginx配置檔案語法,平滑重新nginx服務,快速檢查啟動結果;
- 在客戶端對server_name初的配置的於ing做host解析或dns解析;
- 驗證域名訪問配置是否正確;
6、nginx常用功能配置
6.1、配置檔案的優化
nginx的主配置檔案為nginx.conf,主配置檔案包含的所有虛擬主機的子配置檔案會統一放到extra目錄中,虛擬主機的配置檔案按照網站的域名或功能取名,例如www.conf、bbs.conf、blog.conf等。當然如果虛擬主機的數量不是很多,也可以把多個虛擬主機配置成一個單獨的配置檔案,僅僅和nginx的主配置檔案分離開就行了;
6.2、虛擬主機別名
其實就是為虛擬主機設定一個出了主域名以外的一個或多個域名,這樣就能實現使用者訪問多個域名對應同一個虛擬主機網站的功能了。
6.3、nginx狀態資訊功能
nginx status:nginx軟體的功能模組中有一個ngx_http_stub_status_module模組,這個模組的主要功能是記錄nginx的基本訪問狀態資訊,讓使用者瞭解nginx的工作狀態。
通過如下方法檢查編譯安裝ginx時是否設定了上述模組
../sbin/nginx -V
配置nginx status
增加一個狀態配置檔案status.conf
然後在主配置檔案中增加了 include extra/status.conf;
配置本地hosts檔案
../sbin/nginx -t
../sbin/nginx -s reload
nginx status 現實結果詳解
active connections 表示nginx正在處理的活動連線數
server表示nginx啟動到現在共處理了多少個連線
accepts 表示nginx啟動到現在共成功建立了多少次握手
handled requests 表示總共處理的多少次請求
reading為nginx杜族客戶端的header資訊數
writing 為nginx返回客戶端的header資訊數
waiting 為nginx已經處理完正在等候下一次請求指令的駐留連結
6.4、nginx增加錯誤日誌error_log
nginx軟體會把自身執行的故障資訊以及使用者訪問的日誌資訊記錄到指定的日誌檔案裡。
配置記錄nginx的錯誤資訊是除錯nhinx服務的重要手段,該引數的名字為error_log,可以放在main區塊中全域性配置,也可以放在不同的虛擬機器中單獨記錄;
error_log 語法格式以及引數說明
error_log file level;
關鍵字 日誌檔案 錯誤日誌級別
關鍵字不能改變
日誌檔案可以指定任意存放日誌的目錄
錯誤級別常見的有debug、info、notice、warn、error、crit、alert、emerg,級別越高記錄的資訊越少,生產場景一般是warn、error、crit這三個其中之一,不能配置info等較低級別,會帶來巨大的磁碟io消耗
預設格式
#default:error_log logs/error.log error;
可以放置的標籤段
#context:main、http、server、location
nginx錯誤日誌配置
6.5、nginx訪問日誌(access_log)
- nginx軟體會把每個使用者訪問網站的日誌資訊記錄到指定的日誌檔案裡,以供網站的提供者分析使用者的瀏覽行為;此功能由ngx_http_log_module模組負責;
- nginx預設的日誌格式如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
預設放置在http標籤內:
- nginx記錄日誌的預設引數配置如下:
access_log logs/access.log main;
可以放置在http、server、location等標籤內
6.6、nginx的location
作用:
location指令的作用是根據使用者請求的uri來執行不同的應用。其實就是根據使用者請求的網站地址進行匹配,匹配成功就進行相關的操作;
語法:
location [ = | ~ | ~* | ^~ |@] uri { }
指令 匹配標示 匹配的網站網址 匹配uri後要執行的配置段
~和~*的區別在於前者匹配大小寫,後者不區分大小寫;
^~ 作用是在進行常規字串匹配檢查手,不做正則表示式的檢查;
-
- 沒有修飾符 表示:必須以指定模式開始,如:
server { server_name baidu.com; location /abc { …… } }
那麼,如下是對的:
http://baidu.com/abc
http://baidu.com/abc?p1
http://baidu.com/abc/
http://baidu.com/abcde
-
- =表示:必須與指定的模式精確匹配
server { server_name sish location = /abc { …… } } 那麼,如下是對的: http://baidu.com/abc http://baidu.com/abc?p1 如下是錯的: http://baidu.com/abc/ http://baidu.com/abcde
-
- ~ 表示:指定的正則表示式要區分大小寫
server { server_name baidu.com; location ~ ^/abc$ { …… } } 那麼,如下是對的: http://baidu.com/abc http://baidu.com/abc?p1=11&p2=22 如下是錯的: http://baidu.com/ABC http://baidu.com/abc/ http://baidu.com/abcde
-
- ~* 表示:指定的正則表示式不區分大小寫
server { server_name baidu.com; location ~* ^/abc$ { …… } } 那麼,如下是對的: http://baidu.com/abc http://baidu..com/ABC http://baidu..com/abc?p1=11&p2=22 如下是錯的: http://baidu..com/abc/ http://baidu..com/abcde
-
- ^~ 類似於無修飾符的行為,也是以指定模式開始,不同的是,如果模式匹配,
那麼就停止搜尋其他模式了。
-
- @ :定義命名location區段,這些區段客戶段不能訪問,只可以由內部產生的請
求來訪問,如try_files或error_page等
6.7、反向代理以及負載均衡