Nginx FastDFS不能访问了怎么办

72次阅读
没有评论

共计 4088 个字符,预计需要花费 11 分钟才能阅读完成。

这篇文章主要介绍“Nginx FastDFS 不能访问了怎么办”,在日常操作中,相信很多人在 Nginx FastDFS 不能访问了怎么办问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx FastDFS 不能访问了怎么办”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!

问题重现

在服务器上搭建集群时,统一对外访问的接口为 http://192.168.175.110,前端童鞋访问时,是通过 http://192.168.175.101 访问的,并且前端加了一个前缀 file,也就是通过 http://192.168.175.101/file 来访问的。第一时间我想到的是直接将前端的请求通过 Nginx 转发到 192.168.175.110 服务器。在 192.168.175.101 服务器上简化后的 Nginx 配置如下所示。

upstream file { server 192.168.175.110:80 max_fails=3; } server { listen 80; server_name 192.168.175.101; location / { root html; index index.html index.htm; # 允许 cros 跨域访问  add_header  Access-Control-Allow-Origin   *  #proxy_redirect default; # 跟代理服务器连接的超时时间,必须留意这个 time out 时间不能超过 75 秒,当一台服务器当掉时,过 10 秒转发到另外一台服务器。 proxy_connect_timeout 10; } location ~/file { add_header  Access-Control-Allow-Origin   *  add_header  Access-Control-Allow-Credentials   true  proxy_pass http://file; proxy_set_header Host $host:$server_port; } }

我在 192.168.175.110 服务器上配置的 Ngin 如下所示。

server { listen 80; server_name 192.168.175.110; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; # 允许 cros 跨域访问  add_header  Access-Control-Allow-Origin   *  #proxy_redirect default; # 跟代理服务器连接的超时时间,必须留意这个 time out 时间不能超过 75 秒,当一台服务器当掉时,过 10 秒转发到另外一台服务器。 proxy_connect_timeout 10; } location ~/group([0-9]){ root /data/fastdfs/storage/data; ngx_fastdfs_module; } }

此时,就存在一个问题:通过 file 前缀将请求转发到 192.168.175.110 服务器时,会返回 400 状态码。

其实,问题的定位也比较简单,就是前端访问时多加了一个 file 前缀。那么,我们该如何解决这个问题呢?

问题解决

一般情况下,Nginx 的反向代理,只会替换域名或者 IP 部分,其他部分会按照原样进行转发。也就是说,前端访问 http://192.168.175.101/file 时,会被转发到 http://192.168.175.110/file 上,从而无法正常访问文件服务接口。

既然定位到问题了,那我们下一步就是要解决这个问题。思路也比较简单,就是在 192.168.175.101 服务器上接收到请求时将 file 前缀去掉。那如何去掉呢?

其实也很简单,只需要在 192.168.175.101 服务器上的 Nginx 上添加如下配置。

location ^~/file/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://file/; }

此时,192.168.175.101 服务器上的 Nginx 配置如下所示。

upstream file { server 192.168.175.110:80 max_fails=3; } server { listen 80; server_name 192.168.175.101; location / { root html; index index.html index.htm; # 允许 cros 跨域访问  add_header  Access-Control-Allow-Origin   *  #proxy_redirect default; # 跟代理服务器连接的超时时间,必须留意这个 time out 时间不能超过 75 秒,当一台服务器当掉时,过 10 秒转发到另外一台服务器。 proxy_connect_timeout 10; } location ^~/file/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://file/; } }

此时,再次访问 http://192.168.175.101/file 时,就被转发到 http://192.168.175.110 上,能够正确访问文件服务接口。

知识扩展

nginx 反向代理配置如何去除前缀?

使用 Nginx 做反向代理的时候,可以简单的直接把请求原封不动的转发给下一个服务。设置 proxy_pass 请求只会替换域名,如果要根据不同的 url 后缀来访问不同的服务,则需要通过如下方法:

方法一:加 /

upstream pay { server localhost:8089 weight=5; } upstream order { server localhost:8090 weight=5; } server { listen 80; server_name binghe.com; location ^~/pay/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://pay/; } location ^~/order/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://order/; } }

^~/pay/ 表示匹配前缀是 pay 的请求,proxy_pass 的结尾有 /,则会把 /pay/* 后面的路径直接拼接到后面,即移除 pay。

方法二:rewrite

upstream pay { server localhost:8089 weight=5; } upstream order { server localhost:8090 weight=5; } server { listen 80; server_name binghe.com; location ^~/pay/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; rewrite ^/user/(.*)$ /$1 break; proxy_pass http://pay; } location ^~/order/ { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; rewrite ^/order/(.*)$ /$1 break; proxy_pass http://order; } }

到此,关于“Nginx FastDFS 不能访问了怎么办”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-17发表,共计4088字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)