如何使用Nginx配置反向代理

一般配置

在一般的情况下,熟悉nginx的朋友都知道,如果需要配置反向代理,直接写一个location上下文和proxy模块即可,如果需要自定义前缀,使用一个rewrite模块即可。简单例子如下:

location ~ /dfs/group([0-9]) {  proxy_pass http://localhost:8080;  rewrite ^/dfs/(.*)$ /$1 break;  proxy_set_header host $host:$server_port;  proxy_set_header x-real-ip $remote_addr;  proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; }

到这里,一般的反代配置就算是可以了,那么对于go-fastdfs而言是否可以了呢?对于go-fastdfs一般上传是可以了,但是呢,对于使用了tus做断点续传还是不够,为什么呢?因为tus服务端会返回301重定向,并且需要携带一定的请求头过去,所以还需要特别的设置一下。

支持tus的反代配置

如果需要做tus的反代,要支持301重定向location的重写还要支持一定的请求头转发,那该如何配置呢?请参考下面的配置

location ~ /dfs1/group([0-9]) {  access_log logs/dfs/access.log main;  error_log logs/dfs/error.log error;  rewrite ^/dfs1/(.*)$ /$1 break;  proxy_pass http://localhost:8051;   # disable request and response buffering  proxy_request_buffering off;  proxy_buffering off;  proxy_http_version 1.1;   proxy_set_header host $host:$server_port;  proxy_set_header x-real-ip $remote_addr;  proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;  # 如果server_name不是公网域名,这个地方可以设置成ip  proxy_set_header x-forwarded-host $hostname;  proxy_set_header x-forwarded-proto $scheme;  proxy_set_header upgrade $http_upgrade;  proxy_set_header connection "upgrade";  # 因为使用了前缀加rewrite,所以要修改返回的location加上反向代理的前缀  proxy_redirect ~^(.*)/group([0-9])/big/upload/(.*) /dfs/group$2/big/upload/$3;  client_max_body_size 0; }

上面要注意一下就是proxy_redirect和client_max_body_size这两个配置,第一个配置是因为tus服务端返回的重定向location是不会携带自定义前缀的,因此需要自己加入自定义的前缀,我这里是/dfs,如果是别的,更换下就好。第二个就是client_max_body_size了,这个是设置为0表示不管上传多大的文件都不会报request too large的问题,直接转发过去,如果需要设置,那么请设置大于等于chunksize的数字。什么是chunksize?就是tus客户端分块上传的时候,每一块的大小,具体请参考。

负载均衡配置

在配置了集群服务器的情况下,上传或者下载如何进行负载均衡呢?使用nginx做了反代,配合upstream模块就可以实现了,具体参考如下配置

upstream dfs_stream {  server host1:port;  server host2:port;  ip_hash; }

上面的配置和一般的负载均衡没有什么不一样,唯一要注意的是要配置ip_hash,为什么呢?因为使用断点续传的时候,文件是分块上传的,如果不是ip_hash的话,有可能会前面几片被上传到a服务器,后面几片被上传到b服务器,那么这样子文件就不是完整的了,因此需要注意这个问题。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享