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
解析在浏览器地址栏输入一个URL后发生了什么
Jun 21 Servers
详解使用内网穿透工具Ngrok代理本地服务
Mar 31 Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
Apr 07 Servers
Docker官方工具docker-registry案例演示
Apr 13 Servers
Windows server 2003卸载和安装IIS的图文教程
Jul 15 Servers
彻底卸载VMware虚拟机的超详细步骤记录
Jul 15 Servers
Nginx如何配置根据路径转发详解
Jul 23 Servers
Windows7下FTP搭建图文教程
Aug 05 Servers
WIN10使用IIS部署ftp服务器详细教程
Aug 05 Servers
Docker容器harbor私有仓库部署和管理
Aug 05 Servers
CentOS7 minimal 最小化安装网络设置过程
Dec 24 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
2019十大人气国漫
2020/03/13 国漫
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
PHP中nowdoc和heredoc使用需要注意的一点
2014/03/21 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
Javascript与vbscript数据共享
2007/01/09 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
python回调函数的使用方法
2014/01/23 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
图解Python变量与赋值
2018/04/03 Python
Django进阶之CSRF的解决
2018/08/01 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
python爬虫超时的处理的实例
2018/12/19 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
学生期末评语大全
2014/04/30 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers