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反向代理多个服务器的实现方法
Mar 31 Servers
Nginx中break与last的区别详析
Mar 31 Servers
详解nginx进程锁的实现
Jun 14 Servers
Nginx设置HTTPS的方法步骤 443证书配置方法
Mar 21 Servers
Apache Hudi数据布局黑科技降低一半查询时间
Mar 31 Servers
安装Windows Server 2012 R2企业版操作系统并设置好相关参数
Apr 29 Servers
nginx 配置指令之location使用详解
May 25 Servers
Windows Server 2022 超融合部署(图文教程)
Jun 25 Servers
解决Git推送错误non-fast-forward的方法
Jun 25 Servers
Linux中一对多配置日志服务器的详细步骤
Jul 23 Servers
win7配置本地ftp服务器的图文教程
Aug 05 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实现从上往下打印二叉树的方法
2018/01/18 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
用Python解决x的n次方问题
2019/02/08 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
Python简易版图书管理系统
2019/08/12 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python队列原理及实现方法示例
2019/11/27 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
python字典与json转换的方法总结
2020/12/28 Python
python 获取计算机的网卡信息
2021/02/18 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
客服部班长工作责任制
2014/02/25 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
婚礼父母致辞
2015/07/28 职场文书
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android
docker 制作mysql镜像并自动安装
2022/05/20 Servers