180 lines
7.1 KiB
Plaintext
180 lines
7.1 KiB
Plaintext
# ============================================================
|
||
# 宝塔站点 api.yunzer.cn 的 nginx 配置(留档副本)
|
||
# 文件位置(服务器):/www/server/panel/vhost/nginx/api.yunzer.cn.conf
|
||
# 面板入口:宝塔 → 网站 → api.yunzer.cn → 设置 → 配置文件
|
||
#
|
||
# 【2026-10-31 新增】根路径域名校验文件的 http 放行
|
||
# 微信公众平台 / 小程序配置「业务域名」时,校验服务是走 **http**
|
||
# 去抓取根目录下的校验文件(如 /1XXl8fPHr9.txt)。
|
||
# 原配置把 http 一律 301 到 https,微信拿到重定向就判
|
||
# 「校验文件验证失败,请确认已在域名根目录正确放置校验文件」。
|
||
# 下面 HTTP_TO_HTTPS 块里新增的 if 例外,就是让根路径下的 .txt
|
||
# 校验文件在 http 下直接返回文件内容(不跳转)。
|
||
# 用通配而不是写死文件名:微信每次重新下载校验文件都会生成新随机名。
|
||
#
|
||
# 【注意】不要设 verify_hosts
|
||
# 本文件里 proxy_set_header Host 10.31.100.2; 把 Host 头改成了 IP,
|
||
# Go 侧看不到 api.yunzer.cn 这个域名。verify_hosts 必须留空
|
||
# (留空 = 所有走本服务的域名都放行)。
|
||
#
|
||
# 【注意】location ^~ / 会让后面的正则 location 失效
|
||
# ^~ 匹配后 nginx 不再检查正则 location,所以下面两条
|
||
# 「禁止访问的敏感文件 / 敏感目录」的 location ~* 规则在本站点实际不生效。
|
||
# 当前无泄露风险(Go 不提供工作目录文件,未知路径一律 404),但要知道这层保护是空的。
|
||
#
|
||
# 【注意】proxy_cache_path 定义了缓存区但当前未启用 proxy_cache
|
||
# 以后若启用全局缓存,301 会被缓存住,微信可能拿到缓存的旧响应,届时需清缓存。
|
||
# ============================================================
|
||
|
||
proxy_cache_path /www/wwwroot/api.yunzer.cn/proxy_cache_dir levels=1:2 keys_zone=api_yunzer_cn_cache:20m inactive=1d max_size=5g;
|
||
server {
|
||
listen 80;
|
||
listen 443 ssl;
|
||
http2 on;
|
||
listen [::]:80;
|
||
server_name api.yunzer.cn;
|
||
index index.php index.html index.htm default.php default.htm default.html;
|
||
root /www/wwwroot/api.yunzer.cn;
|
||
include /www/server/panel/vhost/nginx/extension/api.yunzer.cn/*.conf;
|
||
#CERT-APPLY-CHECK--START
|
||
|
||
# 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
|
||
include /www/server/panel/vhost/nginx/well-known/api.yunzer.cn.conf;
|
||
#CERT-APPLY-CHECK--END
|
||
|
||
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
|
||
|
||
#error_page 404/404.html;
|
||
|
||
#HTTP_TO_HTTPS_START
|
||
set $isRedcert 1;
|
||
if ($server_port != 443) {
|
||
set $isRedcert 2;
|
||
}
|
||
if ( $uri ~ /\.well-known/ ) {
|
||
set $isRedcert 1;
|
||
}
|
||
# 域名校验文件(微信/搜索引擎/第三方平台)必须能用 http 直接访问,不能 301 跳 https。
|
||
# 用 [.] 代替 \. ,避免 nginx 配置解析里反斜杠转义的歧义。
|
||
if ( $uri ~ ^/[A-Za-z0-9._-]+[.]txt$ ) {
|
||
set $isRedcert 1;
|
||
}
|
||
if ($isRedcert != 1) {
|
||
rewrite ^(/.*)$ https://$host$1 permanent;
|
||
}
|
||
#HTTP_TO_HTTPS_END
|
||
ssl_certificate /www/server/panel/vhost/cert/api.yunzer.cn/fullchain.pem;
|
||
ssl_certificate_key /www/server/panel/vhost/cert/api.yunzer.cn/privkey.pem;
|
||
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
|
||
ssl_ciphers EECDH+CHACHA20:CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
|
||
ssl_prefer_server_ciphers on;
|
||
ssl_session_tickets 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;
|
||
#SSL-END
|
||
|
||
#REDIRECT START
|
||
|
||
#REDIRECT END
|
||
|
||
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
|
||
|
||
#error_page 404 /404.html;
|
||
|
||
#error_page 502 /502.html;
|
||
|
||
#ERROR-PAGE-END
|
||
|
||
#PHP-INFO-START PHP引用配置,可以注释或修改
|
||
include enable-php-00.conf;
|
||
#PHP-INFO-END
|
||
|
||
#IP-RESTRICT-START 限制访问ip的配置,IP黑白名单
|
||
|
||
#IP-RESTRICT-END
|
||
|
||
#BASICAUTH START
|
||
|
||
#BASICAUTH END
|
||
|
||
#SUB_FILTER START
|
||
|
||
#SUB_FILTER END
|
||
|
||
#GZIP START
|
||
|
||
#GZIP END
|
||
|
||
#GLOBAL-CACHE START
|
||
|
||
#GLOBAL-CACHE END
|
||
|
||
#WEBSOCKET-SUPPORT START
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection $connection_upgrade;
|
||
#WEBSOCKET-SUPPORT END
|
||
|
||
#PROXY-CONF-START
|
||
location ^~ / {
|
||
proxy_pass http://10.31.100.2:9000;
|
||
proxy_set_header Host 10.31.100.2;
|
||
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 3600s;
|
||
# 发送超时(发送请求到后端的时间)
|
||
proxy_send_timeout 3600s;
|
||
# 读取超时(等待后端响应的时间)
|
||
proxy_read_timeout 3600s;
|
||
# 支持websocket链接
|
||
proxy_http_version 1.1;
|
||
proxy_set_header Upgrade $http_upgrade;
|
||
proxy_set_header Connection $connection_upgrade;
|
||
# 客户端请求体大小限制(0 表示不限制)
|
||
client_max_body_size 0;
|
||
# 客户端请求体超时(客户端发送请求体的时间)
|
||
client_body_timeout 3600s;
|
||
# 客户端请求体缓冲区大小
|
||
client_body_buffer_size 128k;
|
||
# 禁用请求体缓冲(直接流式传输到后端,不先缓存到磁盘)
|
||
proxy_request_buffering off;
|
||
# 禁用响应缓冲(直接流式传输到客户端)
|
||
proxy_buffering off;
|
||
}
|
||
#PROXY-CONF-END
|
||
|
||
#SERVER-BLOCK START
|
||
|
||
#SERVER-BLOCK END
|
||
|
||
# 禁止访问的敏感文件
|
||
location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.project|\.bashrc|\.bash_profile|\.bash_logout|\.DS_Store|\.gitignore|\.gitattributes|LICENSE|README\.md|CLAUDE\.md|CHANGELOG\.md|CHANGELOG|CONTRIBUTING\.md|TODO\.md|FAQ\.md|composer\.json|composer\.lock|package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|\.\w+~|\.swp|\.swo|\.bak(up)?|\.old|\.tmp|\.temp|\.log|\.sql(\.gz)?|docker-compose\.yml|docker\.env|Dockerfile|\.csproj|\.sln|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|phpunit\.xml|phpunit\.xml|pom\.xml|build\.gradl|pyproject\.toml|requirements\.txt|application(-\w+)?\.(ya?ml|properties))$ {
|
||
return 404;
|
||
}
|
||
# 禁止访问的敏感目录
|
||
location ~* /(\.git|\.svn|\.bzr|\.vscode|\.claude|\.idea|\.ssh|\.github|\.npm|\.yarn|\.pnpm|\.cache|\.husky|\.turbo|\.next|\.nuxt|node_modules|runtime)/ {
|
||
return 404;
|
||
}
|
||
#一键申请SSL证书验证目录相关设置
|
||
location /.well-known {
|
||
allow all;
|
||
}
|
||
#禁止在证书验证目录放入敏感文件
|
||
if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
|
||
return 403;
|
||
}
|
||
#LOG START
|
||
access_log /www/wwwlogs/api.yunzer.cn.log;
|
||
error_log /www/wwwlogs/api.yunzer.cn.error.log;
|
||
#LOG END
|
||
|
||
}
|