前言

flarum是一个新出的论坛系统,界面清新友好,可惜关于php的一切我是真滴不会...sob

看了一下,似乎是先用composer装php包,再配置nginx把访问重新定位到对应的网站系统文件,最后在客户端进入可视化引导emm

...然后就卡住了。


坑录

composer炸内存

        image.png

解决:顺着错误提示官方提供了解除内存限制的命令。不想多琢磨,直接拿过来用了。

free -m
sudo dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo mkswap /var/swap.1
sudo swapon /var/swap.1


nginx配置

修改配置文件ningix.conf来完成设置,基本常识还是需要理解一下,参考这篇文章

划重点,events、http块是必须的,实现监听和转发的server块定义在http块以下,location块具体描述转发规则,又定义在server块以下。

server块下值得注意的属性有监听端口、根目录、服务器名(域名),日志路径,默认重定位,和location块(除此之外可有可无的我全部注释掉了,未来再加)

到这一步其实基本的转发功能已经ok了,-sudo nginx -s stop ; sudo nginx 重启一下先,上一步如果犯了语法错误这里会提示。

网上有别人写的flarum安装教程里,location的作业长这样。

image.png

这个配置实际跑下来是有问题的,具体表现在:加上.php规则,用户端访问php文件会500,去掉.php规则,用户端访问php文件就只是源码不执行。

php-fpm配置

查了一下,是php-fpm没有配好。php-fpm和nginx的协作原理可以参考这篇文章

排查得出的原因是php-fpm的监听没有打开,我选择了端口方式监听,在php-fpm配置文件中写入了listen = 127.0.0.1:9000,并且将网上nginx配置作业中fastcgi_pass这条属性也设置为127.0.0.1:9000

但是,文中提到的/usr/local/nginx/conf/vhost/vhost.conf 我硬是没找到,直接写nginx.conf的location块里最终效果是一样的。另外,我这边服务器php-fpm的配置文件位置也不一样,具体是/etc/php/7.2/fpm/php-fpm.conf

另外这里还有一个坑。php-fpm的配置和基本结构可以参考这篇博文。但我的php-fpm.conf下边是没有[www]标签的,只有一个[global]。如果把listen = 127.0.0.1:9000​加到[global]标签前或者其下,listen并不会生效。但如果加到文件尾部却可以。如果自己写一个[www]会直接报错,我在文件里发现了包含语句,很可能这个标签在包含的另一个文件当中,我把listen写在文件尾只是瞎猫撞上死耗子。

修改完配置文件之后需要重启一下fpm(/etc/init.d/php7.2-fpm reload)和nginx,然后命令netstat -lnt可以查看端口监听情况。


image.png

完成了这一部就可以成功进入flarum的安装引导了。最后完整作业如下

注:这是最简单直接的​/etc/nginx/nginx.conf​写法,网上的部分作业中的写法是​/etc/nginx/nginx.conf​只有顶层块,server放在​/etc/nginx/sites-available/default中,而除了.php外的location块则在/var/www/flarum/.nginx.conf中,三个文件层层包含。这两种写法是等价的。

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}


http{
server {
        listen       80;                                                                                        
        client_max_body_size 1024M;
        root /var/www/flarum/public;
        server_name 81.68.181.29;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        index index.php;

        location  ~* \.php$ {
                fastcgi_pass 127.0.0.1:9000;#端口转发
                #fastcgi_pass unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                include /etc/nginx/fastcgi.conf;
        }
             
        location / { try_files $uri $uri/ /index.php?$query_string; }
        location /api { try_files $uri $uri/ /api.php?$query_string; }
        location /admin { try_files $uri $uri/ /admin.php?$query_string; }
    
        location /flarum {
                deny all;
                return 404;
        }
    

        location ~* \.html$ {
                expires -1;
        }

}
}


总结

经过这次踩坑,总共了解了php&composer相关基础操作,服务器端nginx反向代理的具体流程,这应该是一个很经典的php网站系统的后台结构,我离后端工程师又近了一步(不是)


展望

ssl配置是跑不脱的,相关作业可以参考这篇文章