03.Nginx 공통베이스 모듈

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)$" { ... } 

 

추천

출처www.cnblogs.com/syf-com/p/11536619.html