Nginx is capable of forwarding a unix socket to UDP backend servers. This is quite handy for load balance syslog traffic.
Example nginx configuration
load_module /usr/share/nginx/modules/ngx_stream_module.so;
stream {
upstream syslog_servers {
server 192.0.2.10:514;
server 192.0.2.11:514;
server 192.0.2.12:514;
}
server {
listen unix:/run/nginx/log.sock udp;
proxy_pass syslog_server;
}
}
Testing the connection
echo "Hello Syslog!" | socat - /run/nginx/log.sock
Info
There are cases where nginx does not clean up the socket files after shutdown.
Systemd managed runtime dir
The RuntimeDirectory
configuration ensures the creation and deletion of the directory /run/nginx
on startup and shutdown of the process.
# /etc/systemd/system/nginx.service.d/runtime-dir.conf
[Service]
RuntimeDirectory=nginx