Nginx 反向代理 (泛域名->泛域名,https,静态文件)

Nginx 反向代理配置指南 (泛域名 -> 泛域名, HTTPS, 静态文件)

完整版

server
{
# 监听80端口
listen 80;
listen 443 ssl http2;;
# ......
# 泛域名
server_name *.{fromName}.com;
# 获取 "*" 参数
set $subdm '';
if ($host ~* "(.*)\.{fromName}\.com") {
set $subdm $1;
}
location / {
# DNS
resolver 114.114.114.114;
# 设置请求头
proxy_set_header Host $subdm.{toName}.cn;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header X-Accel-Buffering;
# 跳转
proxy_pass https://$subdm.{toName}.cn;
# 带入ssl信息
proxy_ssl_server_name on;
proxy_ssl_name $subdm.{toName}.cn;
# 超时设置
proxy_read_timeout 1800s;
}
}

1. 泛域名配置

在 Nginx 的 server 块中使用 server_name 参数和 * 通配符来配置泛域名。例如,server_name *.{fromName}.com 表示 {fromName}.com 的所有二级域名。

2. 获取二级域名变量

可以使用正则表达式和变量来获取二级域名:

if ($host ~* "(.*).{fromName}.com") {
set $subdomain $1; # 其中 $1 表示匹配的二级域名
}
location / {
proxy_pass https://$subdomain.{toName}.cn;
}

3. 解决指向 HTTPS 时的 502 错误问题

3.1 DNS 解析问题

当跳转路径为域名时,确保两边的 Nginx 都配置了相同的 DNS。示例如下:

resolver 144.144.144.144;

3.2 SSL 问题

3.2.1 跳转路径为 IP 时

添加以下配置以传递本服务器的 SSL 信息到跳转的域名:

proxy_ssl_server_name on;

3.2.2 跳转路径为域名时

添加以下配置:

proxy_ssl_name $subdomain.{toName}.cn;
proxy_set_header Host $subdomain.{toName}.cn;

4. 静态文件处理

确保静态文件不会被提前捕获处理,避免影响反向代理的正常工作。

匹配优先级

  1. 精确匹配:如果有精确匹配的 location,Nginx 将优先使用它。
  2. 正则匹配:如果没有精确匹配,Nginx 会按照配置文件中的顺序检查正则表达式的 location,第一个匹配的正则表达式会被使用。
  3. 普通匹配:如果没有正则匹配,Nginx 会使用最长匹配的普通 location

示例配置

处理图片等静态资源

location ~* .(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
error_log off;
access_log off;
}

处理 JS 和 CSS 文件

location ~* .(js|css)?$ {
expires 12h;
error_log off;
access_log off;
}

参考

域名反向代理
nginx https 502 DNS相关
nginx https 502

扩展

proxy介绍
expires介绍

posted @   cy_b  阅读(636)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示