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 @ 2024-06-21 15:26  cy_b  阅读(339)  评论(0编辑  收藏  举报