You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx反向代理同Docker网络容器时Dokuwiki访问异常问题求助

问题排查方法
  1. 打开浏览器开发者工具的「网络」标签,刷新异常的App2页面,查看404请求的完整URL:
    • 如果404的URL路径没有/app2/前缀(比如请求的是http://myserver.home.local/lib/exe/css.php而非http://myserver.home.local/app2/lib/exe/css.php),就属于响应内容中的链接没有被正确添加前缀的问题
  2. 查看Nginx的access日志,确认请求是否被正确转发到App2容器:
    执行docker exec -it [你的Nginx容器名] tail -f /var/log/nginx/access.log,看/app2/开头的请求有没有被转发到172.17.0.3:8080,还是被匹配到其他location块了。
问题根因

你当前的配置只处理了入站请求的路径转发,没有解决两个核心问题:

  • Dokuwiki默认不知道自己运行在/app2/子路径下,生成的所有静态资源、页面跳转链接默认都是相对于域名根路径的
  • 你只配置了请求转发,没有重写Dokuwiki返回的响应内容里的根路径链接,导致浏览器直接从域名根路径请求资源,触发404
  • 另外你当前配置中默认location块的index: index.html index.htm;有语法错误,冒号多余,应该改成index index.html index.htm;,否则Nginx启动可能会有告警。
解决方案

方案1:修改Dokuwiki配置(推荐,性能消耗最低)

直接在Dokuwiki容器内的conf/local.php配置文件中添加以下参数,指定服务的基础路径:

$conf['basedir'] = '/app2/';
$conf['baseurl'] = 'http://myserver.home.local/app2';

修改完成后重启Dokuwiki容器即可,后续Dokuwiki生成的所有链接都会自动带上/app2前缀,不需要调整Nginx的复杂规则。

方案2:调整Nginx反向代理配置

如果无法修改Dokuwiki配置,可以调整Nginx的/app2/location块规则,同时处理请求转发和响应内容重写:

location /app2/ {
    proxy_pass http://app2:8080/;
    # 传递真实请求信息给后端服务
    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-Proto $scheme;
    # 重写响应头中的重定向地址,对应Apache的ProxyPassReverse能力
    proxy_redirect http://app2:8080/ /app2/;
    # 重写响应内容里的根路径链接,统一加上/app2前缀
    sub_filter 'href="/' 'href="/app2/';
    sub_filter 'src="/' 'src="/app2/';
    sub_filter 'action="/' 'action="/app2/';
    sub_filter_once off;
    sub_filter_types text/html text/css text/javascript application/javascript;
}

修改配置后执行docker exec -it [你的Nginx容器名] nginx -s reload重载配置即可生效。

内容的提问来源于stack exchange,提问作者cat Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:36:10