windows中运行maccms非常顺利,轻松搭建了。并一切正常。而我在linux中搭建缺遇到了一个非常奇怪的问题。进入管理后台,明明"admin.php"(比如重命名成a.php)的页面是存在的,访问时缺提示页面不存在!稍后就自动跳到首页了。
环境
操作系统:Ubuntu 20.04.1 LTS
nginx version: nginx/1.18.0 (Ubuntu)
PHP 7.4.3-4ubuntu2.28 (cli) (built: Dec 13 2024 13:46:46) ( NTS )
nginx的配置如下:
server {
listen 80;
server_name video.demo.cool;
root /etc/nginx/WWW/video.demo.cool;
location / {
index index.php index.html error/index.html;
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
rewrite ^/api.php(.*)$ /api.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
autoindex off;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
我的搭建详情见:
《Ubuntu 20.04.1 LTS搭建nginx + php7.4运行环境》
https://blog.csdn.net/lxyoucan/article/details/144850572
原因分析
- 我怀疑伪静态规则的设置可能没有生效或者出现错误了,官方的示例如下:
location / {
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
rewrite ^/api.php(.*)$ /api.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
- 可能是admin.php相关的代码运行报错了,当作404页面处理了。
探索实验
伪静态规则测试
我的测试方法很简单,因为windows中是可以正常运行的,我故意把windows中的nginx中的伪静态规则
删除测试现象
我在windows中的nginx的配置修改前如下:
server {
listen 22427;
server_name maccms.demo.com;
root "D:/app/maccms10-2024.1000.4045";
location / {
index index.php index.html error/index.html;
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
rewrite ^/api.php(.*)$ /api.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
autoindex off;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
我去掉
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
rewrite ^/api.php(.*)$ /api.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
经测试并不会出现同样的现象,所以暂时可以排除。
程序报错导致
看来是程序报错导致的,但是程序报错日志我不清楚在哪里查看。
nginx不行就试试Apache吧
搭建LAMP环境,所谓的LAMP指的Linux+Apache+Mysql+PHP. 其中,你的操作系统ubuntu就是Linux。Apache是http服务器,浏览器通过服务器(也就是你的VPS)上的apache提供的服务才能获取到网页资源,从而显示在你的电脑屏幕上。Mysql是数据库,你的网站(这里即是苹果CMS)动态运行时所存取的数据都是由数据库来管理的。PHP与Apache相互配合为用户提供动态的网页,我们要安装的苹果CMS就是php语言编写的,他的运行必须依赖于PHP环境。
因为nginx我是必须要用的,我仅是用apache运行php项目,所以我要把apache中的80端口修改成其他的。
- 主配置文件:/etc/apache2/apache2.conf
- 站点配置文件:/etc/apache2/sites-available/ 和 /etc/apache2/sites-enabled/
- 模块配置文件:/etc/apache2/mods-available/ 和 /etc/apache2/mods-enabled/
- 环境配置文件:/etc/apache2/envvars
- 端口配置文件:/etc/apache2/ports.conf
- 全局配置文件:/etc/apache2/conf-available/ 和 /etc/apache2/conf-enabled/
我把80端口修改成22429
vim /etc/apache2/ports.conf
Listen 22429
然后我把maccms的程序上传到/var/www/html
目录,设置一下目录权限
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
这次发现后台可以进了,但是又遇到了一个新的问题,登录的验证码无法显示了。
这条路成功一半,并没有完美解决。
nginx无法进入后台的最终解决办法
经过对比windows和linux的nginxs配置的差异,最终我把Linux的配置修改成
server {
listen 80;
server_name vipvideo.demo.cool;
root /etc/nginx/WWW/vipvideo.demo.cool;
location / {
index index.php index.html error/index.html;
if (!-e $request_filename) {
rewrite ^/index.php(.*)$ /index.php?s=$1 last;
rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
rewrite ^/api.php(.*)$ /api.php?s=$1 last;
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
autoindex off;
}
location ~ \.php(.*)$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
问题得到解决了。但是验证码还是无法显示。。。
解决验证码不显示的问题
我在网上找了一圈,好多都说把验证码关掉,或者因为v10使用的是thinkphp开发,修改php.ini文件中 session.save_path = “/tmp”。
以上方法我都尝试了,并没有解决我的问题。
最终解决的方法是安装gd
apt-get install php7.4-gd
参考:https://www.javazxz.com/thread-1005-1-1.html
终于搞定了,太折腾了。
参考
https://blog.csdn.net/wanyizhilu/article/details/104684728