Задать вопрос
YardalGedal
@YardalGedal
yeah boy

Почему не работает unix socket (nginx + tornado)?

Использую ubuntu server 18.04, nginx и tornado
Для запуска торнадо использую следующий код:
class Main:
    PORT_MASK = '111{}'
    PATH_MASK = '/tmp/111_{}'

    SETTINGS = {}

    ROUTE = []

    def __init__(self, use_unix_socket=False):
        server = tornado.httpserver.HTTPServer(tornado.web.Application(self.ROUTE, **self.SETTINGS))

        if use_unix_socket:
            server.add_socket(tornado.netutil.bind_unix_socket(self.PATH_MASK.format(0)))
        else:
            server.add_sockets(tornado.netutil.bind_sockets(int(self.PORT_MASK.format(0))))

        tornado.process.fork_processes(0)

        tornado.ioloop.IOLoop.current().start()

Конфиг nginx, где я настраиваю сервер:
upstream 111 {
    server localhost:1110 fail_timeout=0;
    server unix:/tmp/111_0 fail_timeout=0;
}

(две строки только чтобы показать, что по юникс сокету не работает, так-то я понимаю что тут должна быть одна)
И, собственно, если я запускаю с аргументом use_unix_socket - у меня ничего не работает, запросы до торнадо не идут, nginx возвращает 502 ошибку, если через обычный сокет - всё окей. В чём проблема?
  • Вопрос задан
  • 227 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
YardalGedal
@YardalGedal Автор вопроса
yeah boy
Решилось добавлением аргумента mode у tornado.neturil.bind_unix_socket
server.add_socket(tornado.netutil.bind_unix_socket(self.PATH_MASK.format(0), mode=755))

Спасибо Pavel Denisov, не допёр бы что с правами что-то не то.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы