Nginx域名转发使用场景代码实例

 更新时间:2020年09月18日 13:06:22   作者:小猪夫  
这篇文章主要介绍了Nginx域名转发使用场景代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

场景1:因服务器限制,所以只对外开放了一个端口,但是需要请求不同的外网环境,所以在中转服务器上用nginx做了一次转发

实现:

server {
 listen  8051;
 server_name localhost;
 
 location /license/ {
      proxy_pass http://xxx.xxx.xxx.xxx:8058/;
 }
 
 location / {
      proxy_pass http://xxx.xxx.xxx.xxx:8051/;  } }

特别注意:

  敲黑板:此处如果涉及到文件上传的转发,相应在server_name下添加client_max_body_size 100m;

  域名转发的地址,proxy_pass后面必须跟"/",否则会造成转发不正常

  在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;
  如果没有/,表示相对路径,把匹配的路径部分也给代理走。

  假设下面四种情况分别用 http://192.168.1.1/proxy/aerchi.html 进行访问。

  第一种:

    location /proxy/ {
     proxy_pass http://127.0.0.1/;
    } 

    代理到URL:http://127.0.0.1/aerchi.html

  第二种(相对于第一种,最后少一个 / )

    location /proxy/ {
     proxy_pass http://127.0.0.1;
    }

    代理到URL:http://127.0.0.1/proxy/aerchi.html

  第三种:

    location /proxy/ {
    proxy_pass http://127.0.0.1/aaa/;
    }

    代理到URL:http://127.0.0.1/aaa/aerchi.html

  第四种(相对于第三种,最后少一个 / )  

    location /proxy/ {
      proxy_pass http://127.0.0.1/aaa;
    }

    代理到URL:http://127.0.0.1/aaaaerchi.html

场景2:因业务需要,一套前段代码需要映射到两个后台地址上,所以需要在接口上进行区分转发,同时转发时需要把区分标志去掉

实现:

server {
  listen  0.0.0.0:8204;
  server_name localhost;
  # 静态页面目录
  root   E:\xxxxxxx;
  # 默认首页
  index   /index.html;
  proxy_set_header Host $http_host;       
  proxy_set_header X-Real-IP $remote_addr;       
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  #proxy_cookie_path /* /*;
  client_max_body_size  100m;
    
  location ~*/wx/(.*) {#根绝接口是否包含/wx/来区分
     # 动态页面,交给tomcat处理
     if ( !-e $request_filename) {
        proxy_pass    http://127.0.0.1:8091/$1;#转到后台时需要把/wx去掉
     }
  }
  location / {
    # 用户浏览器端的缓存设置
    location ~* \.(css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
      expires -1;
      if (-f $request_filename) {
        break;
      }
    }
    # 动态页面,交给tomcat处理
    if ( !-e $request_filename) {
      proxy_pass    http://127.0.0.1:8092;
    #proxy_cookie_path /* /*;
    }
  }

  error_page  500 502 503 504 /50x.html;
  location = /50x.html {
    root  html;
  }
}

特别注意:

  1、 proxy_set_header Host $http_host;

  不改变请求头 。

  2、proxy_set_header Host host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,使用 host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。 这种情况下,使用host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,使用host变量它 的值在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名;

  3、proxy_set_header Host host: host:host:proxy_port;

  服务器名可以和后端服务器的端口一起传送:

  4、如果某个请求头的值为空,那么这个请求头将不会传送给后端服务器:

  proxy_set_header Accept-Encoding “”;

  5、用户真实的ip地址转发给后端服务器

  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Real-IP $remote_addr;

场景3:前段代码用vue实现,vue没有具体的页面,也是通过/xx/xx来访问资源,这时候需要与后台接口进行区分

实现:

  可以通过特殊字符类似“#”来区分,携带#的请求默认是静态资源

location ~* \.(#|css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
  expires -1;
  if (-f $request_filename) {
    break;
  }
}

场景4:因服务器限制,数据库访问需要nginx进行转发

实现:

stream {
  upstream cloudsocket {
    hash $remote_addr consistent;
    server 数据库实际ip:3306 weight=5 max_fails=3 fail_timeout=30s;
  }
 
 server {
    listen 127.0.0.1:8058; #本机代理端口
    proxy_connect_timeout 10s;
    proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。
    proxy_pass cloudsocket;
  }

}

特别注意:

stream与http同级,所以不要放到http里

场景5:访问某域名时需要重定向到另一个地址

实现:

server {
  listen 7000;
  server_name localhost;
  client_max_body_size 100m;

  location = / {
    rewrite ^(.*) https://www.baidu.com permanent;
  }
}

特别注意:

last        本条规则匹配完成后继续向下匹配新的location URI规则
break        本条规则匹配完成后终止,不在匹配任何规则
redirect       返回302临时重定向
permanent     返回301永久重定向

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • nginx rewrite 伪静态配置参数详细说明

    nginx rewrite 伪静态配置参数详细说明

    nginx rewrite 伪静态配置参数和使用例子 附正则使用说明
    2010-05-05
  • nginx缓存页面后 串会话问题的解决方法

    nginx缓存页面后 串会话问题的解决方法

    nginx支持页面缓存,之前我的博客有介绍配置方案,昨天出了一个诡异的问题,别人的机器登录后,我的机器打开应用的首页会出现别人的用户信息,也就是说我的浏览器访问的应用会话其实是别人的会话
    2013-06-06
  • nginx配置完rewrite浏览器提示将您重定向的次数过多的解决方法

    nginx配置完rewrite浏览器提示将您重定向的次数过多的解决方法

    本文主要介绍了nginx配置完rewrite浏览器提示将您重定向的次数过多的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Nginx配置前端http缓存的实现

    Nginx配置前端http缓存的实现

    本文介绍了使用Nginx配置前端HTTP缓存,通过合理配置缓存策略,可以有效地提升前端资源的加载速度,减少服务器负载,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • nginx的语法(基本语法和组成部分)

    nginx的语法(基本语法和组成部分)

    Nginx是一个高效、稳定的开源Web服务器和反向代理服务器,也可以用作邮件代理服务器、负载均衡器和HTTP缓存,很多人都选择nginx作为web服务器使用,下面是Nginx配置文件的一些基本语法和组成部分,使用Nginx的朋友可以了解一下
    2023-05-05
  • 详解基于CentOS 7配置Nginx自启动

    详解基于CentOS 7配置Nginx自启动

    这篇文章主要介绍了详解基于CentOS 7配置Nginx自启动,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • nginx禁止某个IP访问站点的设置方法

    nginx禁止某个IP访问站点的设置方法

    近期发现博客遭到某些人的恶意灌水,频繁地利用发帖机器人发表评论,给博客的管理带来诸多不便,搜索了一下资料,可以利用nginx的ngx_http_access_module 模块设置允许/禁止哪些ip或ip段访问站点。
    2010-12-12
  • nginx修改默认端口方法图文详解

    nginx修改默认端口方法图文详解

    我们都知道nginx 默认使用80端口,有时候我们希望nginx运行在其他端口,下面这篇文章主要给大家介绍了关于nginx修改默认端口的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • ubuntu系统中nginx启动脚本

    ubuntu系统中nginx启动脚本

    这篇文章主要介绍了ubuntu系统中nginx启动脚本,可以实现nginx的自启动,需要的朋友可以参考下
    2014-02-02
  • LINUX中NGINX反向代理下的TOMCAT集群(详解)

    LINUX中NGINX反向代理下的TOMCAT集群(详解)

    下面小编就为大家带来一篇LINUX中NGINX反向代理下的TOMCAT集群(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论