File size: 3,411 Bytes
570a4e4
 
 
693ae43
570a4e4
10d3abf
 
693ae43
 
 
70b1fa9
570a4e4
4c875ea
 
 
 
 
10d3abf
 
 
 
 
70b1fa9
10d3abf
 
 
 
4c875ea
 
10d3abf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4c875ea
10d3abf
70b1fa9
693ae43
6aae631
0996a35
10d3abf
 
 
693ae43
 
10d3abf
 
 
693ae43
10d3abf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
693ae43
10d3abf
693ae43
10d3abf
 
 
693ae43
10d3abf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570a4e4
10d3abf
 
 
 
 
 
693ae43
 
570a4e4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    use epoll;
    worker_connections 65535;
    multi_accept on;
}

http {
    # 基础设置
    sendfile on;
    tcp_nodelay on;          # 开启 TCP_NODELAY
    tcp_nopush on;          # 开启 TCP_NOPUSH
    proxy_buffering off;     # 关闭代理缓冲
    chunked_transfer_encoding on;  # 启用分块传输编码

    # MIME类型
    include /etc/nginx/mime.types;
    
    # 客户端设置
    client_max_body_size 100M;
    client_body_buffer_size 128k;
    client_body_timeout 30s;
    client_header_timeout 30s;
    
    # 连接优化
    keepalive_timeout 120;   # 设置保持连接的超时时间
    keepalive_requests 100;   # 客户端保持连接请求的数量
    
    # 压缩设置
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;
    
    # 缓存设置
    proxy_request_buffering off;
    
    # 日志配置
    access_log /tmp/nginx_access.log;
    error_log /tmp/nginx_error.log warn;
    
    # 上游服务器配置
    upstream backend {
        least_conn;
        server 127.0.0.1:3000 max_fails=3 fail_timeout=30s;
        keepalive 64;
    }
    
    server {
        listen 3001 http2;  # 监听端口并启用 HTTP/2

        server_name localhost;
        
        # OpenAI API 路由
        location /ai/v1/ {
            rewrite ^/ai/v1/(.*)$ /v1/$1 break;
            proxy_pass http://backend;
            
            # 请求头设置
            proxy_set_header Host $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            
            # 清除敏感头部
            proxy_set_header X-Forwarded-For "";
            proxy_set_header X-Real-IP "";
            proxy_set_header X-Direct-Url "";
            proxy_set_header X-Forwarded-Port "";
            proxy_set_header X-Ip-Token "";
            proxy_set_header X-Request-Id "";
            proxy_set_header X-Amzn-Trace-Id "";
            proxy_set_header X-Forwarded-Proto "";
            
            # 超时设置
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;
            
            error_page 503 =429 /429.html;
        }
        
        location / {
            proxy_pass http://backend;
            
            # 请求头设置
            proxy_set_header Host $host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            
            # 清除敏感头部
            proxy_set_header X-Forwarded-For "";
            proxy_set_header X-Real-IP "";
            proxy_set_header X-Direct-Url "";
            proxy_set_header X-Forwarded-Port "";
            proxy_set_header X-Ip-Token "";
            proxy_set_header X-Request-Id "";
            proxy_set_header X-Amzn-Trace-Id "";
            proxy_set_header X-Forwarded-Proto "";
            
            # 超时设置
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;

            error_page 503 =429 /429.html;
        }
        
        # 429错误页面
        location = /429.html {
            return 429 'Too Many Requests';
        }
    }
}