1.Nginx 목차 색인
ngx_http_autoindex_module 모듈은 슬래시 문자 ( '/') 끝이 요청을 처리하고, 디렉토리 목록을 생성합니다.
모듈이 인덱스 파일 ngx_http_index_module을 찾을 수없는 경우, 대개는 모듈에 요청을 전달합니다.
1. 명령
#启用或禁用目录列表输出,on开启,off关闭。
Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location
#指定是否应在目录列表中输出确切的文件大小,on显示字节,off显示大概单位。
Syntax: autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location
#指定目录列表中的时间是应以本地时区还是UTC输出。on本地时区,off UTC时间。
Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off;
Context: http, server, location
2. 구성 예
[root@web ~]# cat /etc/nginx/conf.d/module.conf
server {
listen 80;
server_name module.bgx.com; charset utf-8,gbk; #设定字符集,防止中文字符乱码显示。 location /download { root /code/; autoindex on; autoindex_exact_size off; } }
2.Nginx 상태 모니터링
ngx_http_stub_status_module 모듈은 기본 상태 정보에 대한 액세스를 제공합니다.
활성화 --with-http_stub_status_module이 모듈은 구성 매개 변수를 기본적으로 구축 사용하지 않습니다.
1. 명령
Syntax: stub_status;
Default: —
Context: server, location
2. 구성 예
[root@web ~]# cat /etc/nginx/conf.d/module.conf
server {
listen 80;
server_name module.bgx.com; access_log off; location /nginx_status { stub_status; } }
3.이 구성은 간단한 웹 페이지, 다음과 같이 나타날 수 있습니다 기본 상태 데이터를 생성한다 :
4. 다음과 같은 상태 정보
Active connections # 当前活动客户端连接数,包括Waiting等待连接数。
accepts # 已接受总的TCP连接数。
handled # 已处理总的TCP连接数。
requests # 客户端总的http请求数。
Reading # 当前nginx读取请求头的连接数。 Writing # 当前nginx将响应写回客户端的连接数。 Waiting # 当前等待请求的空闲客户端连接数。 # 注意, 一次TCP的连接,可以发起多次http的请求, 如下参数可配置进行验证 keepalive_timeout 0; # 类似于关闭长连接 keepalive_timeout 65; # 65s没有活动则断开连接
3.Nginx 액세스 제어
ngx_http_access_module 모듈은 특정 클라이언트 주소에 대한 액세스를 제한 할 수 있습니다.
1. 명령
#允许配置语法
Syntax: allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
#拒绝配置语法
Syntax: deny address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
2. 샘플 구성, 사이트 / nginx_status에 IP 액세스를 지정 거부는 다른 모든 IP에 액세스 할 수 있습니다
[root@web ~]# cat /etc/nginx/conf.d/module.conf
server {
listen 80;
server_name module.bgx.com;
location /nginx_status {
stub_status;
deny 10.0.0.1/32; #拒绝指定的地址或地址段 allow all; #允许所有的地址 } }
3. 구성 예는 단지 지정된 액세스 소스 IP / nginx_status 있도록 다른 모든 세그먼트 거부
[root@web ~]# cat /etc/nginx/conf.d/module.conf
server {
listen 80;
server_name module.bgx.com;
location /nginx_status {
stub_status;
allow 127.0.0.1;
allow 10.0.0.1/32; #允许地址或地址段 deny all; #拒绝所有人 } }
참고 : 거부 허용 영향력의 순서
기본값은 첫 번째 규칙이 일치하는
경기가 성공하면, 다음과 일치하지 계속.
일치하지 성공하면, 다음 컨텐츠의 성공에 맞게 찾고 아래로 계속합니다.
4.Nginx 자원 제약
ngx_http_auth_basic_module 모듈은 리소스에 대한 액세스를 제한 할 수있는 사용자 이름과 암호를 확인하기 위해 HTTP 기본 인증을 사용할 수 있습니다.
1. 명령
#使用HTTP基本身份验证协议启用用户名和密码验证。
Syntax: auth_basic string| off;
Default: auth_basic off;
Context: http, server, location, limit_except
#指定保存用户名和密码的文件
Syntax: auth_basic_user_file file;
Default: -
Context: http, server, location, limit_except
2. 다음과 같은 형식의 파일을 저장할 수있는 사용자 이름과 암호를 지정합니다 :
#可以使用htpasswd程序或"openssl passwd"命令生成对应的密码;
name1:passwd1
name2:passwd2
#使用htpaaswd创建新的密码文件, -c创建新文件 -b允许命令行输入密码
[root@xuliangwei ~]# yum install httpd-tools
[root@xuliangwei ~]# htpasswd -b -c /etc/nginx/auth_conf xuliangwei 123456
3. 샘플 구성, 사용자 이름 및 암호 인증을 기반으로 연습
server {
listen 80;
server_name module.bgx.com;
access_log off; location /nginx_status { stub_status; auth_basic "Auth access Blog Input your Passwd!"; auth_basic_user_file /etc/nginx/auth_conf; } }
4.Nginx 액세스 제한
종종 이러한 상황이 발생, 서버 트래픽 이상, 부하가 너무 너무 커서합니다. 악의적 인 공격에 높은 볼륨 액세스를 위해, 따라서 사업에 영향을 미치는, 대역폭, 서버 스트레스의 낭비를 가져올 것이다, 우리는 제한된 동일한 IP, 요청,이 상황을 연결의 수를 고려할 수 있습니다.
ngx_http_limit_conn_module 키 정의 연결 단일 IP 주소에서 특히 연결의 수를 제한하는 수단을 포함한다.
그러나, 모든 연결이 계산됩니다, 연결 요청이 이미 연결되어있는 경우 계산 된 전체 헤더를 읽을 경우에만.
1. 명령
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
2. 공유 메모리 영역과 연결을 허용하는 소정의 키의 최대 수를 설정한다. 이 제한을 초과하면, 서버는 요청에 응답에서 오류를 반환
# http标签段定义连接限制
http{
limit_conn_zone $binary_remote_addr zone=conn_zone:10m;
}
server { # 同一时刻只允许一个客户端连接 limit_conn conn_zone 1; location / { root /code; index index.html; }
3) 사용하여 ab
스트레스 테스트를 수행하는 도구를
[root@xuliangwei ~]# yum install -y httpd-tools
[root@xuliangwei ~]# ab -n 20 -c 2 http://127.0.0.1/index.html
4) .nginx 로그 결과
2018/10/24 18:04:49 [error] 28656#28656: *1148 limiting connections by zone "conn_zone", client: 123.66.146.123, server: www.xuliangwei.com, request: "GET / HTTP/1.0", host: "www.xuliangwei.com" 2018/10/24 18:04:49 [error] 28656#28656: *1155 limiting connections by zone "conn_zone", client: 123.66.146.123, server: www.xuliangwei.com, request: "GET / HTTP/1.0", host: "www.xuliangwei.com"
키 요청 특정 단일 IP 주소의 요청을 처리하는 속도의 정의에 대해 제한 수단 ngx_http_limit_req_module 처리 속도.
1. 명령
#模块名ngx_http_limit_req_module
Syntax: limit_req_zone key zone=name:size rate=rate;
Default: —
Context: http
Syntax: limit_conn zone number [burst=number] [nodelay];
Default: —
Context: http, server, location
2. 최대 버스트 크기 및 요구 된 공유 메모리 영역을 설정한다. 그들의 수는이 경우, 오류를 종료 요청을 최대 한도를 초과 할 때까지 너무 많은 요청이 지연됩니다.
# http标签段定义请求限制, rate限制速率,限制一秒钟最多一个IP请求
http {
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s; } server { listen 80; server_name module.bgx.com; # 1r/s只接收一个请求,其余请求拒绝处理并返回错误码给客户端 #limit_req zone=req_zone; # 请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503 limit_req zone=req_zone burst=3 nodelay; location / { root /code; index index.html; } }
3) 사용하여 ab
스트레스 테스트를 수행하는 도구를
[root@xuliangwei ~]# yum install -y httpd-tools
[root@xuliangwei ~]# ab -n 20 -c 2 http://127.0.0.1/index.html
4) .nginx 로그 결과
2018/10/24 07:38:53 [error] 81020#0: *8 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: module.bgx.com, request: "GET /index.html HTTP/1.0", host: "10.0.0.10" 2018/10/24 07:38:53 [error] 81020#0: *9 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: module.bgx.com, request: "GET /index.html HTTP/1.0", host: "10.0.0.10"
Nginx에 연결이 제한 유효한 요청을 제한하지?
의는 http 프로토콜 연결 요청을 살펴 보자, 모든 HTTP의 첫 번째 TCP 기반으로 구축, HTTP 요청의 완료는 HTTP의 연결 요청 완료에 따라 (TCP 연결라고도 함)하는 TCP 세 방향 핸드 셰이크를 설정해야합니다.
그래서 여러 HTTP 요청은 TCP 연결을 기반으로 구축 할 수있다, 우리는 물론, 동시에 만 TCP 연결을 입력 할 수 있기 때문에, 연결 요청의 정확성 제한의 한계보다 더 효과적 일 수 있지만, 동시에 여러 HTTP가됩니다 TCP 연결 요청을 입력 할 수 있습니다. 그래서 제한은 HTTP 요청에 대해 상대적으로 우수한 솔루션입니다.
6.Nginx 위치
사이트에 대한 액세스를 제어 할 수 있습니다 Nginx의 위치 경로를 사용하지만, 여러 서버 구성을 할 수있는 위치는 그 우선 순위 여러 위치 충돌이 후 더 높을 것으로 보인다
1. Location
신택스 예
location [=|^~|~|~*|!~|!~*|/] /uri/ { ...
}
2. Location
문법은 우선 순위
정규 | 매칭 규칙 | 우선 |
---|---|---|
= | 정확히 일치 | 1 |
^ ~ | 문자열로 시작 | 이 |
~ | 대소 문자를 구별하지 정규 경기 | 삼 |
~ * | 대소 문자를 구별하지 정규 경기 | 4 |
! ~ | 일반 대소 문자 구분 일치 | 5 |
! ~ * | 대소 문자를 구별하지 정규 불일치 | 6 |
/ | 일반 경기는 모든 요청이 일치하는 | (7) |
3. 구성 사이트 검증 Location
우선 순위
[root@Nginx conf.d]# cat testserver.conf
server {
listen 80;
server_name module.oldboy.com;
location / {
default_type text/html;
return 200 "location /"; } location =/ { default_type text/html; return 200 "location =/"; } location ~ / { default_type text/html; return 200 "location ~/"; } # location ^~ / { # default_type text/html; # return 200 "location ^~"; # } }
4.测试Location优先级
# 优先级最高符号=
[root@Nginx conf.d]# curl module.oldboy.com
location =/
# 注释掉精确匹配=, 重启Nginx
[root@Nginx ~]# curl module.oldboy.com
location ~/
# 注释掉~, 重启Nginx [root@Nginx ~]# curl module.oldboy.com location /
5.Locaiton规则配置应用场景
# 通用匹配,任何请求都会匹配到
location / {
...
}
# 严格区分大小写,匹配以.php结尾的都走这个location
location ~ \.php$ {
...
}
# 严格区分大小写,匹配以.jsp结尾的都走这个location
location ~ \.jsp$ {
...
}
# 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条location
location ~* .*\.(jpg|gif|png|js|css)$ {
...
}
# 不区分大小写匹配 location ~* "\.(sql|bak|tgz|tar.gz|.git)$" { ... }