一、Nginx部署-yum
1、官网链接
2、Nginx版本类型
Mainline version: 主线版,即开发版
Stable version: 最新稳定版,生产环境上建议使用的版本
Legacy versions: 遗留的老版本的稳定版
3、配置yum源
4、安装
测试:
二、nginx配置文件
这个在前面的文章里面已经介绍过,这里不再重复介绍。
三、nginx编译参数
同上。
四、nginx基本参数
1、观察主配置文件
① 分类
CoreModule 核心模块(进程数等)
EventsModule 事件驱动模块(工作模式等)
HttpCoreModule http内核模块 (文档程序类型,配置文件等)
② 模块功能
1、全局/核心块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
2、vim /etc/nginx/nginx.conf
user nginx;
运行nginx程序的独立账号
worker_processes 1;
启动的worker进程数量(CPU数量一致或auto)
error_log /var/log/nginx/error.log warn;
错误日志存放位置
pid /var/run/nginx.pid;
events {
事件
use epoll;
事件驱动模型epoll【默认】
事件驱动模型分类,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 10240;
//每个worker进程允许处理的最大连接数,例如10240,65535
}
http {
include /etc/nginx/mime.types;
文档和程序的关联记录
default_type application/octet-stream;
字节流处理方式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志格式,讲日志回来看
access_log /var/log/nginx/access.log main;
sendfile on;
优化参数
高效传输文件的模式
Nginx高级篇sendfile配置
sendfile: 设置为on表示启动高效传输文件的模式。sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据。如果这个参数不开启,会先在用户空间(Nginx进程空间)申请一个buffer,用read函数把数据从磁盘读到cache,再从cache读取到用户空间的buffer,再用write函数把数据从用户空间的buffer写入到内核的buffer,最后到tcp socket。开启这个参数后可以让数据不用经过用户buffer。
#tcp_nopush on;
优化参数
也就是说tcp_nopush = on 会设置调用tcp_cork方法,这个也是默认的,结果就是数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。
keepalive_timeout 65;
优化参数
长连接
#gzip on;
压缩参数
include /etc/nginx/conf.d/*.conf;
包含子配置文件夹
3、观察默认虚拟主机配置文件
vim /etc/nginx/conf.d/default.conf
vim /etc/nginx/conf.d/default.conf
server {
默认网站配置文件
listen 80;
监听端口
server_name localhost;
FQDN
#charset koi8-r;
网页字符类型
#access_log /var/log/nginx/host.access.log main;
日志
location / {
root /usr/share/nginx/html;
主目录
index index.html index.htm;
默认主页名
}
#error_page 404 /404.html;
错误页面
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
错误页面
location = /50x.html {
错误页面
root /usr/share/nginx/html;
错误页面主目录
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
代理设置
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
动态网站设置
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
访问控制部分
# concurs with nginx's one
#location ~ /\.ht {
# deny all;
#}
}
4、启动一个新的虚拟主机
① 启动一个新的虚拟主机
vim /etc/nginx/conf.d/xuleilinux.conf
server {
listen 80;
server_name xuleilinux.com;
location / {
root /xuleilinux;
index index.html ;
}
}
server 虚拟主机
listen 监听端口
server_name 服务器名称
location 网站目录设置
root 网站主目录在本地的路径
index 主页文件名
http{} 是整个服务器,所有虚拟主机的设置。
server{}是某一个虚拟主机的设置
location{} 是某一个页面的设置。
mkdir /xuleilinux
echo 美男子 > /xuleilinux/index.html
② 重启服务
③ 域名解析和访问
五、nginx日志log
1、日志配置
日志模块
日志模块的名称:
ngx_http_log_module
相关的指令
log_format:日志格式
access_log:访问日志
error_log:错误日志
open_log_file_cache:日志缓存
ps:日志缓存
open_log_file_cache max=N [inactive=time] [mim_uses=N] [valid=time] | off
该指令默认是禁止的,等同于:
open_log_file_cache off;
open_log_file_cache 指令的各项参数说明如下:
max: 设置缓存中的最大文件描述符数量。如果超过设置的最大文件描述符数量,则采用 LRU (Least Recently Used) 算法清除"较不常使用的文件描述符"。 LRU (Least Recently Used) 算 法的基本概念是:当内存缓冲区剩余的可用空间不够时,缓冲区尽可能地先保留使用者最常使用 的数据,将最近未使用的数据移出内存,腾出空间来加载另外的数据。
inactive: 设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符。 此参数为可选参数,默认的时间为 10 秒钟。
min_uses: 在参数 inactive 指定的时间范围内,如果日志文件超过被使用的次数,则将该日 志文件的描述符记入缓存。默认次数为 1。
valid: 设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否仍然存在。默 认时间为 60秒。
off: 禁止使用缓存。
open_log_file_cache 指令的设置示例如下:
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m。
日志的格式和命令
log_format
Nginx有非常灵活的日志记录模式。每个级别的配置可以有各自独立的访问日志。日志格式通过log_format命令定义。
语法
Syntax: log_format name [escape=default|json] string ...;
name 表示格式名称
string 表示定义的格式
默认值
Default: log_format combined "...";
log_format 有默认的无需设置的combined日志格式,相当于apache的combined日志格式
环境
Context: http context
1、网站代理
LB:
例如代理服务器的日志格式就不同
如果Nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址。
$remote_addr获取的是反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,
用来记录客户端IP地址和客户端请求的服务器地址。
nginx代理日志格式如下
log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
2、全局和局部
定义设置位置
vim /etc/nginx/nginx.conf
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志格式允许包含的变量
$remote_addr 远程地址,记录客户端ip地址
$remote_user 远程用户,记录客户端用户名称
[$time_local] 本地时间,服务器自身的时间
$request 请求,记录请求的url和http协议 get/post
$ststus 状态,记录请求状态 200/404/503/100/301
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小
$http_referer 记录从哪个页面链接访问过来的(超链接)
$http_user_agent 记录客户端浏览器相关信息 火狐/ie
$http_x_forwarded_for 代理ip
old
$request_length
请求的长度(包括请求行,请求头和请求正文)。
$request_time
请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601
ISO8601标准格式下的本地时间。
$bytes_sent
发送给客户端的总字节数 (可在主配置文件中,增加此项观c)
$msec
日志写入时间。单位为秒,精度是毫秒。
访问日志和错误日志
access_log (日志)
某条日志记录
192.168.100.254 - - [17/Dec/2017:14:45:59 +0800] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.100.10/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
某条日志记录含义
192.远程主机IP
- - 用户
【2017】时间
get获得,下载,还有post提交。
/nginx-logo.png 下载图片
http版本
状态码 什么结果。对,还是错
368 大小
引用自哪个连接,主页http://192.168.100.10/
Mozilla 5.0浏览器的版本
Windows NT 客户端系统类型
-远程客户端主机地址 (请看注释)
error_log (错误日志)
个性化404
1、修改主配置文件
server{
error_page 404 /404.html;
location = /404.html {
root /xuleilinux;
}
}
systemctl restart nginx
2、创建错误反馈页面
vim /nihaolinux/404.html
3 、访问
访问不存在的页面
4、查看404日志
观察404页面的现象。
日志缓存
大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭.占用了系统的IO,与业务无关。可以使用open_log_file_cache来设。
Syntax:
open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m ;
max 1000 指的是日志文件的FD,最大的缓存数量为1000。超了怎么办,看下面
min_users 3 20秒内小于3次访问的FD,就给你清掉,结合inactive 20s 的时间。
valid 1m 检查周期为1分钟。
总结:缓存最多1000个,到了极限,每分钟开始清除掉 20秒内小于3次的文件FD.
Default:
open_log_file_cache off;
Context:
http, server, locatition
http{} 将整个服务器所有网站,所有页面的日志进行缓存
server{} 将某一个网站的所有页面日志,进行缓存
location{}某一个页面的日志,进行缓存。
2、日志轮转 切割
前言
Nginx安装,会默认启动日志轮转。
rpm -ql nginx| grep log
/etc/logrotate.d/nginx
/var/log/nginx
轮转语句
指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
八、Nginx Web模块
1、随机主页
random_index_module
目的:将主页设置成随机页面,是一种微调更新机制。
启动随机主页:
① 创建主页目录
mkdir /app
② 创建多个主页
touch /app/{blue.html,green.html,red.html,.yellow.html}
//在不同的页面书写不同的内容,例子如下:
<html>
<head>
<title>green color</title>
</head>
<body style="background-color:green">
<h1>green color!</h1>
</body>
</html>
//想要改变不同的颜色,只需要把颜色的英文改成其他颜色的英文就可以。
③ 启动随机主页
vim /etc/nginx/conf.d/default.conf
server{
location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
root /app;
random_index on;
}
}
//在子配置文件里的默认文件的server模块的location里改成以上的配置。
记得重启服务。刷新网站主页,观察变化。
完成该试验后,请注释掉该功能。避免影响其他实验。隐藏文件不会被随机选取。
2、替换模块
sub_mudule
目的:页面内容替换。如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可以利用这个实现服务器端文字过滤的效果。
启动替换
vim /etc/nginx/conf.d/deffault.conf //启动nginx默认页面
server{ //在server下插入
sub_filter nginx 'my homepage';
sub_filter_once on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
ps:替换模块,将nginx替换成my homepage单次替换开启。
将单次替换关闭,再次刷新页面,即可看见全文替换。
sub_filter_once off;
3、文件读取
ngx_http_croe_module
语法:
Syntax: sendfile on | off;
Default: sendfile on;
Context: http,server,location,if in location
Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http,server,location
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context:http,server,location
三个部分的原理介绍
① senfile (发送文件)
未使用senfile()的传统网络传输的过程:
硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
使用sendfile()来进行网络传输的过程:
硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈
ps:减少了一次copy的过程,sendfile()不但能减少切换次数而且还能减少拷贝次数。
② tcp_nopush
未使用tcp_nopush网络资源浪费:
应用程序每产生一次操作就会发送一个包,而典型情况下一个包会拥有一个字节的数据以及40个字节长的包头,于是产生4000%的过载,很轻易地就能令网络发生拥塞。同时也浪费资源。
使用tcp_nopush网络传输速率提升:
当包累计到一定大小后再发送。
③ tcp_nodelay
开启或关闭nginx使用TCP_NODELAY选项的功能。 这个选项仅在将连接转变为长连接的时候才被启用。
TCP_NODELAY是禁用Nagle算法,即数据包立即发送出去。
由于Nagle和DelayedACK的原因,数据包的确认信息需要积攒到两个时才发送,长连接情况下,奇数包会造成延时40ms,所以tcp_nodelay会将ack立刻发出去。 如果不在长连接时,可以关闭此模块,因为ack会被立刻发出去。
启用模块
location /video/ {
sendfile on;
tcp_nopush on;
}
默认启动,无需验证。
4、文件压缩
启动该模块,使文件传输前进行压缩,提升传输效率。
模块
ngx_http_gzip_module
语法
Syntax: gzip on | off;
Default: gzip off;
Context: http, server, location, if in location
Syntax: gzip_comp_level level;
Default: gzip_comp_level 1;(1~9)
Context: http, server, location
Syntax: gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location
启用模块
① 观察未压缩传输
拷贝图片至网站主目录
拷贝tar包至文件主目录
拷贝文本至文件主目录
通过浏览器下载文件并观察下载后大小。
② 启用压缩功能
http { //在http标签中启动该功能
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_static on;
gzip_static on;# nginx对于静态文件的处理模块
systemctl restart nginx
③ 观察压缩传输
注意缓存
压缩包和图片类对象本身已经自带压缩功能。所以压缩比例较小低。
文本类对象在压缩试验中,压缩比例体现优越。
再通过浏览器下载文件并观察下载后大小。
5、页面缓存
模块
ngx_http_headers_module
expires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入。
Nginx(expires缓存减轻服务端压力)
语法
Syntax: expires [modified] time;
expires epoch | max | off;
Default: expires off;
Context: http, server, location, if in location
epoch:指定“expires”的值为1 January,1970,00:00:01 GMT
max:指定“expires”的值为10年
-1:指定“expires”的值为当前服务器时间-1s,即永远过期。
off:不修改“expires”和“Cache-control”的值
原理介绍
无缓存,每次访问服务器,均是全文传输。开启缓存可以加速浏览网站。
启用缓存
① 观察浏览器缓存
开启浏览器缓存,浏览页面。(默认)
第一次返回状态码200,页面对象全文传输
第二次返回状态304,页面对象部分传输
禁用缓存,浏览页面
返回码200,全文传输
理解浏览器缓存作用
解析缓存原理
② 理解nginx服务器缓存
开启服务器缓存模块
vim /etc/nginx/nginx.conf
location / {
root /usr/share/nginx/html
index index.html index.htm;
expires 24h;
}
再次浏览页面,观察响应头中出现服务器回复的缓存时间
理解nginx服务器启动缓存时间,加速浏览。
缺点是时效性降低。
6、防盗链
模块
ngx_http_referer_module
语法
Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
日志原理介绍
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';日志格式中的http_referer是记录,访问点引用的URL。也就是超链接的上一级地址。
通过这段地址,可以发现一种网络行为——盗链。非法盗链会影响站点的正常访问。
通过http_referer模块可以控制这一点。防止非法盗链现象。
启用防盗链
① 搭建一个a.com网站
mkdir /a.com //准备一个文件夹
vim /etc/nginx/conf.d/a.com.conf //准备一个配置文件来指向这个文件
server {
listen 80;
server_name a.com;
location / {
root /a.com
index index.html;
}
} //保存退出
vim /a.com/index.html
<img src='1.jpg' />
注意要将1.jpg图片拷贝至网站主目录。
在个人主机上做好域名解析。
② 搭建一个b.com网站
在主页中盗链A网站的图片
vim index.html
<img src='http://A网站的域名或者地址/1.jpg' />
盗用链接
注意网站主目录中,根本没有图片。
③ 访问两个网站页面。均能正常显示图片。
④ 注意b网站的日志
日志正常
192.168.100.254 - - [20/Sep/2017:15:10:27 +0800] "GET / HTTP/1.1" 200 42 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
⑤ 注意a网站的日志
日志不正常。日志莫名其妙的产生了。观察referer字段,发现被盗链了。
192.168.100.254 - - [20/Sep/2017:15:10:27 +0800] "GET /1.jpg HTTP/1.1" 200 1635350 "http://192.168.100.20/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0"
⑥ 启动a.com防盗链功能
location / {
root /a.com;
index index.html index.htm;
valid_referers none blocked *.a.com;
if ($invalid_referer) {
return 403;
}
}
重启服务
⑦ 再次访问b.com网站,盗链失败。
⑧ 如果希望某些网站能够使用(盗链)资源:
location ~* \.(gif|jpg|png|bmp)$ {
root /a.com
valid_referers none blocked *.qfcloud.top server_names ~tianyun ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
return 403;
#rewrite .* http://qfcloud.top/403.jpg;
}
}
location / {
root /a.com;
index index.html index.htm;
valid_referers none blocked *.a.com server_name 192.168.100.* ~tianyun ~\.google\. ~\.baidu\. b.com;
if ($invalid_referer) {
return 403;
}
}
⑨ 再次盗链,访问成功
九、nginx限制访问
1、ngx_http_limit_req_module
启动请求频率限制
测试未限制的情况下访问
[root@localhost ~]# yum -y install httpd-tools
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
软件包 httpd-tools-2.4.6-93.el7.centos.x86_64 已安装并且是最新版本
无须任何处理
[root@localhost ~]# ab -n 100 -c 10 http://10.8.162.122/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 10.8.162.122 (be patient).....done
Server Software: nginx/1.18.0
Server Hostname: 10.8.162.122
Server Port: 80
Document Path: /
Document Length: 660 bytes
Concurrency Level: 10
Time taken for tests: 0.034 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 78200 bytes
HTML transferred: 66000 bytes
Requests per second: 2917.07 [#/sec] (mean)
Time per request: 3.428 [ms] (mean)
Time per request: 0.343 [ms] (mean, across all concurrent requests)
Transfer rate: 2227.68 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 1 3 1.0 3 5
Waiting: 1 3 0.9 3 4
Total: 1 3 1.1 3 5
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 4
80% 5
90% 5
95% 5
98% 5
99% 5
100% 5 (longest request)
启动限制
vim /etc/nginx/nginx.conf
定义:
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
//限制请求 二进制地址 限制策略的名称 占用10M空间 允许每秒1次请求
引用:
limit_req zone=req_zone;
//引用 限制策略的名称
配置:
http {
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s; 定义
server {
location / {
root /usr/share/nginx/html;
index index.html index.htm;
limit_req zone=req_zone; 引用
#limit_req zone=req_zone burst=5;
#limit_req zone=req_zone burst=5 nodelay;
}
}
}
限制后 (重启服务,并测试)
[root@localhost ~]# ab -n 100 -c 10 http://10.8.162.122/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 10.8.162.122 (be patient).....done
Server Software: nginx/1.18.0
Server Hostname: 10.8.162.122
Server Port: 80
Document Path: /
Document Length: 660 bytes
Concurrency Level: 10
Time taken for tests: 0.066 seconds
Complete requests: 100
Failed requests: 99 //失败的请求
(Connect: 0, Receive: 0, Length: 99, Exceptions: 0)
Write errors: 0
Non-2xx responses: 99 //有问题的相应
Total transferred: 65231 bytes
HTML transferred: 50160 bytes
Requests per second: 1506.27 [#/sec] (mean)
Time per request: 6.639 [ms] (mean)
Time per request: 0.664 [ms] (mean, across all concurrent requests)
Transfer rate: 959.53 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 1
Processing: 1 6 14.3 1 49
Waiting: 1 6 14.3 1 49
Total: 1 6 14.4 2 49
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 3
90% 49
95% 49
98% 49
99% 49
100% 49 (longest request)
观察错误日志
tail -f /var/log/nginx/error.log
2017/10/08 01:05:08 [error] 23287#23287: *720 limiting requests, excess: 5.109 by zone "req_zone",
client: 27.216.240.201, server: localhost, request: "GET / HTTP/1.0", host: "tianyun.me"
limiting requests
由于限制请求导致。
十、Nginx访问控制
1、基于主机(ip)
模块
ngx_http_access_module
directives
allow 允许某些主机
deny 拒绝某些主机
syntax
Syntax: allow address | CIDR | unix: | all;
Context: http, server, location, limit_except
启用控制
限制主机访问
vim /etc/nginx/conf.d/default.conf
server {
allow 10.18.45.65;
allow 10.18.45.181;
deny all;
}
测试
服务器无法访问
2、基于用户
模块
ngx_http_auth_basic_module
Syntax
方法一
Syntax: auth_basic string | off;
Context: http, server, location, limit_except
方法二
Syntax: auth_basic_user_file file;
Context: http, server, location, limit_except
启用控制
① 建立认证文件
yum install -y httpd-tools
生成秘钥的工具是由apache提供
htpasswd -cm /etc/nginx/conf.d/passwd user10
会话密码
htpasswd -m /etc/nginx/conf.d/passwd user20
会话密码
cat /etc/nginx/conf.d/passwd
观察口令文件是否生成。已生成
user10:$apr1$UE/tLtDM$nVm686kAMYb/ArqQDUi8U/
user20:$apr1$bmn0E/gK$enkXKb2V5uFvUy9wdIHlP.
② 启动认证
vim /etc/nginx/conf.d/default.conf
server {
找到server{字段,在下一行插入认证字段。
auth_basic "nginx access test!";
auth_basic_user_file /etc/nginx/conf.d/passwd;
提示消息
引用认证文件
...
}
③ 重启并验证
再次访问网站,发现需要输入用户名和密码。
来源:oschina
链接:https://my.oschina.net/u/4312499/blog/4664884