Nginx/OpenResty配置server块实现多子域名反向代理问题咨询
问题原因
- 子域名未配置DNS解析:你仅完成了根域名
myapp.john.com到实例A公网IP的A记录绑定,prod.myapp.john.com、test.myapp.john.com等子域名未配置对应的A记录指向实例A,导致浏览器发起请求时无法解析到正确IP,请求不会到达实例A。 - SSL证书覆盖范围不足:当前使用的Let's Encrypt证书仅对根域名
myapp.john.com生效,未包含相关子域名,即使DNS解析配置完成,访问子域名时也会触发证书不安全警告。 - 配置文件存在语法不规范问题:Nginx/OpenResty的注释符号为
#,你现有配置里用的//不符合语法要求,可能导致配置加载异常。
解决方案
步骤1:配置DNS解析
在你的域名解析服务商后台添加解析记录:
- 方案一:单独添加两个子域名的A记录,分别将
prod.myapp.john.com、test.myapp.john.com指向实例A的公网IP - 方案二:添加泛解析A记录,将
*.myapp.john.com指向实例A的公网IP,后续新增子域名无需重复修改解析配置
步骤2:更新SSL证书
重新申请包含所有所需域名的Let's Encrypt证书,参考命令如下:
# 单域名/多域名验证(自动验证,无需手动配DNS) certbot certonly --nginx -d myapp.john.com -d prod.myapp.john.com -d test.myapp.john.com # 泛域名验证(需要手动添加DNS TXT记录完成验证) certbot certonly --manual --preferred-challenges dns -d "myapp.john.com" -d "*.myapp.john.com"
证书更新完成后,同步修改所有站点配置里的ssl_certificate和ssl_certificate_key路径为新证书的路径。
步骤3:配置多子域名站点文件
首先修正现有/usr/local/openresty/nginx/sites/prod.myapp.john.com的配置注释语法:
server { listen 80; listen [::]:80; server_name prod.myapp.john.com; # 注释使用#号 return 301 https://$host$request_uri; } server { listen 443 ssl; server_name prod.myapp.john.com; # 注释使用#号 ssl_certificate /etc/letsencrypt/live/myapp.john.com/fullchain.pem; # 替换为新证书路径 ssl_certificate_key /etc/letsencrypt/live/myapp.john.com/privkey.pem; # 替换为新证书路径 location / { proxy_pass http://192.42.56.87:80/; expires 0; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; } }
然后在同目录下新增test.myapp.john.com配置文件,内容如下:
server { listen 80; listen [::]:80; server_name test.myapp.john.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name test.myapp.john.com; ssl_certificate /etc/letsencrypt/live/myapp.john.com/fullchain.pem; # 替换为新证书路径 ssl_certificate_key /etc/letsencrypt/live/myapp.john.com/privkey.pem; # 替换为新证书路径 location / { proxy_pass http://192.xx.xx.xx:80/; # 替换为实例C的私有IP expires 0; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; } }
步骤4:重载配置生效
执行以下命令验证配置语法正确性,无误后重载OpenResty配置:
# 验证配置语法 openresty -t # 重载配置 openresty -s reload
内容的提问来源于stack exchange,提问作者Kid_Learning_C
相关产品推荐
相关产品推荐

