Welcome! Log In Create A New Profile

Advanced

Re: Дректива if и проверка существоания файла

Maxim Dounin
December 14, 2021 09:02PM
Hello!

On Tue, Dec 14, 2021 at 03:52:22AM -0500, akarabanov wrote:

> Мне необходимо проверить существует ли сокет. Я использую такую
> конструкцию:
>
> location / {
>
> if ( -f /www/php_sockets/${app}.sock ) {
> set $sock "/www/php_sockets/${app}.sock";
> }
>
> return 220 "${sock}";
> }
>
> И получаю ошибку 'open() "/www/php_sockets/test.sock" failed (6: No such
> device or address)'
>
> Если заменить сокет на простой файл с теми же правами, то всё отрабатывает
> корректно.
>
> Скажите пожалуйста с помощью директивы if нельзя проверить существование
> сокета или я что-то делаю не так?

Нельзя. Условие "-f" позволяет проверять существование (обычных)
файлов. Также можно проверять существование каталогов ("-d") или
файлов, каталогов и символических ссылок ("-e"). Возможности
проверять существование сокетов и прочих специальных файлов не
предусмотрено. Если нужно проверять именно сокеты - можно
использовать встроенный perl или njs.

А ошибка - ENXIO - видимо следствие того, что в конфигурации
включён open_file_cache, и при проверках nginx пытается сразу
открывать файл. В случае специальных файлов это приводит к
ошибкам, т.к. nginx открывает файлы с флагом O_NONBLOCK, дабы
избежать вечных блокировок при случайных попытках открытия
специальных файлов.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Дректива if и проверка существоания файла

akarabanov December 14, 2021 03:52AM

Re: Дректива if и проверка существоания файла

Maxim Dounin December 14, 2021 09:02PM

Re: Дректива if и проверка существоания файла

akarabanov December 15, 2021 01:52AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 294
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready