День добрый!
Обнаружилась проблема с чтением и отображением русских букв при доступе к файлам через WebDAV. Проблема заключается в том, что клиенты WebDAV, которые подключаются к серверу "обрывают" отображение папок и файлов, как только встречают названия на русском.
Во всех клиентах была включена кодировка UTF-8 принудительно. Эти же самые клиенты при подключении к серверу на основе apache.mod_dav всё отображают правильно.
Что можно сделать с этой проблемой? Что настроить?
Список клиентов и как они отрабатывали запросы к ngnix:
1. Обычные (любые) вебраузеры - отлично. Всё показывали и скачивали.
2. NetDrive - не показывает русские буквы, но отлично показывает английские.
3. WebDrive - хорошо показывает все буквы.
4. TotalCmd - хорошо показывает все буквы, но не работает с каталогами с пробелами.
5. freebsd. dvfs - не показывает русские буквы (на apache показывает).
Собственно конфигурация nginx ниже (привожу почти без вырезаний на всякий случай. Сам WebDAV в самом низу):
#-------------------------------------------------------------------------------
# Конфигурация front-end web-сервера (далее "Сервер"), обслуживающего запросы
# виртуальных серверов:
#-------------------------------------------------------------------------------
# Имя пользователя и группы, с которыми запускается сервер.
user www www;
# Количество процессов, обслуживающих запросы к серверу.
# auto - количество запросов определяется с привязкой к количеству процессоров.
worker_processes auto;
# Определяет контекст для директив, связанных с обработкой запросов.
events {
worker_connections 1024;
}
# Определяет контекст для директив http-сервера.
http {
# Общий формат сообщений в журнал.
log_format default '[$time_local] $remote_addr $remote_user "$request" $status $bytes_sent';
# Системный формат сообщений в журнал.
log_format system '[$time_local] $remote_addr $remote_user "$http_user_agent" "$http_referer"';
# Журнал всех, обрабатываемых сервером, сообщений.
access_log /var/log/nginx/common-access.log default buffer=32k flush=1m;
# Вспомогательный журнал системных сообщений.
access_log /var/log/nginx/common-system.log system buffer=32k flush=1m;
# Журнал всех ошибок сервера.
error_log /var/log/nginx/common-error.log;
# Подключение описаний известных серверу mime-типов.
include /usr/local/etc/nginx/mime.types;
# mime-тип по умолчанию для потоков, не объявивших свой тип самостоятельно.
default_type application/octet-stream;
# Кодировка сервера по умолчанию.
charset utf-8;
# Размер тела сообдения от клиента.
client_max_body_size 10M;
client_body_temp_path /db/tmp/nginx;
# back-end сервера.
upstream svn.db { server 127.0.0.1:49408; }
upstream trac.db { server 127.0.0.1:4096; }
upstream trac.home { server 127.0.0.1:4097; }
upstream svn.storage { server 127.0.0.1:49409; }
upstream trac.storage.general { server 127.0.0.1:49407; }
upstream trac.storage.espd { server 127.0.0.1:49406; }
upstream trac.storage.eskd { server 127.0.0.1:49405; }
upstream trac.storage.sgpms { server 127.0.0.1:49404; }
upstream trac.storage.adaptation { server 127.0.0.1:49403; }
upstream trac.storage.station { server 127.0.0.1:49402; }
# Конфигурация виртуального сервера https://db.npcprom.ru.
server {
# Корневой каталог файлов сервера.
root /db/www/nginx;
# Имя виртуального сервера.
server_name db db.example.com;
# Параметры ssl-шифрования.
include /db/conf/nginx-ssl.conf;
# Параметры авторизации.
include /db/conf/nginx-auth.conf;
# Время ожидания ответа от tracd.
proxy_read_timeout 240;
# Обработка пути /trac или /home
location / {
# Обработка статических файлов Trac.
include /db/conf/nginx-trac-htdocs.conf;
# Обработка пути /trac
location /trac {
# Журнал доступа к Trac.
access_log /var/log/nginx/db-trac.log default buffer=32k flush=5;
# Адрес back-end сервера Trac.
proxy_pass http://trac.db;
proxy_pass_header Authorization;
}
# Обработка пути /svn
location /svn {
# Журнал доступа к Subversion.
access_log /var/log/nginx/db-svn.log default buffer=32k flush=5;
# Адрес back-end сервера Subversion.
proxy_pass http://svn.db;
# Параметры back-end сервера Subversion.
include /db/conf/nginx-subversion.conf;
}
# ---- Вот, собственно location с WebDAV
# Обработка пути /files
location /files {
# Журнал доступа к файлам.
access_log /var/log/nginx/db-files.log default buffer=32k flush=5;
# Корневая директория для файлов.
root /db/www/db/;
autoindex on;
client_max_body_size 16G;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access group:rw all:rw;
limit_except GET {
allow all;
# deny all;
}
}
}
}
}
Обнаружилась проблема с чтением и отображением русских букв при доступе к файлам через WebDAV. Проблема заключается в том, что клиенты WebDAV, которые подключаются к серверу "обрывают" отображение папок и файлов, как только встречают названия на русском.
Во всех клиентах была включена кодировка UTF-8 принудительно. Эти же самые клиенты при подключении к серверу на основе apache.mod_dav всё отображают правильно.
Что можно сделать с этой проблемой? Что настроить?
Список клиентов и как они отрабатывали запросы к ngnix:
1. Обычные (любые) вебраузеры - отлично. Всё показывали и скачивали.
2. NetDrive - не показывает русские буквы, но отлично показывает английские.
3. WebDrive - хорошо показывает все буквы.
4. TotalCmd - хорошо показывает все буквы, но не работает с каталогами с пробелами.
5. freebsd. dvfs - не показывает русские буквы (на apache показывает).
Собственно конфигурация nginx ниже (привожу почти без вырезаний на всякий случай. Сам WebDAV в самом низу):
#-------------------------------------------------------------------------------
# Конфигурация front-end web-сервера (далее "Сервер"), обслуживающего запросы
# виртуальных серверов:
#-------------------------------------------------------------------------------
# Имя пользователя и группы, с которыми запускается сервер.
user www www;
# Количество процессов, обслуживающих запросы к серверу.
# auto - количество запросов определяется с привязкой к количеству процессоров.
worker_processes auto;
# Определяет контекст для директив, связанных с обработкой запросов.
events {
worker_connections 1024;
}
# Определяет контекст для директив http-сервера.
http {
# Общий формат сообщений в журнал.
log_format default '[$time_local] $remote_addr $remote_user "$request" $status $bytes_sent';
# Системный формат сообщений в журнал.
log_format system '[$time_local] $remote_addr $remote_user "$http_user_agent" "$http_referer"';
# Журнал всех, обрабатываемых сервером, сообщений.
access_log /var/log/nginx/common-access.log default buffer=32k flush=1m;
# Вспомогательный журнал системных сообщений.
access_log /var/log/nginx/common-system.log system buffer=32k flush=1m;
# Журнал всех ошибок сервера.
error_log /var/log/nginx/common-error.log;
# Подключение описаний известных серверу mime-типов.
include /usr/local/etc/nginx/mime.types;
# mime-тип по умолчанию для потоков, не объявивших свой тип самостоятельно.
default_type application/octet-stream;
# Кодировка сервера по умолчанию.
charset utf-8;
# Размер тела сообдения от клиента.
client_max_body_size 10M;
client_body_temp_path /db/tmp/nginx;
# back-end сервера.
upstream svn.db { server 127.0.0.1:49408; }
upstream trac.db { server 127.0.0.1:4096; }
upstream trac.home { server 127.0.0.1:4097; }
upstream svn.storage { server 127.0.0.1:49409; }
upstream trac.storage.general { server 127.0.0.1:49407; }
upstream trac.storage.espd { server 127.0.0.1:49406; }
upstream trac.storage.eskd { server 127.0.0.1:49405; }
upstream trac.storage.sgpms { server 127.0.0.1:49404; }
upstream trac.storage.adaptation { server 127.0.0.1:49403; }
upstream trac.storage.station { server 127.0.0.1:49402; }
# Конфигурация виртуального сервера https://db.npcprom.ru.
server {
# Корневой каталог файлов сервера.
root /db/www/nginx;
# Имя виртуального сервера.
server_name db db.example.com;
# Параметры ssl-шифрования.
include /db/conf/nginx-ssl.conf;
# Параметры авторизации.
include /db/conf/nginx-auth.conf;
# Время ожидания ответа от tracd.
proxy_read_timeout 240;
# Обработка пути /trac или /home
location / {
# Обработка статических файлов Trac.
include /db/conf/nginx-trac-htdocs.conf;
# Обработка пути /trac
location /trac {
# Журнал доступа к Trac.
access_log /var/log/nginx/db-trac.log default buffer=32k flush=5;
# Адрес back-end сервера Trac.
proxy_pass http://trac.db;
proxy_pass_header Authorization;
}
# Обработка пути /svn
location /svn {
# Журнал доступа к Subversion.
access_log /var/log/nginx/db-svn.log default buffer=32k flush=5;
# Адрес back-end сервера Subversion.
proxy_pass http://svn.db;
# Параметры back-end сервера Subversion.
include /db/conf/nginx-subversion.conf;
}
# ---- Вот, собственно location с WebDAV
# Обработка пути /files
location /files {
# Журнал доступа к файлам.
access_log /var/log/nginx/db-files.log default buffer=32k flush=5;
# Корневая директория для файлов.
root /db/www/db/;
autoindex on;
client_max_body_size 16G;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access group:rw all:rw;
limit_except GET {
allow all;
# deny all;
}
}
}
}
}