fix: 修复反代部署下拒绝日志客户端 IP 不准确
将 OpenAI codex_cli_only 拒绝诊断日志中的 request_client_ip 改为复用 ip.GetClientIP,与 usage 记录和 access log 的真实客户端 IP 解析逻辑保持一致。 保留 request_remote_addr 用于排查底层 Docker/反代 peer 地址,并补充 单元测试覆盖反代头与 remote addr 分离的场景。
This commit is contained in:
parent
f59d9a5f8e
commit
0af44ce4c2
@ -22,6 +22,7 @@ import (
|
||||
|
||||
"github.com/Wei-Shaw/sub2api/internal/config"
|
||||
"github.com/Wei-Shaw/sub2api/internal/pkg/apicompat"
|
||||
"github.com/Wei-Shaw/sub2api/internal/pkg/ip"
|
||||
"github.com/Wei-Shaw/sub2api/internal/pkg/logger"
|
||||
"github.com/Wei-Shaw/sub2api/internal/pkg/openai"
|
||||
"github.com/Wei-Shaw/sub2api/internal/pkg/openai_compat"
|
||||
@ -962,7 +963,7 @@ func appendCodexCLIOnlyRejectedRequestFields(fields []zap.Field, c *gin.Context,
|
||||
zap.String("request_path", strings.TrimSpace(req.URL.Path)),
|
||||
zap.String("request_query", strings.TrimSpace(req.URL.RawQuery)),
|
||||
zap.String("request_host", strings.TrimSpace(req.Host)),
|
||||
zap.String("request_client_ip", strings.TrimSpace(c.ClientIP())),
|
||||
zap.String("request_client_ip", strings.TrimSpace(ip.GetClientIP(c))),
|
||||
zap.String("request_remote_addr", strings.TrimSpace(req.RemoteAddr)),
|
||||
zap.String("request_user_agent", strings.TrimSpace(req.Header.Get("User-Agent"))),
|
||||
zap.String("request_content_type", strings.TrimSpace(req.Header.Get("Content-Type"))),
|
||||
|
||||
@ -131,8 +131,10 @@ func TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails(t *testing.T) {
|
||||
rec := httptest.NewRecorder()
|
||||
c, _ := gin.CreateTestContext(rec)
|
||||
c.Request = httptest.NewRequest(http.MethodPost, "/v1/responses?trace=1", bytes.NewReader(nil))
|
||||
c.Request.RemoteAddr = "172.18.0.1:54321"
|
||||
c.Request.Header.Set("User-Agent", "codex_cli_rs/0.98.0 (Windows 10.0.19045; x86_64) unknown")
|
||||
c.Request.Header.Set("Content-Type", "application/json")
|
||||
c.Request.Header.Set("X-Real-IP", "203.0.113.42")
|
||||
c.Request.Header.Set("OpenAI-Beta", "assistants=v2")
|
||||
|
||||
body := []byte(`{"model":"gpt-5.2","stream":false,"prompt_cache_key":"pc-123","access_token":"secret-token","input":[{"type":"text","text":"hello"}]}`)
|
||||
@ -146,6 +148,8 @@ func TestLogCodexCLIOnlyDetection_RejectedIncludesRequestDetails(t *testing.T) {
|
||||
require.True(t, logSink.ContainsFieldValue("request_user_agent", "codex_cli_rs/0.98.0 (Windows 10.0.19045; x86_64) unknown"))
|
||||
require.True(t, logSink.ContainsFieldValue("request_model", "gpt-5.2"))
|
||||
require.True(t, logSink.ContainsFieldValue("request_query", "trace=1"))
|
||||
require.True(t, logSink.ContainsFieldValue("request_client_ip", "203.0.113.42"))
|
||||
require.True(t, logSink.ContainsFieldValue("request_remote_addr", "172.18.0.1:54321"))
|
||||
require.True(t, logSink.ContainsFieldValue("request_prompt_cache_key_sha256", hashSensitiveValueForLog("pc-123")))
|
||||
require.True(t, logSink.ContainsFieldValue("request_headers", "openai-beta"))
|
||||
require.True(t, logSink.ContainsField("request_body_size"))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user