Files
openapi/nginx/openapi.rrrosmontis.icu.conf
RRRosmontis 67aa9be3da feat(nginx): openapi 全站启用按 IP 限流(轻防滥用档)
- 00-limits.conf 新增 limit_req_zone perip_req 10r/s + 429 状态码
  (zone 定义属服务器配置, 不入库)
- 站点 conf 443 server 块挂 limit_req burst=20 nodelay + limit_conn perip 10
- 域名直连无 CDN, binary_remote_addr 即真实 IP; 后端全绑 127.0.0.1 无死角
- 验证: 30 并发部分 429, 桶恢复后正常
2026-09-23 15:05:14 +08:00

150 lines
5.8 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# openapi.rrrosmontis.icu 统一入口(原 api/pixiv/apixiv.bu4.ren 合并)
# /pixiv/ /bilibili/ -> openapi 聚合层 127.0.0.1:9008 (main.py)
# /img-master/ /img-original/ -> i.pximg.net 图片反代(原 apixiv.bu4.ren 逻辑,方案二)
# 2026-09-02 补 /img-original/:App API 原图 URL 为 /img-original/ 前缀,此前未配置导致 404
proxy_cache_path /var/cache/nginx/openapi_img_cache levels=1:2 keys_zone=openapi_img_cache:20m inactive=1d max_size=5g;
server {
listen 80;
listen [::]:80;
server_name openapi.rrrosmontis.icu;
location /.well-known/acme-challenge/ {
root /var/www/acme;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
server_name openapi.rrrosmontis.icu;
ssl_certificate /home/openapi/cert/openapi.rrrosmontis.icu/fullchain.pem;
ssl_certificate_key /home/openapi/cert/openapi.rrrosmontis.icu/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
# ---- 按 IP 限流(轻防滥用档,2026-09-23):10r/s burst 20、并发连接 10,超出 429 ----
limit_req zone=perip_req burst=20 nodelay;
limit_conn perip 10;
resolver 8.8.8.8 1.1.1.1 ipv6=off valid=300s;
# ---- 图片反代 i.pximg.net(原 apixiv.bu4.ren 逻辑,路径前缀 /img-master/)----
location ^~ /img-master/ {
set $backend i.pximg.net;
proxy_pass https://$backend$request_uri;
proxy_set_header Host i.pximg.net;
proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
proxy_set_header Referer "https://www.pixiv.net/";
proxy_ssl_server_name on;
proxy_ssl_name i.pximg.net;
proxy_connect_timeout 10s;
proxy_read_timeout 300s;
proxy_cache openapi_img_cache;
proxy_cache_valid 200 7d;
proxy_cache_valid 404 5m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_key "$scheme$proxy_host$request_uri";
add_header X-Cache-Status $upstream_cache_status;
}
# ---- 图片反代 i.pximg.net(/img-original/,App API 原图路径,2026-09-02 补)----
location ^~ /img-original/ {
set $backend i.pximg.net;
proxy_pass https://$backend$request_uri;
proxy_set_header Host i.pximg.net;
proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36";
proxy_set_header Referer "https://www.pixiv.net/";
proxy_ssl_server_name on;
proxy_ssl_name i.pximg.net;
proxy_connect_timeout 10s;
proxy_read_timeout 300s;
proxy_cache openapi_img_cache;
proxy_cache_valid 200 7d;
proxy_cache_valid 404 5m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_key "$scheme$proxy_host$request_uri";
add_header X-Cache-Status $upstream_cache_status;
}
# ---- pixiv(openapi 聚合层 /pixiv/get_image)----
location ^~ /pixiv/ {
proxy_pass http://127.0.0.1:9008;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_connect_timeout 60s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
# ---- bilibili(openapi 聚合层 /bilibili/get_video)----
location ^~ /bilibili/ {
proxy_pass http://127.0.0.1:9008;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_connect_timeout 60s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
# ---- 其余(根路径 / )→ 9008(main.py:跳转文章页)----
location / {
proxy_pass http://127.0.0.1:9008;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_connect_timeout 60s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
access_log /var/log/nginx/openapi.rrrosmontis.icu.log;
error_log /var/log/nginx/openapi.rrrosmontis.icu.error.log;
}