Files
yunzerwebsiteallinone/go/docs/nginx/api.yunzer.cn.conf
T
2026-10-31 19:17:37 +08:00

180 lines
7.1 KiB
Plaintext
Raw 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.
# ============================================================
# 宝塔站点 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
}