Моят nginx обработва заявки от / WWW който се монтира чрез NFS.
имам също / www2 който също е NFS, но монтиран от друг (резервен) сървър. Той има същите файлове като / WWW.
Как мога да направя nginx автоматично отказване от кореновата директория от / WWW да се / www2 ако / WWW счупен е?
Опитах да настроя "root /" и след това "try_files / www / ethaniel $ uri / www2 / ethaniel $ uri", но това не работи.
Ето моята конфигурация:
server {
listen 80;
server_name .ethaniel.com;
root /www/ethaniel;
location / {
index index.php;
autoindex off;
}
location ~* ^.+.(php)$ {
include /etc/nginx/fastcgi.conf.include;
}
}
Отговори:
0 за отговор № 1Не е възможно чрез nginx config, но винаги можете да го скриптирате.
#!/bin/sh
#check nfs mount status
df -P -T /storage-pool/nfs-1 | tail -n +2 | awk "{print $2}" | grep nfs | wc -l > /root/status/nfs-1
df -P -T /storage-pool/nfs-2 | tail -n +2 | awk "{print $2}" | grep nfs | wc -l > /root/status/nfs-2
#give time to fetch nfs content
sleep 5
CHECK_FILE_1=`cat /root/status/nfs-1`
CHECK_FILE_2=`cat /root/status/nfs-2`
CHECK_NGINX_1=`grep "nfs-1" /etc/nginx/sites-enabled/default.conf | wc -l`
CHECK_NGINX_2=`grep "nfs-2" /etc/nginx/sites-enabled/default.conf | wc -l`
if [ $CHECK_FILE_1 -ne 1 ] && [ $CHECK_NGINX_1 -eq 1 ] && [ $CHECK_FILE_2 -eq 1 ]
then
sed -i "s/nfs-1/nfs-2/g" /etc/nginx/sites-enabled/default.conf
nginx -t && echo "move to nfs-2"
nginx -s reload
elif [ $CHECK_FILE_2 -ne 1 ] && [ $CHECK_NGINX_2 -eq 1 ] && [ $CHECK_FILE_1 -eq 1 ]
then
sed -i "s/nfs-2/nfs-1/g" /etc/nginx/sites-enabled/default.conf
nginx -t && echo "move to nfs-1"
nginx -s reload
elif [ $CHECK_FILE_1 -ne 1 ] && [ $CHECK_FILE_2 -ne 1 ]
then
echo "All nfs-server down"
else
echo "OK"
fi
Уверете се, че промените пътищата, за да съответстват на вашата среда.