场景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
原文链接:https://blog.csdn.net/aerchi/java/article/details/84968106

场景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?$args;#转到后台时需要把/wx去掉 如果不加?$args get请求会丢失参数
}
}
  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;
  原文链接:https://blog.csdn.net/Sw_Pro/java/article/details/99679534

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

 

场景6:rewrite 时,不固定ip和端口,转发到该ip端口下的其他路径下

实现:

server {
  listen 7000;
  server_name localhost;
  client_max_body_size 100m;

  location = / {
    rewrite ^(.*) http://$host:$server_port/test permanent;
  }
}

注意:

$host-------------IP或域名

$server_port---端口

 

nginx域名转发的更多相关文章

  1. nginx域名转发 负载均衡 反向代理

    公司有三台机器在机房,因为IP不够用,肯定要分出来,所以要建立单IP 多域名的反向代理, 就是当请求www.abc.com 跳转到本机, 请求www.bbc.com 跳转到192.168.0.35 机 ...

  2. Nginx 域名转发

    例如访问www.b.cn直接跳到www.a.cn上去,又不想多域名捆绑一个目录. server { listen 80; server_name www.b.cn; rewrite ^/(.*)$ h ...

  3. Nginx配置域名转发实例

    域名:cps.45wan.com   所在阿里云主机:123.35.9.12 45wan没有在阿里云备案 67wan已经在阿里云备案 阿里云主机(假如123.35.9.12)上原来的nginx配置: ...

  4. nginx安装配置域名转发

    1.安装pcre 1.[root@localhost home]# tar zxvf pcre-8.10.tar.gz //解压缩 2.[root@localhost home]# cd pcre-8 ...

  5. Nginx配置以及域名转发

    工程中的nginx配置 #user nobody; worker_processes 24; error_log /home/xxx/opt/nginx/logs/error.log; pid /ho ...

  6. 搭建nginx反向代理用做内网域名转发

    先上一个我的正常使用的配置 location / { proxy_pass http://192.168.1.84:80; proxy_redirect off; proxy_set_header H ...

  7. 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  8. 端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  9. nginx域名访问的白名单配置梳理

    在日常运维工作中,会碰到这样的需求:设置网站访问只对某些ip开放,其他ip的客户端都不能访问.可以通过下面四种方法来达到这种效果:1)针对nginx域名配置所启用的端口(比如80端口)在iptable ...

随机推荐

  1. echarts-gl初体验:使用echarts-gl实现3D地球

    首先我们要下载引入echarts.js和echarts-gl.js 有需要的自己拿资源哈 链接:https://pan.baidu.com/s/1J7U79ey-2ZN4pjb7RTarjg 提取码: ...

  2. 游戏mod启动器原理

    基本原理 游戏程序会按一定顺序读取游戏文件夹根目录的文件. 所以我们制作mod和补丁的时候需要使得我们的文件先读取,从而使得后面读取到重复内容时候,游戏运行的内存中舍弃掉原本的文件. 游戏mod启动器 ...

  3. 🏆【Alibaba中间件技术系列】「Nacos技术专题」配置中心加载原理和配置实时更新原理分析(上)

    官方资源 https://nacos.io/zh-cn/docs/quick-start.html Nacos之配置中心 动态配置管理是 Nacos的三大功能之一,通过动态配置服务,可以在所有环境中以 ...

  4. 一、neo4j中文文档-入门指南

    目录 neo4j中文文档-入门指南 Neo4j v4.4 neo4j **Cypher ** 开始使用 Neo4j 1. 安装 Neo4j 2. 文档 图数据库概念 1. 示例图 2.节点 3. 节点 ...

  5. gin框架中图形验证码的生成和验证

    功能和验证码使用原理 本案例中没有使用redis作为缓存,而是使用的内存存储方法 github链接地址 下载命令 go get github.com/mojocn/base64Captcha 请求处理 ...

  6. Java高效开发-常用idea插件

    这里推荐几个常用的idea插件,可以大大提高开发的效率 所使用的idea版本为 2021.2.3 1.Jrebel and Xrebel for IntelliJ Jrebel用于热部署,避免频繁重启 ...

  7. vue组件中使用<transition></transition>标签过渡动画

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  8. 【第十三期】B站后端开发实习生一、二面经

    写在最前:非科班渣硕去年转码一年,不是什么大佬,纯小白(go语言开发). 一面(大概70min) 首先是自我介绍.(比较传统,就是描述下自己的技术栈) 线程和进程的关系. 线程之间如何进行通信. 死锁 ...

  9. Zookeeper应用场景汇总(超详细)

    Zookeeper典型应用场景汇总 数据发布与订阅(配置中心) 发布与订阅模型,即所谓的配置中心,顾名思义就是发布者将数据发布到ZK节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新.例 ...

  10. jquery里面的$(this)和this的区别

    感谢原文作者:何少旭 原文链接:https://www.cnblogs.com/heshaoxu/p/7672736.html 前言 当你用的是jquery时,就用$(this),如果是JS,就用th ...