shinnosuke
4 天以前 38e39c50dcca12534c4efe2b49355a97c396b507
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
# 东区人才卡 —— 站点(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"}';
    }
}