我有一个configuration来redirect我的所有本地API调用(从一个客户端,与apikey标题)在example.com到一个远程API服务器distant-api-server.com:8000 )。
upstream api-server { server distant-api-server.com:8000; } server { listen 80; index index.html; server_name example.com; location ~ /api/(?<path>.*) { if ($request_method = OPTIONS ) { add_header 'Access-Control-Allow-Origin' "$http_origin"; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'apikey'; return 200; } if ($api_route = "error"){return 501;} error_page 501 /501_apikey.html; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT'; add_header 'Access-Control-Allow-Headers' 'apikey'; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-NginX-Proxy true; proxy_pass http://$api_route/$path$is_args$args; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr; proxy_ssl_session_reuse off; proxy_set_header Host $http_host; proxy_redirect off; } }
我想logging: – 请求从本地服务器发送到/ api – 请求发送,然后由Nginx发送到http://$api_route/$path$is_args$args – 从远程API收到并由Nginx发送到我的客户端的响应页
当我打电话给/ api的时候,远程API发生错误,然后我的请求超时。 通过了解Nginx发送/接收的内容将帮助我进行debugging。
我怎样才能实现这种logging?
OP,欢迎来到服务器故障! 作为参考,听@ MichaelHampton的build议,三重检查你的直觉。 在这种情况下,访问日志确实会向您提供您可能需要的信息。 你只需要告诉它你想要logging什么。
为了扩展M Hampton的build议,你应该做的是为上游/代理日志定义你自己的日志格式,然后使用你的自定义日志格式将access_log指令添加到你正在从中进行proxy_pass的位置。
location ~ /api/(?<path>.*) { log_format upstream_logging . . .; . . . access_log /var/log/nginx/api_logging.log upstream_logging; }
你可以在你的日志格式中包含你想要的任何nginxvariables。 您将必须使用这里的variables从上游单独指定要使用哪个头,例如$upstream_http_server 。 下面是一个build议的日志logging格式,用于logging上游信息,您可以用作起点。
log_format upstream_logging '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time';
一点点search和阅读文档(并听M汉普顿!)将带你很长的路要走。 祝你好运!