前言

前些日子古劳斯提到了建站的想法,在越来越恶劣的创作环境下同人女需要自己的房子呜呜。目前国内论坛还是discuz为主,和古劳斯对比了一下国外的论坛系统,最终选定了flarum。详细的对比和保姆级教程请移步古劳斯的博文。这篇主要用作记录一些遇到坑的地方。

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

...然后就卡住了。


坑录

1.composer炸内存

按照教程用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


2. 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文件就只是源码不执行。

3. 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的安装引导了。最后完整作业如下:

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;
        }

}
}

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

到这里网站已经可以访问了,只是还不能用https协议,如果对加密传输有需求的话还需要进入下一步。


4.ssl配置

本节是ssl配置,以及把普通访问重写到https的作业。

参考这篇文章,申请一个ssl证书并且上传到/etc/nginx/conf.d或者别的地方。

重写http块下的server块:

server {                                                          
#把http访问重新指向https
       listen 80 ;
       root /var/www/flarum/public;                              
        server_name fingerprint-fan.work;                       
        access_log /var/log/nginx/access.log;               
        error_log /var/log/nginx/error.log;                        
        rewrite ^/(.*)$ https://fingerprint-fan.work:443/$1 permanent;
 }

server {                                                                        
    #SSL 访 问 端 口 号 为  443                                      
     listen 443 ssl;                                                            
     root /var/www/flarum/public;                                        
     index index.html index.php index.nginx-debian.html;                        
     #填 写 绑 定 证 书 的 域 名
     server_name fingerprint-fan.work;                               
     ssl on;                                                                    
                                                                                
     #证 书 文 件                                                            
     ssl_certificate /etc/nginx/conf.d/1_fingerprint-fan.work_bundle.crt;       
     #私 钥 文 件                                                                
     ssl_certificate_key /etc/nginx/conf.d/2_fingerprint-fan.work.key;          
     ssl_session_timeout 5m;                                                                                   
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;                                      
     #请 按 照 以 下 套 件 配 置 , 配 置 加 密 套 件 , 写 法 遵 循  openssl 标 准 。                  
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;        
     ssl_prefer_server_ciphers on;                                              
         
location / {                                                                    
  try_files $uri $uri/ /index.php?$query_string;                              }     
  location  ~* \.php$ {                                                  
                fastcgi_pass 127.0.0.1:9000;                                    
                fastcgi_index index.php;                                        
                include /etc/nginx/fastcgi.conf;                                
                                                       }

}

和上一节一样,请根据自己配置文件的实际情况来修改,像我其实嵌套了三个文件,这两个server块并不在同一个文件中。至此flarum论坛的安装和nginx配置就完成了。

总结

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

详细的论坛搭建和配置信息请移步古劳斯的保姆级教程。我奶奶看完都会盖房子(拇指