我有一个使用 Nginx 作为 Web 服务器的 wordpress 安装,现在需要将 moodle 作为 LMS 添加到同一个站点,例如作为子目录;www.mysite.com
wordpress 站点在那里工作,然后 moodle 就会在那里www.mysite.com/learn
。
这个 moodle 在同一台机器上运行在 docker 容器中,它使用bitnami moodle 图片; 端口8081
映射到80
docker容器的端口即
docker run -d -p 8081:80 -p 4443:443 --name moodle
我在 nginx 配置中的 wordpress 配置之前添加了一个位置块
location /learn {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_pass http://0.0.0.0:8081;
}
wordpress 的 php 配置如下
# Pass the PHP scripts to FastCGI server (locally with unix: param to avoid network overhead)
location ~ \.php$ {
# Prevent Zero-day exploit
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param APP_ENV production;
include fastcgi_params;
}
然而,当我访问时,仍然会出现 404 响应www.amysite.com/learn
我检查了 Docker 代理是否正在运行并绑定到所有 IP 地址
/usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8081 -container-ip 172.19.0.3 -container-port 80
还wget
给出localhost:8081
了 Moodle 安装主页,所以我相信这肯定是我的位置块存在问题;或者是零日漏洞配置try_files $uri =404;
导致了这个问题,即使是这样,我仍然无法删除那行。
更新
此配置有效
location ~ ^/apply/(.*)$ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_pass http://0.0.0.0:8081/$1;
}
我可以访问 Moodle 主页,但所有进一步的 URL 都中断了,因为 Moodle 不知道使用/learn
上下文根生成链接;我想我必须重新配置 Moodle 才能生成/learn
上下文 URL