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;