官方文档 http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

文章目录

  • 配置语法
    • URL配置规则
    • URL末尾是否存在 uri 的区别
      • 1. URL末尾存在 uri
      • 2. URL末尾不存在 uri
  • 扩展:通过 rewrite 配置修改代理路径
  • 附上测试用的nginx.conf

配置语法

Syntax:  proxy_pass URL;
Default:    —
Context:    location, if in location, limit_except

URL配置规则

url用于设置代理服务器协议地址,以及可选的uri
一般表现形式为:protocol://ip:port[uri] 或者 protocol://domain[uri]

由于URL末尾是否存在uri的处理逻辑不同,下面着重分析:

URL末尾是否存在 uri 的区别

1. URL末尾存在 uri

/” 也算是uri

处理逻辑:代理请求时,会先将请求的uri中和location匹配的部分替换成 proxy_pass 指定的uri,再将最终的uri拼接到代理地址,才是最终访问的url

举个栗子
有如下配置:

location /proxy {proxy_pass http://127.0.0.1:8099/svr1;  # uri为'/svr1'
}

有如下请求:http://localhost:8088/proxy/index.html
详细解析:

  • 请求的uri:/proxy/index.html
  • location匹配的部分:/proxy
  • proxy_pass 指定的uri:/svr1
  • 最终的uri:/svr1/index.html (将请求的uri中和location匹配的部分替换成 proxy_pass 指定的uri)
  • 代理地址:http://127.0.0.1:8099
  • 最终访问的url:http://127.0.0.1:8099/svr1/index.html

即访问 http://localhost:8088/proxy/index.html,实际请求路径为 http://127.0.0.1:8099/svr1/index.html

2. URL末尾不存在 uri

处理逻辑:代理请求时,直接将请求的uri拼接到代理地址,就是最终访问的url

举个栗子
有如下配置:

location /proxy2 {proxy_pass http://127.0.0.1:8099;  # 无uri
}

有如下请求:http://localhost:8088/proxy2/index.html
详细解析:

  • 请求的uri:/proxy2/index.html
  • 代理地址:http://127.0.0.1:8099
  • 最终访问的url:http://127.0.0.1:8099/proxy2/index.html

即访问 http://localhost:8088/proxy2/index.html,实际请求路径为 http://127.0.0.1:8099/proxy2/index.html

扩展:通过 rewrite 配置修改代理路径

location /v1 {proxy_pass http://127.0.0.1:8099;  # 无urirewrite '^/v1/(.*)$' /$1 break;
}

即访问 http://localhost:8088/v1/index.html,实际请求路径为 http://127.0.0.1:8099/index.html

附上测试用的nginx.conf

