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;
 }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux mysql1146_MySQL主从同步及错误1146解决办法

    linux mysql1146_MySQL主从同步及错误1146解决办法在实际使用MySQL的时候我们有时要增加一些新的库进行主从同步,所以可以通过修改my.cnf文件以及在主库上添加用户连接权限就可以实现主从同步,而在做主从同步的时候碰到几个问题这里就和大家说一下,至于如何构建主从同步这里就不再多说了,相信在网上能找到一大堆,这里就稍稍提几个关键点,在从库下的my.cnf添加如下几行:server-id=2#一般主库是1,从库可以除1以外的数字log-bin=m…

    2022年6月4日
    92
  • 微信企业号根据错误码返回错误信息类封装

    微信企业号根据错误码返回错误信息类封装微信企业号根据错误码返回错误信息类封装

    2022年5月1日
    78
  • vc怎么改变背景颜色_vc运行界面怎么设置颜色

    vc怎么改变背景颜色_vc运行界面怎么设置颜色最近眼睛发炎,特别怕亮色,看到vc的开发环境都太亮,于是想修改。1>在菜单”Tools”->”Options”的最后一页”Format”中选择“sourcewindow”,将前景色改为黑色,将背景色改为淡灰色。2>改变系统的窗口背景色.设置方法:桌面右击属性选择外观

    2022年8月12日
    48
  • kubernetes教程入门_centos7搭建k8s集群

    kubernetes教程入门_centos7搭建k8s集群文章目录第一章 kubernetes简介01 部署方式的演变容器部署的编排问题:解决以上问题的容器编排管理工具:02 k8s简介主要功能:03 k8s组件04 k8s概念第二章 k8s集群环境搭建05 环境规划**集群类型:**安装方式:主机规划:06 环境搭建 主机安装07 环境初始化1.检查centos版本2.主机名解析3.时间同步4.禁用防火墙服务iptables和firewalld5.禁用linux的安全服务selinux6.禁用swap分区7.修改linux内核参数8.配置ipvs功能9.重启系统

    2022年8月11日
    9
  • 线程池介绍及创建线程池的4种方式是什么_程序可以创建几个线程池

    线程池介绍及创建线程池的4种方式是什么_程序可以创建几个线程池1.什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源…

    2022年10月1日
    3
  • SQL Server数据库分区分表

    SQL Server数据库分区分表当一个数据表的数据量达到千万级别以后,每次查询都需要消耗大量的时间,所以当表数据量达到一定量级后我们需要对数据表水平切割。水平分区分表就是把逻辑上的一个表,在物理上按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下。这样把一个大的文件拆分成多个小文件,便于我们对数据的管理。下面我们来创建表分区代码创建分区表添加文件组代码格式:…

    2022年6月5日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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