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 proxy_cache 缓存配置详解
Mar 31 Servers
Nginx本地目录映射实现代码实例
Mar 31 Servers
Nginx域名转发使用场景代码实例
Mar 31 Servers
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
Apr 04 Servers
idea下配置tomcat避坑详解
Apr 12 Servers
Windows Server 2019 域控制器安装图文教程
Apr 28 Servers
Nginx限流和黑名单配置
May 20 Servers
windows server 2012安装FTP并配置被动模式指定开放端口
Jun 10 Servers
云服务器部署 Web 项目的实现步骤
Jun 28 Servers
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
Jul 15 Servers
centos环境下nginx高可用集群的搭建指南
Jul 23 Servers
Apache自带的ab压力测试工具的实现
Jul 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大文件分块上传功能实例详解
2019/07/22 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
js变量作用域及可访问性的探讨
2006/11/23 Javascript
javascript 对象的定义方法
2007/01/10 Javascript
Javascript读取cookie函数代码
2010/10/16 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
svg动画之动态描边效果
2017/02/22 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
vue实现点击隐藏与显示实例分享
2019/02/13 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python生成随机mac地址的方法
2015/03/16 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
python打印异常信息的两种实现方式
2019/12/24 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
工程部经理岗位职责
2013/12/08 职场文书
行政部主管岗位职责
2013/12/28 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
竞选部门副经理的自荐书范文
2014/02/11 职场文书
企业愿景口号
2015/12/25 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python