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 相关文章推荐
Centos7.7 64位利用本地完整安装包安装lnmp/lamp套件教程
Mar 09 Servers
nginx对http请求处理的各个阶段详析
Mar 31 Servers
利用Nginx代理如何解决前端跨域问题详析
Apr 02 Servers
Nginx进程管理和重载原理详解
Apr 22 Servers
nginx作grpc的反向代理踩坑总结
Jul 07 Servers
Nginx进程调度问题详解
Sep 25 Servers
Nginx反向代理学习实例教程
Oct 24 Servers
centos7安装mysql5.7经验记录
May 02 Servers
在容器中使用nginx搭建上传下载服务器
May 11 Servers
Windows Server 2022 超融合部署(图文教程)
Jun 25 Servers
Docker部署Mysql8的实现步骤
Jul 07 Servers
源码安装apache脚本部署过程详解
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 程序员应该使用的10个组件
2009/10/31 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
PHP闭包定义与使用简单示例
2018/04/13 PHP
php识别翻转iphone拍摄的颠倒图片
2018/05/17 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
js实现文字截断功能
2016/09/14 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
python中wheel的用法整理
2020/06/15 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
秋季校运会广播稿100字
2014/09/18 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
MySQL七大JOIN的具体使用
2022/02/28 MySQL
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技