Nginx测试相关配置

Nginx测试相关配置

1. 多种协议访问

验证网络协议是否支持测试TCP/HTTP/HTTPS
可以在Nginx配置文件中添加对应的server监听端口和ssl证书配置,例如:

# TCP
server {
    listen 80;
}

# HTTP
server {
    listen 80;
    location / {
        root /var/www/html;
    }
}

# HTTPS
server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/mycert.pem;
    ssl_certificate_key /etc/nginx/ssl/mykey.pem;
    location / {
        root /var/www/html;
    }
}

2. 按照请求方法控制

验证服务器支持可以根据请求方法类型进行限制,限制多种请求
可以使用Nginx的if语句和$http_x_requested_with变量来限制请求方法类型,例如:

if ($request_method !~ ^(GET|POST|HEAD)$) {
    return 405;
}

if ($http_x_requested_with !~* ^(XMLHttpRequest|Fetch)$) {
    return 403;
}

3. 参数化配置连接池

最大连接数配置测试/并发连接数配置测试
可以在Nginx配置文件中设置worker_processes和worker_connections参数来控制最大连接数和并发连接数,例如:

worker_processes  4;
events {
    worker_connections  1024;
}

4. 黑白名单

验证服务器支持自定义黑白名单列表,包括目录以及ip的黑白名单;也可以定义黑白名单的请求方法,包括文件名后缀等
可以使用Nginx的access模块和geo模块来实现黑白名单的配置,例如:

# IP黑名单
geo $blacklist {
    default 0;
    10.0.0.0/8 1;
    172.16.0.0/12 1;
    192.168.0.0/16 1;
}

server {
    location / {
        # IP黑名单
        if ($blacklist) {
            return 403;
        }

        # 目录白名单
        if ($uri !~* ^/(public|static)/) {
            return 403;
        }

        # 请求方法黑名单
        if ($request_method ~* ^(PUT|DELETE)$) {
            return 405;
        }

        # 文件名后缀黑名单
        if ($uri ~* \.(php|asp|jsp)$) {
            return 403;
        }

        # 其他配置
        ...
    }
}

5. 证书签字

验证服务器支持配置ssl的证书和秘钥的能力
可以在Nginx配置文件中添加ssl_certificate和ssl_certificate_key参数来配置ssl证书和秘钥,例如:

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/mycert.pem;
    ssl_certificate_key /etc/nginx/ssl/mykey.pem;
    ...
}

6. 跨域

验证服务器支持跨域请求解决方案
可以在Nginx配置文件中添加add_header参数和proxy_pass参数来实现跨域请求解决方案,例如:

server {
    location /api {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept';

        proxy_pass http://backend_server;
        ...
    }
}

7. 报文头监听及修改

验证服务器支持提供读取以及采集客户端发起的请求的报文头;提供获取特定路径下的报文头;提供修改报文头格式
可以使用Nginx的http模块和变量来读取和修改报文头,例如:

server {
    location / {
        # 读取报文头
        add_header '
        Custom-Header' $http_custom_header;
            # 修改报文头格式
    if ($http_user_agent ~* chrome) {
        add_header 'Custom-User-Agent' 'Chrome';
    }

    # 获取特定路径下的报文头
    location /api {
        add_header 'Custom-Header' $http_custom_header;
        ...
    }

    ...
}


需要注意的是,修改报文头可能会导致安全问题,需要谨慎使用。

8. 防盗链

在nginx中实现防盗链需要使用ngx_http_referer_module模块,具体配置如下:

# 设置来源域名列表
valid_referers none blocked example.com;
# 设置防盗链的文件类型
if ($invalid_referer) {
    return 403;
}
location ~* \.(jpg|png|gif)$ {
    ...
}
# 拦截IP及非法域名跳转请求
if ($http_referer ~* (baidu\.com|bing\.com)) {
    return 403;
}

其中,valid_referer指令定义了合法的来源域名列表

9. 静态资源配置

在nginx中作为静态资源服务器需要使用root指令指定根目录,具体配置如下:

server {
    location / {
        root /var/www/html;
    }
}

其中,root指令定义了静态资源文件的根目录。

10. 静态资源压缩配置

在nginx中实现对静态资源进行压缩需要使用ngx_http_gzip_module模块,具体配置如下:

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
    ...
}
server {
    location / {
        root /var/www/html;
    }
}

