Nginx 核心配置详解
Posted www233ii
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 核心配置详解相关的知识,希望对你有一定的参考价值。
目录
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
n2???cpl?[znkW?l?@???l?f?_?u$ˉ g??°W?8?f
??ˉG?Z?2·lμp?]:a-3+????$l???<??!??§^M?ce·??¥j±R?b?Le*&?1?|S??^μz?
d?g??X?a??J°1?C-Ai咙1链?¤?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官网 以上的参数配置不明白的话可以在官网查看。
以上是关于Nginx 核心配置详解的主要内容,如果未能解决你的问题,请参考以下文章