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

如何通过Nginx实现不同子目录访问多个PHP Web应用(MediaWiki与Engelsystem)

如何通过Nginx实现不同子目录访问多个PHP Web应用(MediaWiki与Engelsystem)

嗨,我来帮你搞定这个Nginx配置的问题!你现在想把分别跑在不同端口的MediaWiki和Engelsystem,改成通过https://www.example.com/wiki和https://www.example.com/engelsystem来访问对吧?下面我给你一步步拆解配置方法,保证能跑通:

首先,你得把原来各自独立的Nginx配置整合到一个HTTPS服务器块里,用不同的location块对应不同的子目录。先把你现有的Engelsystem配置替换成下面的内容,记得根据自己服务器的实际情况修改路径哦:

# 先处理HTTP自动跳转到HTTPS,避免用户访问明文地址
server {
    listen 80;
    listen [::]:80;
    server_name www.example.com; # 这里要明确写你的域名,别用通配符_,避免冲突

    return 301 https://$host$request_uri;
}

# 主HTTPS服务器块,同时处理两个应用的子目录访问
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name www.example.com;

    # 替换成你自己的有效SSL证书路径!别用默认的snakeoil测试证书,正式环境要用可信证书(比如Let's Encrypt的)
    ssl_certificate /path/to/your/valid/certificate.crt;
    ssl_certificate_key /path/to/your/private/key.key;

    # 配置Engelsystem的/engelsystem子目录
    location /engelsystem {
        alias /var/www/html/engelsystem/public; # 指向Engelsystem的public目录,这个是你原来的root路径
        index index.php;

        # 处理静态文件和路由:先找实际存在的文件,找不到就转发到Engelsystem的入口文件index.php
        try_files $uri $uri/ /engelsystem/index.php?$query_string;

        # 处理PHP文件的执行逻辑
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            # 因为用了alias,必须指定SCRIPT_FILENAME为$request_filename,不然PHP会找不到文件位置
            fastcgi_param SCRIPT_FILENAME $request_filename;
            # 替换成你服务器上实际的PHP-FPM套接字路径,比如PHP8.2的话是/run/php/php8.2-fpm.sock,可以用ls /run/php/查看
            fastcgi_pass unix:/run/php/phpX.X-fpm.sock;
        }
    }

    # 配置MediaWiki的/wiki子目录
    location /wiki {
        alias /var/www/mediawiki; # 替换成你MediaWiki实际安装的根目录,比如/var/www/html/mediawiki
        index index.php;

        # MediaWiki的路由规则:找不到的文件都转发到它的入口index.php
        try_files $uri $uri/ /wiki/index.php?$query_string;

        # 同样处理PHP文件
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass unix:/run/php/phpX.X-fpm.sock; # 和上面的PHP-FPM路径保持一致
        }
    }

    # 可选:根目录访问的处理,比如默认跳转到Wiki页面,或者你可以自定义一个首页
    location / {
        return 301 https://$host/wiki;
    }
}

配置完之后,还有几个关键的细节要注意:

  • 检查PHP-FPM路径:用ls /run/php/命令查看你服务器上实际存在的PHP-FPM套接字文件,把配置里的phpX.X-fpm.sock替换成正确的版本,比如php7.4-fpm.sock或者php8.1-fpm.sock。
  • 替换SSL证书:一定要换成你自己的有效SSL证书,测试证书在正式环境会被浏览器标记为不安全。
  • 修改应用内部配置:
    • Engelsystem:找到它的配置文件,把APP_URL设置为https://www.example.com/engelsystem,避免内部跳转或者资源加载出错。
    • MediaWiki:打开LocalSettings.php,修改$wgServer = "https://www.example.com/wiki",同时设置$wgScriptPath = "/wiki",确保MediaWiki的静态资源和链接路径正确。
  • 测试并重启Nginx:配置完先执行sudo nginx -t检查语法是否正确,如果提示test is successful,再执行sudo systemctl restart nginx重启服务生效。

这样配置完成后,你就可以通过https://www.example.com/wiki访问MediaWiki,https://www.example.com/engelsystem访问Engelsystem啦!

备注:内容来源于stack exchange,提问作者KilakOriginal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:43:13