前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 路由转发和反向代理 location 配置「建议收藏」

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

作者头像
全栈程序员站长
发布2022-11-02 16:47:03
10.5K0
发布2022-11-02 16:47:03
举报

目录

1. Nginx 配置的三种方式

  • 第一种直接替换 location 匹配部分
  • 第二种 proxy_pass 的目标地址,默认不带 /,表示只代理域名,url 和参数部分不会变(把请求的 path 拼接到 proxy_pass 目标域名之后作为代理的URL)
  • 第三种 proxy_pass 的目标地址后增加 /,则表示把 pathlocation 匹配成功的部分剪切掉之后再拼接到 proxy_pass 目标地址

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

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

2. location配置

代码语言:javascript
复制
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 地址后面加 / 和不加 / 处理逻辑完全不一样。

代码语言:javascript
复制
 # 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 端口做了一层代理

代码语言:javascript
复制
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. 配置前端的例子

代码语言:javascript
复制
# 根目录配置前端
# 前端放置目录 /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.cn/180278.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月19日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 1. Nginx 配置的三种方式
  • 2. location配置
  • 3. 针对 location 截取代理路径的例子
  • 4. 普通代理的例子
  • 5. 配置前端的例子
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档