广告位联系
返回顶部
分享到

nginx代理参数proxy_pass的实现

nginx 来源:互联网 作者:佚名 发布时间:2024-05-01 22:08:44 人浏览
摘要

proxy_pass参数用于配置反向代理,指定客户端请求被转发到后端服务器,后端地址可以是域名、ip端口URI 代理后端报错提示本地找不到CSS文件、JavaScript文件或图片 例如:nginx :10.1.74.109 后端服

proxy_pass参数用于配置反向代理,指定客户端请求被转发到后端服务器,后端地址可以是域名、ip端口URI

代理后端报错提示本地找不到CSS文件、JavaScript文件或图片

例如:nginx :10.1.74.109
后端服务:http://10.1.74.109:8082

参数配置:

1

2

3

location /harbor {

            proxy_pass http://10.1.74.109:8082;

    }

在这里插入图片描述

访问http://10.1.74.109/zabbix 显示不全,提示文件css等静态文件不存在。

原因在于proxy_pass确实指向后端服务器,但浏览器加载页面时,可能会请求一些静态资源,但是这些请求可能不包含/zabbix前缀,也可能静态资源是动态生成的,因此才会去本地去查找这些文件

例如以上后端登录前访问得地址为http://10.1.74.109:8082/,登录成功后得地址为http://10.1.74.109:8082/zabbix.php?action=dashboard.view,没有包含/zabbix前缀

如果当后端地址后缀不会发生改变的前提代理,一般来说是正常的

处理方式:使用proxy_set_header设置正确的Host头

1

2

3

4

5

6

7

location /zabbix { 

    proxy_pass http://10.1.74.109:8082/;  #url后面必须加上"/"

    proxy_set_header Host $host; 

    proxy_set_header X-Real-IP $remote_addr; 

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    keepalive_timeout 500;

}

参数 含义
proxy_set_header Host $host; nginx在转发请求时,将Host请求头的值设置为原始请求的主机名和端口,后端可能依赖Host头来确定应该提供那些内容
proxy_set_header X-Real-IP $remote_addr; X-Real-IP用于设别发起请求客户端的真是IP地址,$remote_addr是一个变量包含客户端的IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; X-Forwarded-For 表示HTTP请求的来源地址,用于追踪请求来源,$proxy_add_x_forwarded_for 是一个特殊的变量,包含原始请求的 X-Forwarded-For 头(如果存在的话)和客户端的 IP 地址。后端服务器可以看到所有经过的代理服务器和原始客户端的 IP 地址。
keepalive_timeout 500; 设置长连接超时时间,当客户端和服务器之间建立一个长连接后,该连接会在设置时间内保持打开状态,以便客户端通过相同的连接发送多个请求,减少连接开销,提高性能

proxy_pass不同写法的影响

客户端请求地址为:www.ljx.com/a.html

方式一:proxy_pass http://10.1.1.1;

1

2

3

4

5

location /ceshi/

{

    proxy_pass http://10.1.1.1;

    ...

}

  • 请求地址:www.ljx.com/ceshi/a.html
  • 代理后地址:http://10.1.1.1/ceshi/a.html
  • 解释:完整的请求URI(包括/ceshi/a.html)将被发送到后端服务器10.1.1.1。由于proxy_pass没有指定URI部分,因此原始请求的URI保持不变。

方式二:proxy_pass http://10.1.1.1/;

1

2

3

4

5

location /ceshi/

{

    proxy_pass http://10.1.1.1/;

    ...

}

  • 请求地址:www.ljx.com/ceshi/a.html
  • 代理后地址:http://10.1.1.1/a.html
  • 解释:由于proxy_pass后面有一个斜杠/,nginx会忽略原始请求URI中的/ceshi/部分,只保留a.html部分,并将其发送到后端服务器

方式三:proxy_pass http://10.1.1.1/index/;

1

2

3

4

5

location /ceshi/

{

    proxy_pass http://10.1.1.1/index/;

    ...

}

  • 请求地址:www.ljx.com/ceshi/a.html
  • 代理后地址:http://10.1.1.1/index/a.html
  • 解释:原始请求的URI中的/ceshi/被替换为/index/,然后发送到后端服务器。路径的其余部分a.html保持不变

方式四:proxy_pass http://10.1.1.1/somepath;

1

2

3

4

5

location /ceshi/

{

    proxy_pass http://10.1.1.1/somepath;

    ...

}

  • 请求地址:www.ljx.com/ceshi/a.html
  • 代理后地址:http://10.1.1.1/somepath
  • 解释:无论原始请求的URI是什么,都会被完全替换为proxy_pass后面指定的URI(在这里是/somepath)。查询字符串(如果有的话)也会被忽略

版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计