File size: 5,293 Bytes
85bb794
b6abf23
85bb794
0fe2ec5
1d45550
85bb794
 
 
1d45550
85bb794
 
 
aa210ed
85bb794
 
 
1d45550
85bb794
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
aa210ed
04398c6
 
 
3743701
 
 
 
 
 
 
 
 
 
3fdaecc
 
 
3743701
 
 
 
 
 
85bb794
 
 
 
9942962
 
 
 
85bb794
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    client_body_temp_path /var/cache/nginx/client_temp;
    proxy_temp_path       /var/cache/nginx/proxy_temp;
    fastcgi_temp_path    /var/cache/nginx/fastcgi_temp;
    uwsgi_temp_path      /var/cache/nginx/uwsgi_temp;
    scgi_temp_path       /var/cache/nginx/scgi_temp;

    sendfile        on;
    keepalive_timeout  65;

    # GZIP 压缩配置
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    # 定义限速区域
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/m;

    # 更新 SSL 配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 优化 SSL 参数
    ssl_prefer_server_ciphers on;  # 优先使用服务器的密码套件
    ssl_session_timeout 1d;        # SSL 会话超时时间
    ssl_session_cache shared:SSL:50m;  # SSL 会话缓存
    ssl_session_tickets off;       # 禁用 session tickets

    # 模拟 Chrome 的 ECDH 曲线 
    ssl_ecdh_curve X25519:prime256v1:secp384r1;

    # 添加上游服务器 SSL 验证配置
    proxy_ssl_protocols TLSv1.2 TLSv1.3;
    proxy_ssl_ciphers HIGH:!aNULL:!MD5;
    proxy_ssl_verify off;  # 如果上游证书验证有问题,可以先关闭验证
    proxy_ssl_server_name on;  # 启用 SNI 支持

    server {
        listen       7860;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
        # Gemini v1 路由
        location /gemini/v1/ {
            # 启用限速
            limit_req zone=api_limit burst=20 nodelay;
            limit_req_status 429;

            proxy_pass https://generativelanguage.googleapis.com/v1/;
            proxy_set_header Host generativelanguage.googleapis.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # Gemini v1beta 路由
        location /gemini/v1beta/ {
            # 启用限速
            limit_req zone=api_limit burst=20 nodelay;
            limit_req_status 429;

            proxy_pass https://generativelanguage.googleapis.com/v1beta/;
            proxy_set_header Host generativelanguage.googleapis.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # Groq OpenAI 路由
        location /groq/openai/v1/ {
            # 启用限速
            limit_req zone=api_limit burst=20 nodelay;
            limit_req_status 429;

            proxy_pass https://api.groq.com/openai/v1/;
            proxy_set_header Host api.groq.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # Cohere 路由
        location /cohere/v1/ {
            # 启用限速
            limit_req zone=api_limit burst=20 nodelay;
            limit_req_status 429;

            proxy_pass https://api.cohere.ai/v1/;
            proxy_set_header Host api.cohere.ai;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # XAI 路由
        location /xai/v1/ {
            # 启用限速
            limit_req zone=api_limit burst=20 nodelay;
            limit_req_status 429;

            proxy_pass https://api.x.ai/v1/;
            proxy_set_header Host api.x.ai;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # Mistral 路由
        location /mistral/v1/ {
            # 启用限速
            limit_req zone=api_limit burst=20 nodelay;
            limit_req_status 429;

            proxy_pass https://api.mistral.ai/v1/;
            proxy_set_header Host api.mistral.ai;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # GitHub 路由
        location /github/v1/ {
            # 启用限速
            limit_req zone=api_limit burst=20 nodelay;
            limit_req_status 429;

            proxy_pass https://models.inference.ai.azure.com/;
            proxy_set_header Host models.inference.ai.azure.com;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        # 错误页面配置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}