在 WordPress 安装中配置子目录以将代理传递到 docker 应用程序

在 WordPress 安装中配置子目录以将代理传递到 docker 应用程序

我有一个使用 Nginx 作为 Web 服务器的 wordpress 安装,现在需要将 moodle 作为 LMS 添加到同一个站点,例如作为子目录;www.mysite.comwordpress 站点在那里工作,然后 moodle 就会在那里www.mysite.com/learn

这个 moodle 在同一台机器上运行在 docker 容器中,它使用bitnami moodle 图片; 端口8081映射到80docker容器的端口即

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

相关内容