如何通过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的静态资源和链接路径正确。
- Engelsystem:找到它的配置文件,把
- 测试并重启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
相关产品推荐
相关产品推荐

