nginx+fastdfs-502异常解决方案
(2020-04-16 11:40:14)分类: 服务器 |
nginx+fastdfs-
502异常解决方案
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
add_header Content-Disposition
"attachment;filename=$arg_n";
add_header Access-Control-Allow-Origin
"*";
root
/home/ubuntu/fastdfs/nginx-link/data;
ngx_fastdfs_module;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
3.解决报错
make的时候会报一下错误,
root/fastdfs-nginx-module/src//common.c:21:25: fatal error:
fdfs_define.h: No such file or directory
#include
"fdfs_define.h"
^
vim
/root/fastdfs-nginx-module/src/config
CORE_INCS="$CORE_INCS
/usr/local/include/fastdfs
/usr/local/include/fastcommon/"
CORE_LIBS="$CORE_LIBS
-L/usr/lib -lfastcommon -lfdfsclient"
重新编译,安装即可
user root;
worker_processes
1;
events {
worker_connections
1024;
}
http {
include
mime.types;
default_type
application/octet-stream;
sendfile
on;
keepalive_timeout 65;
server
{
listen
8888;
server_name
localhost;
location ~/group[0-9]/
{
ngx_fastdfs_module;
}
error_page
500 502 503 504
/50x.html;
location = /50x.html
{
root
html;
}
}
}
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
/etc/init.d/fdfs_trackerd
start
/etc/init.d/fdfs_trackerd
stop
ln -s /home/fastdfs/storage/data/
/home/fastdfs/storage/data/M00
/etc/init.d/fdfs_storaged start
/etc/init.d/fdfs_storaged stop
/usr/bin/fdfs_trackerd
/etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged
/etc/fdfs/storage.conf
1.防火墙规则问题,重启防火墙或者端口没有开启。
2.监控连接是不是满了。
输入df -h
3.磁盘或者内存情况是不是满了。
输入top看看内存是否溢出
4.防火墙策略问题只要输入下面的命令即可
setsebool -P httpd_can_network_connect 1
5.设置nginx超时时间
问题终极排查:
使用fastdfs加两台storage,一台做备份使用时,发现有一类文件名是以“ag-”开头,使用
标签即时显示的时候会报502异常,
查看nginx的error.log得到
2017/09/25 17:39:09 [error] 13333#0: *30734
recv() failed (104: Connection reset by peer) while reading
response header from upstream, client: 10.24.169.19, server:
localhost, request: "GET
/group1/M00/01/5E/ag-JjlnIzqmAdi3UAAOreY6LKcM688.jpg HTTP/1.1",
upstream:
"http://106.15.137.142:8081/group1/M00/01/5E/ag-JjlnIzqmAdi3UAAOreY6LKcM688.jpg?redirect=1",
host: "10.135.237.203:8081"
分析一下客户端与nginx的交互过程如下:
一般Nginx与Tracker装在一台服务器上,所以他们之间的通信一般不会时间太长而导致超时
但是Nginx与Storage一般不再一台机器上,因此Nginx与Storage之间的通信可能会timeout,从而导致502异常。
所以需要在Nginx中添加如下配置
location /group1/M00{
后来发现,还是解决不了这个问题,继续分析发现另外一台的Storage上的文件是访问不了的,检查一看nginx_fastdfs_module没有配置,添加上去后,重启nginx,发现502的异常解决了但是偶尔会出现插入的图片需要很长时间才能显示出来。
讲过一番思考后,发现这是Storage同步延迟的结果,大概是这样的Tracker将文件放在StorageA上,但是访问的时候,Tracker发现StorageB也是可用的,就返回了StorageB的IP与端口。但是此时StorageB还没有此文件,所以一直等待,直到StorageB同步StorageA的数据。
查看Tracker的配置文件有如下配置:
# which storage server to download
file
# 0: round robin (default)
# 1: the source storage server which the current
file uploaded to
download_server=1
意思是选择哪一个Storage
服务器去下载文件0代表轮询,为默认值,1代表从当前文件的源文件服务器上下载文件
此时设为1,就好了。
那么Tracker是怎么判断哪一台是源务器的呢?是根据文件名,Tracker_Nginx_Module可以根据文件名反解出源服务器IP,文件时间戳,根据这两点就可以找到源Storage服务器了。
————————————————
compilation
terminated.
make[1]: ***
[objs/addon/src/ngx_http_fastdfs_module.o] Error 1
解决办法:
-------------------------------
[root@fastdfs-storage
~]# vim /application/nginx/conf/nginx.conf
说明:
a、"user
root"是解决下载操作时报404的问题
b、8888端口号与/etc/fdfs/storage.conf中的http.server_port=8888相对应
c、storage对应有多个group的情况下,访问路径带group名称,例如:/group1/M00/00/00/**,对应nginx配置:
————————————————
启动方式以及配置和nginx一样的端口
/usr/bin/fdfs_upload_file
/etc/fdfs/client.conf /root/logo.png
vim
/etc/fdfs/storage.conf
http.server_port=8888