Размещение BlueMap на внешних веб-серверах при использовании SQL хранилища
Внутренний веб-сервер BlueMap очень легкий и довольно быстрый, но он может быть перегружен большим количеством одновременных пользователей.
Если вы хотите оптимизировать скорость вашего веб-приложения для большой аудитории, вы также можете использовать BlueMap напрямую с внешними веб-серверами, такими как NGINX или Apache. Чтобы это сработало, вам необходимо выполнить некоторую настройку.
Цель
BlueMap отображает и сохраняет карту на вашем SQL-сервере. Но веб-приложение запрашивает их так, как если бы они находились в обычном файловом хранилище внутри webroot. Итак, нам нужен какой-нибудь скрипт, который переводит эти запросы, извлекает и предоставляет нужные файлы с SQL-сервера.
Общие настройки
К счастью, BlueMap предоставляет такой скрипт. Точнее, PHP-скрипт. Это означает, что первое, что вам нужно сделать, это убедиться , что на вашем веб-сервере установлен PHP (>= 7.4).
Затем вы заходите в webroot и открываете sql.php
и устанавливаете там настройки SQL-соединения.
Важно:
Убедитесь, что ваши настройки php работают, иначе вы можете случайно опубликовать эти настройки SQL-соединения во всем мире!
Информация:
Поскольку все ваши карты хранятся в базе данных, не забудьте удалить (старую) папкуmaps
из вашего веб-каталога, если она все еще там. Чтобы файлы в ней не переопределяли данные, которые на самом деле должны поступать из базы данных.
Теперь вам нужно настроить свой веб-сервер таким образом, чтобы он переписывал все запросы, для которых не существует статического файла, в sql.php
.
NGINX
В nginx этого можно достичь, например, с помощью try_files $uri /sql.php;
.
В некотором контексте конфигурация вашего веб-сайта может выглядеть примерно так:
server {
listen 80;
server_name yourdomain.com;
# path to bluemap-webroot, BlueMap can also be used in a sub-folder .. just adapt the paths accordingly
root /var/www;
location / {
try_files $uri /sql.php;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
# OPTIONAL:
# Proxy requests to the live data interface of each map to bluemaps integrated webserver
# If you have multiple servers you will need to proxy each map-id to the correct server
location ~* /(maps/[^/\s]*/live/.*) {
proxy_pass http://127.0.0.1:8100/$1;
}
}
Важно: Приведенная выше конфигурация является всего лишь примером, а не полной конфигурацией, которую можно просто скопировать и вставить. Вам потребуется адаптировать ее к вашим настройкам!
Apache
Вот пример того, как это могло бы выглядеть в Apache:
DocumentRoot /var/www/
<Directory /var/www/>
allow from all
Options FollowSymLinks
Require all granted
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-s
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite request to the sql.php
RewriteRule ^.*$ /sql.php [L]
</Directory>
# OPTIONAL:
# Proxy requests to the live data interface to bluemaps integrated webserver
ProxyPreserveHost On
ProxyPassMatch ^/(maps/[^/]*/live/.*) http://127.0.0.1:8100/$1
Важно: Приведенная выше конфигурация является всего лишь примером, а не полной конфигурацией, которую можно просто скопировать и вставить. Вам потребуется адаптировать ее к вашим настройкам!
Caddy с php-fpm
Вот пример того, как это могло бы выглядеть на Caddy с php-fpm:
yourdomain.com {
# The root for the webserver.
root /var/www
file_server
# https://caddyserver.com/docs/caddyfile/patterns#php-fpm
# You may need to modify this path.
php_fastcgi unix//run/php/php7.4-fpm.sock
# Use the sql.php script, which handles requests with data from the sql-server.
handle {
try_files {path} /sql.php
}
# OPTIONAL:
# Proxy requests for live data to the bluemaps integrated webserver.
# If you have multiple servers you will need to proxy each map-id to the correct server.
handle /maps/*/live/* {
reverse_proxy 127.0.0.1:8100
}
}
Важно: Приведенная выше конфигурация является всего лишь примером, а не полной конфигурацией, которую можно просто скопировать и вставить. Вам потребуется адаптировать ее к вашим настройкам!
FrankenPHP
Вот пример того, как это могло бы выглядеть на FrankenPHP:
{
# https://frankenphp.dev/docs/config/#caddyfile-config
# Enable FrankenPHP.
frankenphp
}
yourdomain.com {
# The root for the webserver.
root /var/www
# https://frankenphp.dev/docs/config/
# Execute PHP files in the root directory and serve assets.
php_server
# Use the sql.php script, which handles requests with data from the sql-server.
handle {
try_files {path} /sql.php
}
# OPTIONAL:
# Proxy requests for live data to the bluemaps integrated webserver.
# If you have multiple servers you will need to proxy each map-id to the correct server.
handle /maps/*/live/* {
reverse_proxy 127.0.0.1:8100
}
}
Важно: Приведенная выше конфигурация является всего лишь примером, а не полной конфигурацией, которую можно просто скопировать и вставить. Вам потребуется адаптировать ее к вашим настройкам!