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. 静态文件处理
确保静态文件不会被提前捕获处理,避免影响反向代理的正常工作。
匹配优先级
- 精确匹配:如果有精确匹配的
location
,Nginx 将优先使用它。 - 正则匹配:如果没有精确匹配,Nginx 会按照配置文件中的顺序检查正则表达式的
location
,第一个匹配的正则表达式会被使用。 - 普通匹配:如果没有正则匹配,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