其中,gzip指令开启了压缩功能,gzip_types指令定义了需要压缩的文件类型。

11. 静态资源缓存处理

# 针对不同路径和不同文件类型配置缓存时间
location ~* \.(jpg|jpeg|png|gif|css|js|woff|woff2|eot|ttf|svg)$ {
    expires 1d;
    add_header Cache-Control "public";
    ...
}

12. 静态资源访问控制

# 针对不同路径和不同文件进行访问权限的限制
location /private/ {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    ...
}

13. 静态资源配置优化

# 针对文件的高速读取,高效传输,长链接等
location /static/ {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    ...
}

14. 正则匹配

# 根据URI的不同需求来进行配置,提供使用字符串与正则表达式匹配
location ~* ^/user/\d+ {
    ...
}

15. 合并请求

# 合并多个请求一次响应
location /combine {
    gzip on;
    gzip_types text/css text/javascript;
    gzip_min_length 1;
    gzip_comp_level 9;
    gzip_vary on;
    gzip_proxied any;
    gzip_http_version 1.1;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.";
    subrequest_output_buffer_size 256k;
    subrequest_in_memory on;
    set $args '';
    set $sub_req '';
    if ($request_method = 'GET') {
        set $args $args&$arg_param1=$arg_value1&$arg_param2=$arg_value2;
        set $sub_req /api/get_data?$args;
    }
    add_header 'Content-Type' 'application/json';
    echo_flush '{"data": [';
    echo_subrequest $sub_req;
    echo_flush ']}';
    echo_after_flush '\n';
}

16. 错误页面展示

# 当出现状态码404或者其他错误码时,跳转至错误页面
error_page 404 /404.html;
location = /404.html {
    internal;
    root /usr/share/nginx/html;
}
# 错误页面提供自定义修改
error_page 500 502 503 504 /50x.html;
location = /50x.html {
    internal;
    root /usr/share/nginx/html;
}

17. 负载均衡算法

在nginx中实现负载均衡算法需要使用upstream模块,具体配置如下:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server backend3.example.com;
    ip_hash;
}
server {
    location / {
        proxy_pass http://backend;
    }
}

其中,upstream指令定义了后端服务器列表和负载均衡算法,weight指令定义了服务器的权重,ip_hash指令将请求根据客户端IP哈希到特定的服务器上。

18. 健康检查

在nginx中实现健康检查需要使用ngx_http_upstream_module模块,具体配置如下:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    keepalive 32;
    check interval=3000 rise=2 fall=5 timeout=1000;
    check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
}
server {
    location / {
        proxy_pass http://backend;
    }
}

其中,check指令定义了健康检查的参数,包括检查间隔、成功次数、失败次数、超时时间等,check_http_send指令定义了健康检查请求的内容,check_http_expect_alive指令定义了响应状态码范围。

19. 熔断限流

在nginx中实现熔断限流需要使用ngx_http_limit_req_module模块,具体配置如下:

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    ...
}
server {
    location / {
        limit_req zone=one burst=5 nodelay;
        proxy_pass http://backend;
    }
}


其中,limit_req_zone指令定义了限流的区域、大小和速率,limit_req指令定义了限流的区域和阈值,burst指令定义了突发请求的最大数量,nodelay指令表示不延迟请求。

20. 流量控制

在nginx中实现流量控制需要使用ngx_http_limit_conn_module模块,具体配置如下:

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
}
server {
    location / {
        limit_conn addr 10;
        proxy_pass http://backend;
    }
}

其中,limit_conn_zone指令定义了连接数限制的区域和大小,limit_conn指令定义了连接数限制的区域和阈值。

