Nginx 核心配置詳解
目錄
Nginx 四層訪問控制:
准備兩個客戶端,做訪問測試使用。
centos7 IP:192.168.39.7
centos6 IP:192.168.39.6
[root@ubuntu images1]#vim /apps/nginx/conf/conf.d/pc.conf
# nginx的訪問控制是基於先后順序來決定優先級的。
location ~* \.(gif|jpg|jpeg|bmp|png|tiff|tif|ico|wmf|js)$ {
root /data/nginx/images1;
index index.html;
deny 192.168.39.7; # 拒絕這個IP訪問
allow 192.168.39.0/24; # 允許這個網段訪問(結合含義允許這個網段訪問但是因為deny在前已經明確過“7”IP不可以訪問,所以是除了“7”IP以外的這個網段都可以訪問)
allow 10.1.1.0/16; # 允許這個網段訪問 (我沒有設置這個網段,添加他的意義是可以添加多個網段)
allow 2001:0db8::/32; # 允許ipv6地址
deny all; # 拒絕所有IP訪問(結合在一起另一層含義拒絕除這一行以上的所有IP)
}
# 檢查語法
[root@ubuntu images]#/apps/nginx/sbin/nginx -t
nginx: [warn] low address bits of 10.1.1.0/16 are meaningless in /apps/nginx/conf/conf.d/pc.conf:50 # 這個錯不用管,因為我沒有這個網段的地址)
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
# 重啟服務或重新加載服務
[root@ubuntu images]#systemctl restart nginx.service
# 分別在centos6、7上做本地域名解析
[root@centos7 ~]$vim /etc/hosts
192.168.39.184 www.OpengSD.net
[root@magedu ~]$vim /etc/hosts
192.168.39.184 www.OpengSD.net
# centos7訪問測試我拒絕了這個IP訪問所以顯示403
[root@centos7 ~]$curl http://www.opengsd.net/1.jpg
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.16.1</center>
</body>
</html>
# centos6訪問測試
[root@magedu ~]$curl www.OpengSD.net/1.jpg # 因為是圖片沒有圖形界面顯示不了(但是沒有報403拒絕),下面有新的測試訪問。
㕞¥WŪk|±¥S鴒kĔѰ-Į# JCR浞±»&©¾f¿+ܢ9ӘLؐp;о7¥`�"PΦŜ]+ɖڈHЉ8錞@ j¾[ư.x?4̲nMت·a$}@a3Ƶ
%U
n²¾ꕦŰcplո[znkW␘l잒@ֈl٧f½_ŷu$¯ g®°Wȟ8ɓf
¯G۵Z»2·lµpؗ]:ª-³+֝»쫆ډ$l붆nj⏛<©❕!¸ܛ§^M¼ce·¥j±R͖b©Le*&Ϛ1ƕ¦S잝ց^µzǼ
d쯞gܗ쫴Xܥa𫮕J°¹ѬCAi嚨¹鏈͘¤ᕽ5옲C碔rm([^C
- ubuntu圖形化界面訪問測試 (IP:192.168.39.138)其他沒有在deny all上面的網段和IP是不能訪問的這里就不做測試了。
一般不設置在這里是用在監控里面的
Nginx賬戶認證功能:
用於像ELK這樣的日志收集服務使用,因為ELK沒有賬戶認證功能,知道IP就可以訪問所以不安全,可以配合Nginx+ELK實現賬戶認證訪問,把ELK的web服務只監聽在本機127.0.0.1外網就無法訪問,之后使用nginx做反向代理監聽80或其他端口,之后要訪問ELK的時候通
過Nginx做驗證才可以實現訪問。
- 實現賬戶認證(依賴於以下包來實現)
- 需要的包
[root@ubuntu images]#apt install apache2-utils #ubuntu
[root@centos7 ~]$ yum install httpd-tools -y #Centos
- htpasswd用法幫助
apache htpasswd命令用法
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password
htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
apache htpasswd命令選項參數說明
-c 創建一個加密文件
-n 不更新加密文件,只將apache htpasswd命令加密后的用戶名密碼顯示在屏幕上
-m 默認apache htpassswd命令采用MD5算法對密碼進行加密
-d apache htpassswd命令采用CRYPT算法對密碼進行加密
-p apache htpassswd命令不對密碼進行進行加密,即明文密碼
-s apache htpassswd命令采用SHA算法對密碼進行加密
-b 在apache htpassswd命令行中一並輸入用戶名和密碼而不是根據提示輸入密碼
-D 刪除指定的用戶
在Windows, NetWare and TPF 系統中 ‘-m’選項是默認的,在使用apache htpasswd命令時可以忽略。在其他系統中,’-p’選項可能不能工作。
apache htpasswd命令用法實例
1、如何利用htpasswd命令添加用戶?
htpasswd -bc .passwd 123 123
在bin目錄下生成一個.passwd文件,用戶名123,密碼:123,默認采用MD5加密方式
2、如何在原有密碼文件中增加下一個用戶?
htpasswd -b .passwd abc abc
去掉c選項,即可在第一個用戶之后添加第二個用戶,依此類推
3、如何不更新密碼文件,只顯示加密后的用戶名和密碼?
htpasswd -nb abc abc
不更新.passwd文件,只在屏幕上輸出用戶名和經過加密后的密碼
4、如何利用htpasswd命令刪除用戶名和密碼?
htpasswd -D .passwd abc
5、如何利用htpasswd命令修改密碼?
htpasswd -D .passwd abc
htpasswd -b .passwd abc abc
即先使用htpasswd刪除命令刪除指定用戶,再利用htpasswd添加用戶命令創建用戶即可實現修改密碼的功能。
至此,apache htpasswd命令的具體介紹和使用方法就介紹完了。
ps aux|grep svnserve
cd /shiyu
vim passwd
vim authz
配置SVN密碼加密:htpasswd -b ./http_passwd abc abc123
- 創建賬戶認證
[root@ubuntu images]#htpasswd -bc /apps/nginx/conf/.htpasswd taotaobao 123456
Adding password for user taotaobao
# 查看文件是否生成
[root@ubuntu images]#cat /apps/nginx/conf/.htpasswd
taotaobao:$apr1$/k65Gf8X$xKuOS0WxQf5FY5GM/0uyT/
# 在創建一個賬戶但是不能在加-c因為會覆蓋掉這個文件,或者你想刪了之前的再創建一個可以覆蓋。
[root@ubuntu images]#htpasswd -b /apps/nginx/conf/.htpasswd xiaobawang 123456
Adding password for user xiaobawang
[root@ubuntu images]#cat /apps/nginx/conf/.htpasswd
taotaobao:$apr1$/k65Gf8X$xKuOS0WxQf5FY5GM/0uyT/
xiaobawang:$apr1$k12PK6Xk$qgjhplHdZTD53FIDRx.0E0
- Nginx配置文件添加做認證的目錄
[root@ubuntu images]#vim /apps/nginx/conf/conf.d/pc.conf
location /login {
root /data/nginx/html;
index index.html;
}
- 創建需要用的目錄和頁面。
[root@ubuntu images]#mkdir /data/nginx/html/login
[root@ubuntu images]#echo "login page" > /data/nginx/html/login/index.html
[root@ubuntu images]#cat /data/nginx/html/login/index.html
login page
# 重啟完測試不添加認證訪問
[root@ubuntu images]#systemctl reload nginx.service
- 添加認證
[root@ubuntu images]#vim /apps/nginx/conf/conf.d/pc.conf
location /login {
root /data/nginx/html;
index index.html;
auth_basic "login password";
auth_basic_user_file /apps/nginx/conf/.htpasswd;
}
[root@ubuntu images]#systemctl reload nginx.service
- 沒添加認證的時候是可以訪問的
- 添加認證后訪問必須輸入賬戶密碼才可以訪問
- 結論要點及使用場景
#要點:這個權限最好設為660,不設置也可以。
[root@ubuntu ~]#ll /apps/nginx/conf/.htpasswd
-rw-r--r-- 1 root root 97 Jan 9 17:05 /apps/nginx/conf/.htpasswd
#使用場景:公司內部使用,外部訪問的話這個還是不夠安全,主要用於ELK收集日志類web服務使用。
自定義錯誤頁面:
- 實現錯誤頁面自定義
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
server {
listen 80;
server_name www.OpengSD.net;
charset utf-8;
error_page 500 502 503 504 404 /error.html; # 這些報錯都返回error.html這個文件的內容,可以定義多個文件名不一樣就可以。(可以自定義返回的狀態碼)
location = /error.html {
root html; # 這個相對路徑是相對於你的安裝路徑,例如:我編譯的時候安裝路徑是/apps/nginx 。(組成的路徑就是/apps/nginx/html)
}
# 創建錯誤頁面文件
[root@ubuntu ~]#vim /apps/nginx/images/error.html
sorroy server!
[root@ubuntu ~]#systemctl reload nginx.service
- 訪問測試
自定義訪問日志:
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
server {
listen 80;
server_name www.OpengSD.net;
charset utf-8;
error_page 500 502 503 504 404 /error.html;
access_log /data/nginx/logs/www-taotaobao-net_access.log;
error_log /data/nginx/logs/www-taotaobao-net_error.log;
location = /error.html {
root html;
}
# 這個配置參考之前的實驗。
location /login {
root /data/nginx/html;
index index.html;
auth_basic "login password";
auth_basic_user_file /apps/nginx/conf/.htpasswd;
}
# 創建日志記錄目錄
[root@ubuntu ~]#mkdir /data/nginx/logs
# 重新加載配置
[root@ubuntu ~]#systemctl reload nginx.service
-
錯誤訪問測試
-
查看錯誤日志(這個日志只記錄異常訪問)
[root@ubuntu ~]#cat /data/nginx/logs/www-taotaobao-net_error.log
2020/01/09 17:57:46 [error] 3347#0: *29 open() "/data/nginx/html/login/12dasdsa" failed (2: No such file or directory), client: 192.168.39.1, server: www.opengsd.net, request: "GET /login/12dasdsa HTTP/1.1", host: "www.opengsd.net"
2020/01/09 17:57:49 [error] 3347#0: *29 open() "/data/nginx/html/login/12dasdsa" failed (2: No such file or directory), client: 192.168.39.1, server: www.opengsd.net, request: "GET /login/12dasdsa HTTP/1.1", host: "www.opengsd.net"
2020/01/09 17:57:49 [error] 3347#0: *29 open() "/data/nginx/html/login/12dasdsa" failed (2: No such file or directory), client: 192.168.39.1, server: www.opengsd.net, request: "GET /login/12dasdsa HTTP/1.1", host: "www.opengsd.net"
2020/01/09 17:57:49 [error] 3347#0: *29 open() "/data/nginx/html/login/12dasdsa" failed (2: No such file or directory), client: 192.168.39.1, server: www.opengsd.net, request: "GET /login/12dasdsa HTTP/1.1", host: "www.opengsd.net"
2020/01/09 17:58:44 [error] 3347#0: *29 open() "/data/nginx/html/login/dsadas" failed (2: No such file or directory), client: 192.168.39.1, server: www.opengsd.net, request: "GET /login/dsadas HTTP/1.1", host: "www.opengsd.net"
2020/01/09 17:58:52 [error] 3347#0: *29 open() "/data/nginx/html/login/dsadas" failed (2: No such file or directory), client: 192.168.39.1, server: www.opengsd.net, request: "GET /login/dsadas HTTP/1.1", host: "www.opengsd.net"
2020/01/09 17:58:52 [error] 3347#0: *29 open() "/apps/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.39.1, server: www.opengsd.net, request: "GET /favicon.ico HTTP/1.1", host: "www.opengsd.net", referrer: "http://www.opengsd.net/login/dsadas"
- 正確訪問測試
- 查看訪問日志 (這個日志不管你是異常訪問還是正常訪問都會記錄訪問記錄)
[root@ubuntu ~]#cat /data/nginx/logs/www-taotaobao-net_access.log
192.168.39.1 - taotaobao [09/Jan/2020:17:57:46 +0800] "GET /login/12dasdsa HTTP/1.1" 404 15 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:17:57:49 +0800] "GET /login/12dasdsa HTTP/1.1" 404 15 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:17:57:49 +0800] "GET /login/12dasdsa HTTP/1.1" 404 15 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:17:57:49 +0800] "GET /login/12dasdsa HTTP/1.1" 404 15 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:17:58:20 +0800] "GET /login/ HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:17:58:44 +0800] "GET /login/dsadas HTTP/1.1" 404 15 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:17:58:52 +0800] "GET /login/dsadas HTTP/1.1" 404 15 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - - [09/Jan/2020:17:58:52 +0800] "GET /favicon.ico HTTP/1.1" 404 15 "http://www.opengsd.net/login/dsadas" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - - [09/Jan/2020:17:59:04 +0800] "GET /login HTTP/1.1" 401 581 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:17:59:04 +0800] "GET /login HTTP/1.1" 301 169 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:17:59:04 +0800] "GET /login/ HTTP/1.1" 200 11 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
192.168.39.1 - taotaobao [09/Jan/2020:18:01:29 +0800] "GET /login/dfasdsa HTTP/1.1" 404 15 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
檢測文件是否存在:
try_files會按順序檢查文件是否存在,返回第一個找到的文件或文件夾(結尾加斜線表示為文件夾),如果所有文件或文件夾都找不到,會進行一個內部重定向到最后一個參數。
只有最后一個參數可以引起一個內部重定向,之前的參數只設置內部URI的指向。最后一個參數是回退URI且必須存在,否則會出現內部500錯誤。
- 內部查找不實現重定向
location / {
root /data/nginx/html/pc;
index index.html index.htm;
try_files $uri $uri.html;
}
# 不實現重定向的話必須有用戶訪問的文件才可以
[root@ubuntu ~]#ehco "index1" /data/nginx/html/pc/index1.html
[root@ubuntu ~]#systemctl reload nginx.service
- 訪問測試(用戶訪問的uri會通過這個設置來補全。)(訪問的時候不要加斜線如果加斜線他會認為使這個目錄下的文件就會報錯因為沒有這個目錄)
- 訪問不存在的頁面會顯示服務器內部錯誤
- 內部查找如果用戶輸入目錄匹配
location / {
root /data/nginx/html/pc;
index index.html index.htm;
try_files $uri $uri/index.html $uri.html;
}
[root@ubuntu images]#systemctl reload nginx.service
# 如果想訪問必須建立一個index1的目錄,而且下面創建的文件名必須對應參數里的$uri/ 后面的文件名才可以。(nginx會把用戶輸入的uri認為是目錄匹配要是目錄沒有接着匹配文件)
[root@ubuntu images]#mkdir /data/nginx/html/pc/index1
[root@ubuntu images]#echo "index1" > /data/nginx/html/pc/index1/index.html
- 沒有這個目錄和這個文件訪問
- 創建這個目錄和文件訪問測試
- 內部重定向實現
[root@ubuntu ~]#vim /apps/nginx/conf/conf.d/pc.conf
location / {
root /data/nginx/html/pc;
index index.html index.htm;
try_files $uri $uri/index.html $uri.html /login/default.html;
}
# 創建重定向的文件
[root@ubuntu ~]#echo "default" >> /data/nginx/html/login/default.html # 一般這個文件都是重定向到主頁面,如:公司主頁面、網站主頁面
[root@ubuntu ~]#systemctl reload nginx.service
- 訪問測試找不到這個文件最后重定向到指定的這個文件
- 也可以定義返回的狀態碼
[root@ubuntu images]#vim /apps/nginx/conf/conf.d/pc.conf
location / {
root /data/nginx/html/pc;
index index.html index.htm;
#try_files $uri $uri/index.html $uri.html /login/default.html;
#try_files $uri $uri.html;
try_files $uri $uri/index.html $uri.html =489;
}
[root@ubuntu images]#systemctl reload nginx.service
# 測試(最好用終端測試)
[root@magedu ~]$curl -i www.opengsd.net/index4
HTTP/1.1 489
Server: nginx/1.16.1
Date: Thu, 09 Jan 2020 11:16:09 GMT
Content-Length: 0
Connection: keep-alive
長連接配置:
keepalive_timeout number; #設定保持連接超時時長,0表示禁止長連接,默認為75s(不同版本不一樣),通常配置在http字段作為站點全局配置
keepalive_requests number; #在一次長連接上所允許請求的資源的最大數量,默認為100次。
keepalive_requests 3;
keepalive_timeout 65 65;
開啟長連接后,返回客戶端的會話保持時間為60s,單次長連接累計請求達到指定次數請求或65秒就會被斷開,后面
的60為發送給客戶端應答報文頭部中顯示的超時時間設置為60s:如不設置客戶端將不顯示超時時間。
Keep-Alive:timeout=60 #瀏覽器收到的服務器返回的報文
如果設置為0表示關閉會話保持功能,將如下顯示:
Connection:close #瀏覽器收到的服務器返回的報文
- 設置示例:(在主配置的http字段里配置)(keepalive_requests 這個值不易過小,在內部的靜態資源較多的時候必須調大這個值)
[root@ubuntu images]#vim /apps/nginx/conf/nginx.conf
http {
keepalive_requests 3; # 添加這一行,設置為一次長連接最大請求數量為3次。
keepalive_timeout 65 60;
}
- 使用命令測試:(需要三台虛擬機同時操作測試)
[root@centos7 ~]$telnet www.opengsd.net 80 # 使用這個命令訪問
Trying 192.168.39.184...
Connected to www.opengsd.net.
Escape character is '^]'.
GET / HTTP/1.1 # 填寫協議 (這個操作做三遍)
HOST: www.opengsd.net # 填寫主機頭信息(這個操作做三遍)
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Thu, 09 Jan 2020 12:27:24 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 176
Last-Modified: Sun, 05 Jan 2020 10:51:51 GMT
Connection: keep-alive
Keep-Alive: timeout=60
ETag: "5e11bfc7-b0"
Accept-Ranges: bytes
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>taotaobao 博客</title>
</head>
<body>
<h2>淘淘寶博客PC網址</h2>
</body>
</html>
GET / HTTP/1.1
HOST: www.opengsd.net
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Thu, 09 Jan 2020 12:27:35 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 176
Last-Modified: Sun, 05 Jan 2020 10:51:51 GMT
Connection: keep-alive
Keep-Alive: timeout=60
ETag: "5e11bfc7-b0"
Accept-Ranges: bytes
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>taotaobao 博客</title>
</head>
<body>
<h2>淘淘寶博客PC網址</h2>
</body>
</html>
GET / HTTP/1.1
HOST: www.opengsd.net
HTTP/1.1 200 OK
Server: nginx/1.16.1
Date: Thu, 09 Jan 2020 12:27:47 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 176
Last-Modified: Sun, 05 Jan 2020 10:51:51 GMT
Connection: close
ETag: "5e11bfc7-b0"
Accept-Ranges: bytes
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>taotaobao 博客</title>
</head>
<body>
<h2>淘淘寶博客PC網址</h2>
</body>
</html>
Connection closed by foreign host. # 查看最后的報錯信息,達到三次最后一遍輸入完的時候會報這個錯。
作為下載服務器配置:
- 實現下載功能
[root@ubuntu images]#vim /apps/nginx/conf/conf.d/pc.conf
location /download {
autoindex on; #自動索引功能
autoindex_exact_size on; #計算文件確切大小(單位bytes),off只顯示大概大小(單位kb、mb、gb)
autoindex_localtime on; #顯示本機時間而非GMT(格林威治)時間
root /data/nginx/html/pc;
}
[root@ubuntu images]#mkdir /data/nginx/html/pc/download # 創建下載目錄
# 准備下載的文件
[root@ubuntu images]#cp /data/
lost+found/ nginx/ nginx-1.16.1.tar.gz
[root@ubuntu images]#cp /data/nginx-1.16.1.tar.gz /data/nginx/html/pc/download/
# 重新加載服務
[root@ubuntu images]#systemctl reload nginx.service
- 測試下載
- 實現限制下載速率
limit_rate rate; #限制響應給客戶端的傳輸速率,單位是bytes/second,默認值0表示無限制限速與不限速的對比:
location /download {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
limit_rate 10k; # 添加這行
root /data/nginx/html/pc;
}
- 命令測試限制下載速率
[root@magedu ~]$wget www.opengsd.net/download/nginx-1.16.1.tar.gz
--2020-01-09 20:51:21-- http://www.opengsd.net/download/nginx-1.16.1.tar.gz
Resolving www.opengsd.net... 192.168.39.184
Connecting to www.opengsd.net|192.168.39.184|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1032630 (1008K) [application/octet-stream]
Saving to: “nginx-1.16.1.tar.gz”
15% [======> ] 163,840 10.5K/s eta 81s ^
- 命令測試不限制下載速率(這個文件太小了所以一瞬間就下來了不過也能測出來區別)
[root@magedu ~]$wget www.opengsd.net/download/nginx-1.16.1.tar.gz
--2020-01-09 20:53:21-- http://www.opengsd.net/download/nginx-1.16.1.tar.gz
Resolving www.opengsd.net... 192.168.39.184
Connecting to www.opengsd.net|192.168.39.184|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1032630 (1008K) [application/octet-stream]
Saving to: “nginx-1.16.1.tar.gz.2”
100%[=================================================>] 1,032,630 --.-K/s in 0.005s
2020-01-09 20:53:21 (205 MB/s) - “nginx-1.16.1.tar.gz.2” saved [1032630/1032630]
作為上傳服務器:
client_max_body_size 1m; #設置允許客戶端上傳單個文件的最大值,默認值為1m
client_body_buffer_size size; #用於接收每個客戶端請求報文的body部分的緩沖區大小;默認16k;超出
此大小時,其將被暫存到磁盤上的由下面client_body_temp_path指令所定義的位置
client_body_temp_path path [level1 [level2 [level3]]];
#設定存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量,目錄名為16進制的數字,使用hash之
后的值從后往前截取1位、2位、2位作為文件名:
[root@s3 ~]# md5sum /data/nginx/html/pc/index.html
95f6f65f498c74938064851b1bb 96 3d 4 /data/nginx/html/pc/index.html
1級目錄占1位16進制,即2^4=16個目錄 0-f
2級目錄占2位16進制,即2^8=256個目錄 00-ff
3級目錄占2位16進制,即2^8=256個目錄 00-ff
- 配置示例:
client_max_body_size 10m;
client_body_buffer_size 16k;
client_body_temp_path /apps/nginx/temp 1 2 2; #reload Nginx會自動創建temp目錄
- 上傳之后的目錄結構
其他配置:
keepalive_disable none | browser ...;
#對哪種瀏覽器禁用長連接
limit_except method ... { ... },僅用於location
限制客戶端使用除了指定的請求方法之外的其它方法
method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND,
PROPPATCH, LOCK, UNLOCK, PATCH
limit_except GET {
allow 192.168.0.0/24;
allow 192.168.7.101;
deny all;
}
#除了GET和HEAD 之外其它方法僅允許192.168.1.0/24網段主機使用
[root@s2 about]# mkdir /data/nginx/html/pc/upload
[root@s2 about]# echo "upload" > /data/nginx/html/pc/upload/index.html
[root@s2 about]# vim /apps/nginx/conf/conf.d/pc.conf
location /upload {
root /data/magedu/pc;
index index.html;
limit_except GET {
allow 172.18.200.101;
deny all;
}
}
#重啟Nginx並進行測試上傳文件
[root@s2 pc]# systemctl restart nginx
[root@s2 pc]#
[root@s2 pc]# curl -XPUT /etc/issue http://www.magedu.net/about
curl: (3) <url> malformed
<html>
<head><title>405 Not Allowed</title></head> #Nginx已經允許但是程序未支持上傳功能
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx</center>
</body>
</html>
[root@s1 ~]# curl -XPUT /etc/issue http://www.magedu.net/upload
curl: (3) <url> malformed
<html>
<head><title>403 Forbidden</title></head> #Nginx拒絕上傳
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx</center>
</body>
</html>
aio on | off #是否啟用asynchronous file I/O(AIO)功能,需要編譯開啟
linux 2.6以上內核提供以下幾個系統調用來支持aio:
1、SYS_io_setup:建立aio 的context
2、SYS_io_submit: 提交I/O操作請求
3、SYS_io_getevents:獲取已完成的I/O事件
4、SYS_io_cancel:取消I/O操作請求
5、SYS_io_destroy:毀銷aio的context
directio size | off; #directio是直接讀寫文件到磁盤,啟用直接I/O,默認為關閉,當文件大於等於給定大
小時,例如directio 4m,可以和sebdfile結合使用,比如當大於此值使用AIO,當小於此值使用sendfile。
open_file_cache off; #是否緩存打開過的文件信息
open_file_cache max=N [inactive=time];
nginx可以緩存以下三種信息:
(1) 文件元數據:文件的描述符、文件大小和最近一次的修改時間
(2) 打開的目錄結構
(3) 沒有找到的或者沒有權限訪問的文件的相關信息
max=N:可緩存的緩存項上限數量;達到上限后會使用LRU(Least recently used,最近最少使用)算法實現
管理
inactive=time:緩存項的非活動時長,在此處指定的時長內未被命中的或命中的次數少於
open_file_cache_min_uses指令所指定的次數的緩存項即為非活動項,將被刪除
open_file_cache_errors on | off;
是否緩存查找時發生錯誤的文件一類的信息
默認值為off
open_file_cache_min_uses number;
open_file_cache指令的inactive參數指定的時長內,至少被命中此處指定的次數方可被歸類為活動項
默認值為1
open_file_cache_valid time;
緩存項有效性的檢查驗證頻率,默認值為60s
open_file_cache max=10000 inactive=60s; #最大緩存10000個文件,非活動數據超時時長60s
open_file_cache_valid 60s; #每間隔60s檢查一下緩存數據有效性
open_file_cache_min_uses 5; #60秒內至少被命中訪問5次才被標記為活動數據
open_file_cache_errors on; #緩存錯誤信息
server_tokens off; #隱藏Nginx server版本。
Nginx官網 以上的參數配置不明白的話可以在官網查看。