# 东区人才卡 —— 站点(2026-10-08)
|
#
|
# 部署位置:/etc/nginx/sites-available/talent-card (软链到 sites-enabled/)
|
#
|
# 【域名现状】甲方把 `www.dqrcfwpt.com` 与退域名 `dqrcfwpt.com` 指向了他们自己的机器
|
# (公司官网,腾讯云 IP),所以那两个名字**已经不在我们手上**。测试环境改用新建的
|
# 子域 **`rencaika.dqrcfwpt.com`**(解析到本机)。
|
#
|
# 端口分工:
|
# rencaika.dqrcfwpt.com:443 → **测试环境(正式入口,不带端口)**
|
# rencaika.dqrcfwpt.com:8081 → 测试环境(同机兼容,TLS;小程序白名单也可以填它)
|
# 8082(明文,server_name _) → 测试环境兜底,给 IP 访问用(HSTS 管不到 IP,这条永远可用)
|
# 80 → 301 到 https(但给 ACME 校验留例外,见下)
|
# www/退域名 的 443 → 生产占位页(那两个名字已不在我们手上,这段是残留,可删)
|
#
|
# 【证书】两套并存,nginx 按 SNI 选:
|
# * `rencaika.dqrcfwpt.com` → Let's Encrypt(certbot 自动续期,2027-01-06 到期,
|
# 续期由 certbot.timer 负责)。**换腾讯云证书时只需把下面两行路径指过去,reload 即可。**
|
# * `www`/退域名 → 腾讯云签发的 DV(SAN: dqrcfwpt.com + www.dqrcfwpt.com,人工续期)
|
#
|
# ⚠️ 80 上的 ACME 例外不能删:Let's Encrypt 用 HTTP-01 校验续期,它要能读到
|
# http://<域名>/.well-known/acme-challenge/<token>。加 301 时必须给这个前缀留出直读路径,
|
# 否则**自动续期会静默失败**,到期那天才发现。
|
#
|
# HSTS 仍是第一步:max-age=86400,无 includeSubDomains / preload。
|
|
# ── 测试环境 · 新子域(TLS,443 = 正式入口)──────────────────────────────
|
server {
|
listen 443 ssl;
|
http2 on;
|
server_name rencaika.dqrcfwpt.com;
|
|
ssl_certificate /etc/letsencrypt/live/rencaika.dqrcfwpt.com/fullchain.pem;
|
ssl_certificate_key /etc/letsencrypt/live/rencaika.dqrcfwpt.com/privkey.pem;
|
ssl_trusted_certificate /etc/letsencrypt/live/rencaika.dqrcfwpt.com/chain.pem;
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_prefer_server_ciphers off;
|
ssl_session_cache shared:SSL:10m;
|
ssl_session_timeout 1d;
|
|
# 刻意不配 ssl_stapling:Let's Encrypt 的证书已不再包含 OCSP 响应者地址,
|
# 配了只会每次 reload 打一条 "ssl_stapling ignored" 警告,留一行永不生效的配置更容易误导人。
|
|
add_header Strict-Transport-Security "max-age=86400" always;
|
|
include snippets/talent-card-locations.conf;
|
}
|
|
# ── 测试环境 · 新子域的 8081(与 443 同一套内容,小程序白名单填哪个都行)──
|
server {
|
listen 8081 ssl;
|
http2 on;
|
server_name rencaika.dqrcfwpt.com;
|
|
ssl_certificate /etc/letsencrypt/live/rencaika.dqrcfwpt.com/fullchain.pem;
|
ssl_certificate_key /etc/letsencrypt/live/rencaika.dqrcfwpt.com/privkey.pem;
|
ssl_trusted_certificate /etc/letsencrypt/live/rencaika.dqrcfwpt.com/chain.pem;
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_prefer_server_ciphers off;
|
ssl_session_cache shared:SSL:10m;
|
ssl_session_timeout 1d;
|
|
include snippets/talent-card-locations.conf;
|
}
|
|
# ── 旧名字(www / 退域名)的 8081:那两个名字已不在我们手上,保留只为兼容 ──
|
server {
|
listen 8081 ssl;
|
http2 on;
|
server_name www.dqrcfwpt.com dqrcfwpt.com;
|
|
ssl_certificate /etc/nginx/ssl/talent-card/server.crt;
|
ssl_certificate_key /etc/nginx/ssl/talent-card/server.key;
|
ssl_trusted_certificate /etc/nginx/ssl/talent-card/server.crt;
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_prefer_server_ciphers off;
|
ssl_session_cache shared:SSL:10m;
|
ssl_session_timeout 1d;
|
|
resolver 223.5.5.5 119.29.29.29 valid=300s;
|
ssl_stapling on;
|
ssl_stapling_verify on;
|
|
include snippets/talent-card-locations.conf;
|
}
|
|
# ── 明文兜底(IP 访问用;HSTS 管不到 IP,所以这条永远可用)──────────────
|
server {
|
listen 8082;
|
server_name _;
|
include snippets/talent-card-locations.conf;
|
}
|
|
# ── 80:跳转到 https,但 ACME 校验直读 ────────────────────────────────
|
server {
|
listen 80;
|
server_name rencaika.dqrcfwpt.com;
|
|
location ^~ /.well-known/acme-challenge/ {
|
root /var/www/html;
|
}
|
|
location / {
|
return 301 https://$host$request_uri;
|
}
|
}
|
|
# ── 生产预留占位页(旧名字;那两个名字已指向甲方机器,这段实际已不生效)────
|
server {
|
listen 443 ssl;
|
http2 on;
|
server_name www.dqrcfwpt.com dqrcfwpt.com;
|
|
ssl_certificate /etc/nginx/ssl/talent-card/server.crt;
|
ssl_certificate_key /etc/nginx/ssl/talent-card/server.key;
|
ssl_trusted_certificate /etc/nginx/ssl/talent-card/server.crt;
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
ssl_prefer_server_ciphers off;
|
ssl_session_cache shared:SSL:10m;
|
ssl_session_timeout 1d;
|
|
resolver 223.5.5.5 119.29.29.29 valid=300s;
|
ssl_stapling on;
|
ssl_stapling_verify on;
|
|
add_header Strict-Transport-Security "max-age=86400" always;
|
|
root /data/talent-card/placeholder;
|
location / {
|
try_files $uri /index.html;
|
}
|
|
# 这个域名上还没有后端。别让 /api 落到静态页上、让人以为接口可用。
|
location /api/ {
|
default_type application/json;
|
return 503 '{"code":503,"message":"production not deployed"}';
|
}
|
}
|