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


Posted in Servers onMarch 31, 2021

场景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永久重定向

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

Servers 相关文章推荐
nginx前后端同域名配置的方法实现
Mar 31 Servers
nginx 反向代理之 proxy_pass的实现
Mar 31 Servers
Nginx域名转发使用场景代码实例
Mar 31 Servers
nginx配置文件使用环境变量的操作方法
Jun 02 Servers
总结高并发下Nginx性能如何优化
Nov 01 Servers
Nginx实现会话保持的两种方式
Mar 18 Servers
iSCSI服务器CHAP双向认证配置
Apr 01 Servers
从零开始在Centos7上部署SpringBoot项目
Apr 07 Servers
Consul在linux环境的集群部署
Apr 08 Servers
Nginx配置根据url参数重定向
Apr 11 Servers
在windows server 2012 r2中安装mysql的详细步骤
Jul 23 Servers
修改Nginx配置返回指定content-type的方法
Sep 23 Servers
提升Nginx性能的一些建议
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 #Servers
Nginx配置80端口访问8080及项目名地址方法解析
Mar 31 #Servers
Nginx配置https原理及实现过程详解
Mar 31 #Servers
如何在centos上使用yum安装rabbitmq-server
Mar 31 #Servers
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
阿里云Nginx配置https实现域名访问项目(图文教程)
You might like
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
基于jQuery的history历史记录插件
2010/12/11 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
js复制网页内容并兼容各主流浏览器的代码
2013/12/17 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
python实现验证码识别功能
2018/06/07 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
军训自我鉴定
2014/01/22 职场文书
高中学生评语大全
2014/04/25 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
微观世界观后感
2015/06/10 职场文书
关于运动会的广播稿
2015/08/19 职场文书