nginx - 我如何在 nginx 中将子域作为 proxy_pass 值传递?

标签 nginx reverse-proxy proxypass

我目前处于需要获取/捕获子域并将该子域值传递给 Nginx 配置中的 proxy_pass 的情况。

例如

如果用户输入

http://google.com.mydomain.com

那么它应该做代理传递

proxy_pass http://www.google.com/;

在上面的例子中 google.comsub-domain

这可行吗? 我怎样才能在 nginx 中实现类似的东西?

目前我使用的配置是在配置文件中硬编码子域值,但是有很多子域,所以我需要这样做,但不知道正确的语法。

server {
    listen       80;
    server_name  subdomain.domain.com;
    charset utf-8;

    location / {
      proxy_pass http://www.subdomain/;
    }
}

我使用 * 作为 A 记录将所有子域重定向到我的网络主机,即通配符 DNS。

更新:

我从 https://stackoverflow.com/a/22774520/1642018 中找到了代码片段

server {          
    listen       80;                                               
  # this matches every subdomain of domain.
  server_name .domain.com;                                           

  location / {                                                   

    set $subdomain "";

    if ($host ~* "^(.+)\.domain.com$") {                             
      set $subdomain $1;                                         
    }                                                            

    proxy_pass http://$subdomain;   

  }                                                              
} 

但请求显示的是我的默认页面,该页面位于我的默认 Web 根目录中。

最佳答案

两件事。

1- 一个解析器(一个用于你的 nginx 的 DNS 服务器来解析 google.com,你可以在你的主机上添加或者你可以添加解析器语句)

2- 您需要解决您的客户将如何处理不同的域,我的意思是 google.com 与 google.com.ar 或 google.fr 不同)

在这个例子中,我为你的例子 google.com 做了它

worker_processes 4;

error_log /var/log/nginx/error.log;

events {
  worker_connections  1024;
}

http {

  server {
    listen       80;

    location / { 
      set $subdomain ""; 

      if ($host ~* "^(.+)\.domain.com$") {
        set $subdomain $1; 
      }   
      resolver 8.8.8.8;
      proxy_pass "http://$subdomain.com";

    }   
  }
}

希望这个配置对你有帮助。

关于nginx - 我如何在 nginx 中将子域作为 proxy_pass 值传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31793556/

相关文章:

apache - 如何在代理后面隐藏弱 SSL?

python - 用于 uvicorn 的 unix 套接字上的 Nginx 反向代理不起作用

Nginx 如果 cookie 存在不同的位置

nginx - 如何使用带有反向代理和负载均衡器的可扩展Docker群集从一个VM服务多个站点

php - Oracle OCI8 扩展未在 php 7.4 中加载

node.js - iis作为反向代理: configure it to forward current windows loged user as a custom header

spring - 带有 Proxypass 和 Spring Security 的 Apache

nginx 反向代理背后的 ASP.NET customErrors

nginx - rtmp 流的 ffmpeg 覆盖,fname 为空

nginx - 将nginx主机和proxypass重写为squid