events {worker_connections  1024;
}
http {server {listen       8088;server_name  localhost;location /proxy {proxy_pass http://127.0.0.1:8099/svr1;  # uri为'/svr1'}location /proxy2 {proxy_pass http://127.0.0.1:8099; # 无uri}location /v1 {proxy_pass http://127.0.0.1:8099;rewrite '^/v1/(.*)$' /$1 break;}location /v2 {proxy_pass http://127.0.0.1:8099$1;}location /v3 {proxy_pass http://127.0.0.1:8099$request_uri;}location ~ /v4/([\d]+)/(.*) {proxy_pass http://127.0.0.1:$1/$2?$query_string;}location ~ /v5/([\d]+) {proxy_pass http://127.0.0.1:$1;rewrite ^/v5/([\d]+)/(.*)$ /$2 break;}location /v6 {if ($request_uri ~* ^/(.*)$) {proxy_pass http://127.0.0.1:8099/$1;}}}# 此server模拟被代理的服务。server {listen       8099;server_name  localhost;location / {add_header request $request;#  直接返回请求路径。也就是通过Nginx代理后,实际请求的url。default_type text/html; return 200 $host:$server_port$request_uri;}}
}

end

Nginx proxy_pass指令(代理配置)相关推荐

  1. 使用 Nginx 实现四层代理配置

    一.基本介绍 平时我们在配置 Nginx 代理时,一般配置的都是基于 http 或是 https 协议的代理,也就是应用层.但是有些时候,我们并不想配置这种基于应用层的代理.比如说:我们要代理到数据库 ...

  2. 【nginx配置】 proxy_pass反向代理配置中url后面加不加/的说明

    在日常的web网站部署中,经常会用到nginx的proxy_pass反向代理,有一个配置需要弄清楚:配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把loca ...

  3. nginx之反向代理配置

    参数用nginx进行反向代理,我这边的有好几个系统,都是不同的IP和端口.我希望在外部访问的时候,是同一个IP和端口.这样可以解决跨域的问题, 结构图: 通过每个系统的网址可以直接访问,另外,我们通过 ...

  4. nginx搭建反向代理配置并测试

    前言: 如今信息时代,对于web服务器的要求很高,既要性能,又要稳定性,又经济最好免费,还要满足公司的各大奇葩业务需求,越来越挑剔,就像你去买手机,中意的是外观好看,功能强大,拍照清晰,存储大,不死机 ...

  5. 解决nginx proxy_pass反向代理cookie,session丢失的问题

    开发了一个web项目,直接通过url访问,可以正常访问.但是通过nginx就访问不到css,js等文件. nginx.conf文件配置如下: 访问web报错. 但是直接访问web就正常 整了很长时间, ...

  6. nginx 非socket代理配置

    nginx反向代理socket配置 1,安装 git clone https://github.com/yaoweibin/nginx_tcp_proxy_module cd nginx-1.8.1p ...

  7. nginx api接口代理配置细节

    server {listen 80;server_name localhost:80;location / {# proxy_set_header Host $host:$server_port;# ...

  8. nginx 4层代理配置

    1.nginx 从1.9.0版本开始支持四层代理,但做四层代理时 编译需要添加  --with-stream模块 # ./configure --prefix=/usr/local/nginx--us ...

  9. 宝塔运行在nginx二级目录代理配置

    访问路径为 http://1.15.13.54/bt/,每个静态文件和请求地址都需要重新代理 server {listen 80;server_name 1.15.13.54;index index. ...

最新文章

  1. VirtFS 虚拟化技术简介
  2. python函数返回的元组_python – 从函数返回一个单独的元组元组
  3. Ajax技术简单入门
  4. ROS系统玩转自主移动机器人(3)-- 开源机器人结构介绍
  5. 二分查找——A-B数对(洛谷 P1102)
  6. 跑了10千米,再一次伤了膝盖
  7. Java 8 ConcurrentHashMap源码中竟然隐藏着两个BUG
  8. server sql 数据c盘迁移d盘_C盘空间不足怎么办?如何给C盘扩容?
  9. CPU异常分析(以trap00为例)
  10. JavaScript中的数组 1
  11. 自动化测试之java的job任务
  12. google authenticator python_Google Authenticator TOTP原理详解(以Python为例)
  13. nodejs 端口被占解决
  14. [Python3 填坑] 008 索引君的朋友 in
  15. Redis应用(一)——Windows系统中搭建并启动redis环境
  16. 【EDA技术】 实验一 利用半减器设计一位全减器
  17. 监理项目的服务器,idc服务器机房搬迁工程施工监理的重点
  18. 魔兽8.0最新服务器人口普查,魔兽世界8.2最新人口普查 2019各服务器人口普查信息汇总...
  19. 一级域名二级域名区别
  20. 【前端安全】常见安全性问题及解决方案

热门文章

  1. xp系统电脑如何链接宽带连接服务器,WinXP设置开机自动宽带连接的方法
  2. poj3426(网络流)
  3. 计算机指纹识别的原理步骤,指纹识别技术的基本原理及过程
  4. 媒体-PR-微商-地摊儿…… 媒体人的转型你到了哪一步?
  5. F1赛车相关公开数据集
  6. mysql中signed是什么类型_mysql|unsigned 与 signed 类型
  7. 时寒冰:中国房价下跌序幕刚刚拉开
  8. android chrome 夜间,【科技知识】(暗黑模式)Android安卓版的Chrome谷歌浏览器这样设置暗黑模式(夜间模式)...
  9. css3 呼吸的莲花_CSS3 莲花盛开动画
  10. linux网络编程tcp和udp基本函数调用过程及如何选择