mediawiki - 如何使用 nginx 在 root 之外使用别名托管 Mediawiki 图像?
问题描述
我有一个 Mediawiki 农场,除图像显示外,一切正常。图像上传的工作原理是将它们与拇指一起放入正确的文件夹中,但图像不会显示。不过,我想继续在站点根目录之外托管图像。
Mediawiki 安装在:/var/www/mediawiki
图像文件夹位于:/var/cats.wiki/images
我的 nginx 配置是:
server {
listen 80;
server_name cats.wiki; #made up name for example
root /var/www/mediawiki;
client_max_body_size 100M;
location /images {
alias /var/cats.wiki/images; #relevant part
}
location / {
index index.php;
error_page 404 = @mediawiki;
}
location @mediawiki {
rewrite ^/w([^?]*)(?:\?(.*))? /index.php?title=$1&$2 last;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param MW_INSTALL_PATH /var/www/mediawiki;
fastcgi_param WIKI_PATH "catwiki.php";
}
location ~* \.(js|css|svg|png|jpg|jpeg|gif|ico)$ {
try_files $uri /index.php;
expires 365d;
log_not_found off;
gzip_static on;
gzip_comp_level 5;
access_log off;
add_header Cache-Control private;
}
}
和我的 LocalSettings 的相关部分,徽标也不会显示在浏览器上
$wgLogo = "/var/cats.wiki/images/logo.png";
$wgEnableUploads = true;
$wgUseImageMagick = true;
$wgImageMagickConvertCommand = "/usr/bin/convert";
$wgUploadDirectory = "/var/cats.wiki/images";
$wgUploadPath = "/images";
谢谢!:)
解决方案
从您的问题中不清楚server
您的 nginx 配置中的指令是适用于您的整个农场还是仅适用于一个 wiki。您绝对可以server
为所有 wiki 拥有一个;我在我自己的 wiki 农场设置中做。
在我的 wiki 农场设置中,图像文件夹的部分说(简化并适应您的示例):
location ~* ^/images(?<image_subpath>/.+)$ {
root $images_root;
try_files $image_subpath @mediawiki;
# ... (some code to neutralise potentially malicious uploads)
}
where$images_root
是先前在http
指令中设置的,带有map
指令(简化并适应您的示例):
map $host $images_root {
cats.wiki /var/cats.wiki/images;
dogs.wiki /var/dogs.wiki/images;
# ...
}
推荐阅读
- mysql - 无法部署 MySQL pod。--initialize 指定但数据目录中有文件
- xaml - Xamarin 表单 - 设置默认 TextColor
- python - Python:将函数应用于 netCDF/numpy 3d 数组中的每个条目
- sublimetext3 - 如何在 Sublime 搜索中包含文件夹?
- dart - 剪裁后材料标高不起作用
- python - 将新列从另一个表连接到 redshift/sql 表
- mysql - 用外键删除其他数据
- c++ - 打印信息时数据结构不起作用
- sql - 分组以便将行结果转换为分组列
- d3.js - 无法使用 parseFloat 方法将字符串转换为数字