Для начала, конфигурация nginx:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /example/fullchain.pem;
ssl_certificate_key /example/privkey.pem;
client_max_body_size 5M;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
location @example {
add_header X-Orig-Url $uri;
proxy_pass http://example; # the nodes
}
location ~ "^/assets/uploads/(.*)" {
add_header X-Static-Asset $1 always;
root /usr/share/nginx/html/;
try_files /uploads/$1 @example;
}
location / {
# Offline handling
proxy_pass http://example;
proxy_redirect off;
# Socket.io Support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
И вот структура каталогов
/usr/share/nginx/html
uploads
system
site-logo.png
~ 100 files
_foo_bar
site-logo.png
~ 86k files
Настройка - это сервер nginx, выполняющий обратное проксирование сервера с поддержкой Node.js. Поскольку Express довольно медленно обслуживает статические ресурсы, местоположение ~ "^ / assets / uploads /(.*)" {
предназначено для перехвата запросов на загрузку ресурсов и их обслуживания непосредственно из nginx.
Пользовательские заголовки используются только для целей отладки. Express добавляет заголовок X-Powered-By: express
к запросам, которые он обрабатывает.
Вот где происходят странные вещи. Я скопировал файл site-logo.png
из / usr / share / nginx / html / uploads / system
в / usr / share / nginx / html / uploads / _foo_bar
. Запрос к example.com/assets/uploads/system/site-logo.png
показывает заголовок X-Static-Asset
, а не X-Powered-By: экспресс
заголовок. Пример запроса на . com / assets / uploads / _foo_bar / site-logo.png
вместо этого показывает заголовок X-Orig-Url
и заголовок X-Powered-By: express
, но не заголовок X-Static-Asset
.
Это говорит мне, что все запросы принимаются блоком местоположения, но nginx не может найти файлы в _foo_bar
по какой-то причине.
Каталог в / usr / share / nginx / html / uploads
является общим ресурсом NFS, я не уверен, насколько это актуально. Моя гипотеза заключается в том, что nginx не может найти файл в таком большом каталоге, но я не уверен, почему это так и как это исправить. Я уверен, что разделение файлов на более мелкие каталоги сработает, но я действительно не Я не хочу этого делать, потому что эти местоположения файлов уже хранятся в базе данных во многих разных местах.