Nginx 路由转发和反向代理 location 配置「建议收藏」

Nginx 路由转发和反向代理 location 配置「建议收藏」Nginx配置直接替换location匹配部分proxy_pass的目标地址,默认不带/,表示只代理域名,url和参数部分不会变(把请求的path拼接到proxy_pass目标域名之后作为代理的URL)proxy_pass的目标地址后增加/,则表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址例子例如下面的配置,当我们访问http://44.179.118.54:80/shop/xxx的时候访问

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1. Nginx 配置的三种方式

  • 第一种直接替换 location 匹配部分

  • 第二种 proxy_pass 的目标地址,默认不带 /,表示只代理域名,url 和参数部分不会变(把请求的 path 拼接到 proxy_pass 目标域名之后作为代理的URL)

  • 第三种 proxy_pass 的目标地址后增加 /,则表示把 pathlocation 匹配成功的部分剪切掉之后再拼接到 proxy_pass 目标地址

第二种对应标题 4. 普通代理的例子

第三种对应标题 3. 针对 location 截取代理路径的例子

2. location配置

location [ = | ~ | ~* | ^~ ] uri { 
   ...}

uri前面的方括号中的内容是可选项,解释如下:

"=":用于标准uri前,要求请求字符串与uri严格匹配,一旦匹配成功则停止

"~":用于正则uri前,并且区分大小写

"~*":用于正则uri前,但不区分大小写

"^~":用于标准uri前,要求Nginx找到标识uri和请求字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配

3. 针对 location 截取代理路径的例子

例如下面的配置演示第三种配置方案,当我们访问 http://44.179.118.54:80/shop/xxx 的时候

访问的时候 Nginx 会把 /shop/ 截取掉然后把后面的 path 拼接到 proxy_pass

那么我们实际访问的就是: http://44.179.118.54:8007/xxx 这个服务。

第二个访问 http://44.179.118.54:8007/addrdata/xxx 实际就是访问 http://44.179.118.54:8007/xxx 这个服务。

这两种配置方式达到的效果都是一致的。

主要就是 proxy_pass 地址后面加 / 和不加 / 处理逻辑完全不一样。

 # shop-service
 # 反向代理shop-service服务
location ^~ /shop/ {
       proxy_pass  http://44.179.118.54:8007/;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_read_timeout 300s;

       proxy_redirect    off;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header Host $http_host;
       proxy_next_upstream http_502 http_504 error timeout invalid_header;
}

# 这里的效果和上面配置的效果一致
location ~ ^/addrdata/(.*) {
       proxy_pass  http://44.179.118.54:8007/$1$is_args$args;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_read_timeout 300s;

       proxy_redirect    off;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header Host $http_host;
       proxy_next_upstream http_502 http_504 error timeout invalid_header;
}

4. 普通代理的例子

这样我们访问 http://19.11.11.70:8888/test-api/xxx 实际就是访问 http://19.11.11.71:8088/test-api/xxx,就是帮 19.11.11.71:8088 端口做了一层代理

server { 
   
    listen       8888;
    server_name  19.11.11.70;
    client_max_body_size     10240m; #修改成自己的想要设置的å44;13Hclient_body_timeout 6000s;
    client_header_timeout 600;
    client_body_buffer_size 128m;
    send_timeout 300s;
    keepalive_timeout 300s;

    location /test-api { 
   
        proxy_pass  http://19.11.11.71:8088/test-api;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 300s;

        proxy_redirect    off;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
    }
}

5. 配置前端的例子

# 根目录配置前端
# 前端放置目录 /home/java/nginx/cn_abd-app/abd-app
location / { 
   
    root /home/java/nginx/cn_abd-app/abd-app/;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
}

# 非根目录配置前端
# 前端放置目录 /home/java/nginx/cn_bbd-app/bbd-app
location /bbd-app { 
   
    root   /home/java/nginx/cn_bbd-app/;
    index  index.html index.htm;
    try_files $uri $uri/ /bbd-app/index.html;
}

# 非根目录配置二级路由前端
# 前端放置目录 /home/java/nginx/cn_bbd-app/app/bbd-app
location /app/bbd-app { 
   
    root   /home/java/nginx/cn_bbd-app/;
    index  index.html index.htm;
    try_files $uri $uri/ /app/bbd-app/index.html;
}

# 非根目录配置hash路由前端
# 前端放置目录 /home/java/nginx/cn_bbd-app/share 
location /share { 
   
    root /home/java/nginx/cn_bbd-app/;
    index index.html index.htm;
 }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180278.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mqtt服务器搭建php,Windows搭建MQTT服务器

    mqtt服务器搭建php,Windows搭建MQTT服务器MQTT,是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器和控制设备:轻量级的消息订阅和发布(publish/subscribe)协议建立在TCP/IP协议之上物联网,MQTT在这方面应用较多这里MQTT分客户端服务器端网上的确有很多代码,但是服务器端的配置很少,而MQTT是通过TCP/IP协议连接的,MQTT是协议类型HTTP协议一样,也需要对应的服…

  • cnpm 安装命令

    cnpm 安装命令  npm包管理器是每一位js开发者的得力助手,利用npm我们不仅能下载到别人写好的组件,也可以快速搭建我们的项目……但对于国内的开发者,npm的下载速度有是实在是令人捉鸡,因此国内的许多开发者都会使用更加快速的cnpm简单代替npm。打开控制台,输入命令npminstall-gcnpm–registry=https://registry.npm.taobao.org耐心等待一下安装即可此后我们再使用npm下载包的时候,就可以将npm命令替换为cnpm,下载下来的内容完全一样,但是速度

    2022年10月15日
  • html5开发环境有哪些(ios开发环境搭建)

    跨平台移动开发实际上就是基于HTML5开发软件界面和主要的业务逻辑,因此一套完善的基于移动平台的HTML5开发环境是非常有必要的。这里我主要的关注点是以下四点:Javascript和Jquerymobile的编辑器HTML5的各个元素的InspectorJavascript远程断点debug移动平台Javascript开发模式1)Javascript和Jquerymobile的

  • java 中几种常用数据结构「建议收藏」

    java 中几种常用数据结构「建议收藏」Java中有几种常用的数据结构,主要分为Collection和map两个主要接口(接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。一、几个常用类的区别 1.ArrayList:元素单个,效率高,多用于查询 2.Vector:元素单个,线程安全,多用于查询 3.LinkedList:元素单个,多用于插入和删除 4.H

  • 小程序子组件向父组件传值_小程序组件通信

    小程序子组件向父组件传值_小程序组件通信父组件页面是carts.wxml子页面是product.html子组件wxml代码<viewclass=’cartAllSel’bindtap=”bindSelectAll”><iconwx:if=”{{selectedAllStatus}}”class=’iconDel’type=’success’color=’#4D4D4D’size…

  • 最火的C语言编程软件,适合编写C语言代码的编程软件有哪些

    最火的C语言编程软件,适合编写C语言代码的编程软件有哪些C语言基本上是大学计算机及其相关专业在大一上学期就会开的一门课程,但是很多学生就是在大一上学期期末的时候很着急,因为自己完全没有学好C语言,感觉一学期白学了,其实究其主要原因,还是因为你在上课认真听了,也做了课堂作业,但是却没有在课后好好的自己去主动敲代码,笔者不能让你有多主动去自己实践,但是笔者可以给你介绍几款更好的写代码的软件(手机电脑都可以)。C语言作为一门起源比较早的编程语言,可以编程的手…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号