21. 限制连接数

在nginx中实现对IP限制访问连接数需要使用ngx_http_limit_conn_module模块,具体配置如下:

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
}
server {
    location / {
        limit_conn addr 10;
        proxy_pass http://backend;
    }
}

其中,limit_conn_zone指令定义了连接数限制的区域和大小,limit_conn指令定义了连接数限制的区域和阈值。可以通过修改阈值来控制连接数的限制。
针对突发流量的处理:

在nginx中针对突发流量的处理需要使用ngx_http_limit_req_module模块,具体配置如下:

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
    ...
}
server {
    location / {
        limit_req zone=one burst=20 nodelay;
        proxy_pass http://backend;
    }
}

其中,limit_req_zone指令定义了请求限制的区域和大小,rate指定了限制的速率,limit_req指令定义了请求限制的区域和突发流量的处理方式。可以通过修改rate和burst的值来控制限制的速率和突发流量的处理方式。

22. 限制下载速度

在nginx中实现限制下载速度需要使用ngx_http_limit_rate_module模块,具体配置如下

server {
    location / {
        limit_rate 100k;
        proxy_pass http://backend;
    }
}

其中,limit_rate指令定义了下载速率的限制值。

23. 访问日志

在nginx中实现访问日志需要使用access_log指令,具体配置如下:

http {
    ...
    access_log /var/log/nginx/access.log;
    ...
}

其中,access_log指令定义了访问日志文件的路径和格式。

24. 错误日志

在nginx中实现错误日志需要使用error_log指令,具体配置如下:

http {
    ...
    error_log /var/log/nginx/error.log error;
    ...
}

其中,error_log指令定义了错误日志文件的路径和级别。

25. 自定义日志格式

在nginx中实现自定义日志格式需要使用log_format指令,具体配置如下:

http {
    ...
    log_format mylog '$remote_addr - $remote_user [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent"';
    access_log /var/log/nginx/access.log mylog;
    ...
}

其中,log_format指令定义了自定义的日志格式,access_log指令使用自定义的日志格式记录访问日志。

26. BWS多节点

在nginx中实现BWS多节点需要使用ngx_http_upstream_module模块,具体配置如下:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    least_conn;
}
server {
    location / {
        proxy_pass http://backend;
    }
}

其中,upstream指令定义了后端服务器列表和负载均衡算法,least_conn指令将请求发送到连接数最少的服务器上。

27. 后端多节点

在nginx中实现后端多节点需要使用ngx_http_upstream_module模块,具体配置如下:

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com backup;
}
server {
    location / {
        proxy_pass http://backend;
    }
}

其中,upstream指令定义了后端服务器列表和备用服务器,backup指令将该服务器标记为备用服务器。

28. 第三方语言支持

在nginx中支持Lua脚本需要使用ngx_http_lua_module模块,具体配置如下:

http {
    ...
    lua_package_path "/path/to/lua/?.lua;;";
    ...
    server {
        location / {
            content_by_lua_file /path/to/lua/script.lua;
        }
    }
}

其中,lua_package_path指令定义了Lua脚本文件的路径,content_by_lua_file指令指定了使用Lua脚本处理请求。

29. 支持Promethuse监控

在nginx中支持Prometheus监控需要使用ngx_http_stub_status_module模块和ngx_http_prometheus_module模块,具体配置如下:

http {
    ...
    stub_status on;
    ...
    server {
        listen 8080;
        location /metrics {
            prometheus;
        }
    }
}

其中,stub_status指令开启了状态信息的收集,prometheus指令将状态信息输出为Prometheus格式。

30. 服务监控

nginx自带的stub_status模块可以用于监测当前处理的活跃连接数、正在读取的客户端连接数、响应数据到客户端的数量、BWS等待下次请求的驻留连接数等信息,具体配置如下:

http {
    ...
    stub_status on;
    ...
}

你可能感兴趣的:(nginx,ssl,https)