Nginx Proxy Manager (NPM) 是一个基于Nginx的图形化管理工具,简化了反向代理和API网关的配置。以下是构建高性能API网关的最佳实践。
docker run -d \
--name=npm \
-p 80:80 \
-p 443:443 \
-p 81:81 \
-v npm-data:/data \
-v npm-letsencrypt:/etc/letsencrypt \
--restart unless-stopped \
jc21/nginx-proxy-manager:latest
在NPM的"高级"配置中添加:
worker_processes auto;
worker_rlimit_nofile 100000;
events {
worker_connections 4000;
use epoll;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 30;
keepalive_requests 10000;
types_hash_max_size 2048;
server_tokens off;
# 缓冲区优化
client_body_buffer_size 10K;
client_header_buffer_size 1k;
client_max_body_size 8m;
large_client_header_buffers 2 1k;
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:10m inactive=60m use_temp_path=off;
server {
location /api/ {
proxy_cache api_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Proxy-Cache $upstream_cache_status;
}
}
location /admin/ {
allow 192.168.1.0/24;
deny all;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
log_format api_log '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';
access_log /var/log/nginx/api_access.log api_log;
集成nginx-prometheus-exporter收集指标: - 请求率 - 响应时间 - 错误率 - 连接数
limit_req_zone $binary_remote_addr zone=api_rate_limit:10m rate=100r/s;
location /api/ {
limit_req zone=api_rate_limit burst=50 nodelay;
}
location /v1/legacy-api {
rewrite ^/v1/legacy-api(.*)$ /v2/new-api$1 break;
proxy_pass http://backend-service;
}
location /secure/ {
auth_jwt "Restricted API";
auth_jwt_key_file /etc/nginx/jwt_keys.json;
}
配置多个上游服务器实现无缝切换:
upstream backend {
server backend1.example.com;
server backend2.example.com backup;
}
grep
和awk
快速分析访问日志ngxtop
实时查看请求wrk
或locust
进行负载测试nginx -t
验证配置语法通过以上最佳实践,您可以构建一个高性能、安全且易于管理的API网关,满足现代微服务架构的需求。