java架構之路-(五)nginx的安裝和基本配置

  • 2019 年 10 月 5 日
  • 筆記

Linux是一套免費使用和自由傳播的類Unix作業系統,是一個基於POSIX和Unix的多用戶、多任務、支援多執行緒和多CPU的作業系統。它能運行主要的Unix工具軟體、應用程式和網路協議。它支援32位64位硬體。Linux繼承了Unix以網路為核心的設計思想,是一個性能穩定的多用戶網路作業系統。

一,安裝環境準備:

1.linux 內核2.6及以上版本:使用uname -a查看即可。

2.GCC編輯器。

GCC可以用來編譯C語言程式。Nginx沒有直接提供二級制可執行程式,只能下載源碼進行編譯。

3.PCRE庫。

PCRE是為了讓Nginx支援正則表達式。

4.zlib庫

zlib庫用於HTTP包的內容做gzip格式的壓縮,如果我們在nginx.conf里配置了gzip on,並指定對於某些類型的HTTP響應使用gzip來進行壓縮,以減少網路傳輸量。

5.OpenSSL開發庫

如果我們的伺服器不只是要支援HTTP,還需要在更安全的SSL協議上傳輸HTTP,那麼就需要擁有OpenSSL了。另外,如果我們想使用MD5,SHA1等散列函數,那麼也需要安裝OpenSSL庫。

安裝命令:

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre pcre-devel

二,開始編譯與安裝:

1.Nginx下載地址:http://nginx.org/en/download.html

直接去官網下載文件也可以,或者Linux直接輸入 wget http://nginx.org/download/nginx-1.14.0.tar.gz

2.解壓tar -zxvf nginx-1.14.0.tar.gz

3.默認安裝(不採用任何模組)

./configure 等待執行結束以後,默認會安裝在/usr/local/nginx下。

也可以添加模組。例如:

# 添加狀態查查看模組

./configure –with-http_stub_status_module

4.啟動

我們切換到默認安裝文件夾下查看一下文件。大概是這個樣子的。

我們輸入./sbin/nginx 也就啟動我們的ngxin了

#查看命令幫助

./sbin/nginx -?

#默認方式啟動:

./sbin/nginx

#指定配置文件啟動

./sbing/nginx -c /tmp/nginx.conf

#指定nginx程式目錄啟動

./sbin/nginx -p /usr/local/nginx/

地址欄輸入我們的IP,就可以訪問Nginx了,默認監聽80埠。

5.幫助命令

當我們輸入./sbin/nginx -h我們會看到如下所示

-?,-h查看幫助文檔。

-v(小寫) 查看版本資訊

-V(大寫)查看詳細版本資訊,帶插件資訊

-t (小寫)檢查配置文件是否正確

-T (大寫)檢查配置文件是否正確,並且查看一下。

-q 監聽ngxin是否可以正常使用,以及查看埠。

-s 發送指令 比如-s stop停止服務。 -s quit 處理完當前的任務就停止服務 -s reopen 重新載入配置文件(比如日誌文件綁定句柄的行為)。-s reload(重現記載配置,相當於重新啟動)

-p 設置前綴路徑

-c 指定配置文件啟動

-g 給予參數啟動,例如./sbin/nginx -g "user root;"以root用戶啟動。

在剛才的解壓目錄下輸入 ./configure –help 也會得到幫助命令。這個是編譯過程的命令。太多了,沒法一個個說,有的還幾乎不用。可以去官網自己查看,地址http://nginx.org/en/docs/configure.html

說兩個命令比較常用的。

./configure –prefix=path 指定你的安裝路徑,不然會默認安裝在/usr/src/nginx下。

./configure –user=name 指定用戶啟動,設置非特權用戶的名稱,其憑據將由工作進程使用。安裝後,可以nginx.conf使用user指令在配置文件中 更改名稱 。默認用戶名是nobody。如不設置,可能造成日誌文件無法使用的情況發生

三,Nginx架構說明

我們在控制台輸入ps -ef|grep nginx,這時我們會看到

他包含了兩個進程,一個是master,一個是worker,master是核心管理進程,worker是實際工作的進程,一般來說一個worker運行在一個CPU的一個核上。如果我們是4核CPU,那麼我們建議將worker進程配置成小於等於4的。

簡單說一下nginx為啥快,用到了NIO為啥就快。

nginx接收到請求,會告知CPU,我們要得到什麼數據,需要從硬碟哪個位置得到數據。但是它告知完事以後它就走了,不在原地等待數據的返回,返回後繼續處理接收到的請求。nginx會保留一個實時查看哪些請求處理完成了,處理完成了就會返回到客戶端。(粗略的說一下,後面會詳細的說)

四,Nginx簡單配置(正向代理)

我們的配置都存在/usr/local/nginx/conf/nginx.conf下,我們來看一下都是做什麼的。

第一行,箭頭所指位置就是我們的工作執行緒數,默認是1

事件模組,內部默認設置的是最大連接數1024。

http是最常用的配置。我們來詳細說明一下。這裡只說簡單的配置,高級配置在優化Nginx再說。

http只能存在一個

sendfile 內核態是否到用戶態的一個開關

keepalive_timeout 閑置連接最大超時時間。

server配置一個具體的站點,可以設置多個。

listen監聽的埠號

server_name 監聽的域名名稱,可以使用通配符,可以配置多個,用空格分開。

匹配原則,優先最大匹配原則,左邊匹配大於右邊匹配,匹配完全一致上面的優先。

location 站點具體訪問地址路徑

root 路徑,相對nginx設置的。

index頁面文件名稱。可以寫多個用空格分開

現在我們將配置文件修改為

則你輸入http://localhost/hello時,我們會訪問的是nginx下的/www/hello目錄,ngxin會默認把location的地址帶過來。

我們可以這樣來配置,就不再攜帶hello會直接訪問nginx下的/www目錄

location的配置語法為location 符號 url

符號包含 /基礎url目錄匹配

= 完全匹配

~ 驗證大小寫的URI匹配(正則)

~*忽略大寫的URI匹配(正則)

^~只需要驗證前半部分的URI參數(正則)

匹配優先規則:

1.精確匹配最高優先

2.正則匹配優先於^~匹配

3.前綴最大匹配優先

4.配置有上到下,相同匹配,上面的優先於下面的。

基於正則的動靜分離樣例:

location ~* .(gif|jpg|png|css|js)$ {        root /usr/www/static;  }

防盜鏈配置演示:

# 加入至指定location 即可實現

valid_referers none blocked 域名;

if ($invalid_referer) {

return 403;

}

下載限速

location /download {      limit_rate 1m; //限制每秒的下載速度 1M/S  limit_rate_after 30m; // 超過30M之後的文件下載限速(限制文件大小)  }

創建IP黑名單

#封禁指定IP 加入至指定location 即可實現

deny 192.168.0.1;  allow 192.168.0.1;

#開放指定IP 段

allow 192.168.0.0/24;

#封禁所有

deny all;

#開放所有

allow all;

# 創建黑名單文件

echo 'deny 192.168.0.132;' >> balck.ip

#http 配置塊中引入 黑名單文件

include       black.ip;