nginx-0.8.28
Timur Bakeyev
nginx-forum at nginx.us
Tue Nov 24 16:25:19 MSK 2009
Все еще не получается использовать unix domain sockets так, как хотелось бы.
Идея была в том, что есть коллекция файлов на медленном NFS сервере и хотелось бы отдавать их в инет. Для этого я замкнул на себя два виртуальных сервера, один из которых читает данные с NFS и выступает backend'ом для другого сервера, который, в свою очередь, выступает прокси для первого, с хранилищем на локальном диске, и далее отдает файлы в Интернет.
Проблема вылезает из-за использования директивы: user nginx; в конфиге.
При старте сокет создается еще root, с правами 755
srwxr-xr-x 1 root root 0 Nov 24 13:50 storage.socket
Все бы хорошо, но второй виртуальный сервер, который пытается читать из этого сокета, делает это с правами пользователя nginx, в результате чего обламывается с:
2009/11/24 13:50:51 12125#0: *1 connect() to unix:/var/run/storage.socket failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: storage.localdomain, request: "GET /", upstream: "http://unix:/var/run/storage.socket:/"
По той же причине не срабатывает restart сервиса, т.к. пользователь с правами nginx не может удалить сокет при выходе и спотыкается на нем при старте.
2009/11/24 14:13:11 13198#0: bind() to unix:/var/run/storage.socket failed (98: Address already in use)
В первом приближении конфиг такой:
user nginx;
worker_processes 10;
worker_rlimit_nofile 100000;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen unix:/var/run/storage.socket default;
server_name _;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 8080;
server_name storage.localdomain;
location / {
proxy_pass http://unix:/var/run/storage.socket:/;
}
}
}
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,25026,25290#msg-25290
More information about the nginx-ru
mailing list