nginx 动态反向代理

SpringHgui 发布于 2018/08/05 18:06
阅读 1K+
收藏 0

问题描述:

一级域名 abc.com 

现有一些二级域名站点,他们的端口号均为8080,*.abc.com:8080

如要访问 a.abc.com:8080的站点,需要每次输入端口号,所以想通过nginx进行代理实现访问时不再输入端口号

实现 a.abc.com:8080  =>a.abc.com  可如下配置

server {
    server_name  a.abc.com;
    location / {
       proxy_pass http://a.abc.com:8080;
       proxy_set_header   Host             $host;
       proxy_set_header   X-Real-IP        $remote_addr;
       proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

但是类似 *.abc.com:8080 的站点数量很多,不可能一个一个来设置

想实现如下配置

server {
    server_name  *.abc.com;
    location / {
       proxy_pass http://$host:8080;
       proxy_set_header   Host             $host;
       proxy_set_header   X-Real-IP        $remote_addr;
       proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

如上配置 nginx 显示 502,请问问题出在哪里!

加载中
0
SpringHgui
SpringHgui

 

站点启用日志后,在日志中找到 错误原因如下(具体的站点名称和客户端ip已经被我换掉了)

no resolver defined to resolve test.XXX.com, client: 192.168.1.167, server: *

然后就好办了,google到答案是:

Nginx 0.6.18以后的版本中启用了一个resolver指令,在使用变量来构造某个server地址的时候
一定要用resolver指令来指定DNS服务器的地址

之后增加,其余和问题中提问的并无不同

resolver 8.8.4.4;

修改之后如下大致如下

http {
    include       mime.types;
    default_type  application/octet-stream;

    resolver 8.8.4.4;

    sendfile        on;
    keepalive_timeout  65;

    server {
      server_name  *.adc.com;
      location / {
         proxy_pass http://$host:8080;
         proxy_set_header   Host             $host;
         proxy_set_header   X-Real-IP        $remote_addr;
         proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
      }
     
      error_log logs/error_frps.log error; 
    }
  }

 

果然,成功了。

 

 

0
SpringHgui
SpringHgui
哪位大神帮忙看看��
0
混乱羽翼
混乱羽翼

nginx你可以配置www.abc.com啊,然后*.abc.com在dns解析那里cnname到www.abc.com

0
javadeveloper
javadeveloper

 你这个肯定是配置错了。

proxy_pass http://$host:8080;

这个地方应该是映射到后端某个应用上面的,可能还要带上你的二级域名前缀特性, 不知道你的后端是什么情况,你这种配置形式应该也能解决问题,但是要调整一下proxy_pass 的配置,或者也可以用rewrite实现。

javadeveloper
javadeveloper
回复 @SpringHgui : 这个我知道
SpringHgui
SpringHgui
$host就是系统变量,代表具体的 server_name
0
滔哥
滔哥

我觉得这篇文章可能会适合你

https://lvtao.net/config/nginx-sites.html

 

0
一枚前端
一枚前端
可以直接写后端ip呢
SpringHgui
SpringHgui
8080端口后面也是反向代理,代理n多个站点,如果用ip和端口号的话,后面的代理可能无法判断具体的站点
0
s
stormh

直接改成http://127.0.0.1:8080。从配置来看,访问入口ip和反向代理到的ip都是同一个。

除非你在入口的nginx服务器配置了hosts解析,才可能去到其他 

 

返回顶部
顶部