Для этого можно использовать Nginx :сначала нужно настроить и восходящий поток:
upstream web {
server serviceserver1.com
server serviceserver2.com
server serviceserver3.com
}
Тогда вам нужны:proxy_next_upstream
и proxy_connect_timeout
.
Попробуйте это:
location / {
proxy_pass $scheme://web;
proxy_redirect off;
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
Существует несколько точек доступа для настройки обработчиков сигналов, я проиллюстрирую одну из них:
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
static void signal_handler(int signo)
{
# define signal_message "Signal received\n"
write(1, signal_message, strlen(signal_message));
# undef signal_message
}
int main(void)
{
struct sigaction new_handler = {
.sa_handler = signal_handler,
};
if (sigaction(SIGUSR1, &new_handler, NULL) < 0) {
perror("sigaction");
}
pause();
return 0;
}
Функция sigaction()
может устанавливать новые обработчики сигналов, ее сигнатура:
int sigaction(int signum,
const struct sigaction *act,
struct sigaction *oldact);
Первый параметр — это номер сигнала (, например, SIGUSR1
, второй параметр — это указатель на структуру struct sigaction
с подробностями обработки, третий — указатель на struct sigaction
, в которую он будет сохранить старые значения обработчика. Третий параметр может быть NULL
, если вас не волнует старое значение.
Одним из полей struct sigaction
является sa_handler
--, это указатель на функцию обработки сигнала. Сигнатура этой функции должна быть:
void function_name(int signo);
Функция возвращает void
и принимает номер полученного сигнала в качестве параметра.
Собрав все вместе, пример устанавливает обработчик сигнала для SIGUSR
, затем вызывает pause()
, который приостанавливает выполнение до тех пор, пока не будет получен какой-либо сигнал. Если я затем передам сигнал SIGUSR
процессу, выполняющему этот код, он выведет Signal received
на стандартный вывод.