在Debian Buster中配置Lnmp

从脱离一键包至今已有一段时间,在这个过程中积累了不少经验,现总结一手以留未来翻阅。

前言

现在几乎所有的一件包都是采用编译的方案来安装相关套件,虽然其兼容性不错,但仍有些许不足

  • 搭建速度慢,占用资源大。对于小鸡来说,编译的过程需要占用大量的cpu和ram,并且需要一段时间
  • 配置不够灵活。以PHP为例,PHP拥有大量的模块,但是在编译的过程中只能一气呵成,不能灵活增减 所以,我将会利用debian强大的包管理器APT来安装相关组件。

#环境安装 APT的使用我就不再赘述,直接放命令出来吧。

apt install nginx php-fpm mariadb-server

这里的PHP我使用的是fpm,当然了,cli也不是不行,只是我更喜欢用sock文件对接的fpm罢了。nginx的配置文件中同样提供了cli的配置。

因为mysql闭源,被移除了apt源,所以这里用mariadb代替,它仍然支持mysql的登录。

配置nginx和php

这是nginx的文件树

root@Neat:/etc/nginx# tree
.
├── conf.d
├── fastcgi.conf
├── fastcgi_params
├── koi-utf
├── koi-win
├── mime.types
├── modules-available
├── modules-enabled
│   ├── 50-mod-http-auth-pam.conf -> /usr/share/nginx/modules-available/mod-http-auth-pam.conf
│   ├── 50-mod-http-dav-ext.conf -> /usr/share/nginx/modules-available/mod-http-dav-ext.conf
│   ├── 50-mod-http-echo.conf -> /usr/share/nginx/modules-available/mod-http-echo.conf
│   ├── 50-mod-http-geoip.conf -> /usr/share/nginx/modules-available/mod-http-geoip.conf
│   ├── 50-mod-http-image-filter.conf -> /usr/share/nginx/modules-available/mod-http-image-filter.conf
│   ├── 50-mod-http-subs-filter.conf -> /usr/share/nginx/modules-available/mod-http-subs-filter.conf
│   ├── 50-mod-http-upstream-fair.conf -> /usr/share/nginx/modules-available/mod-http-upstream-fair.conf
│   ├── 50-mod-http-xslt-filter.conf -> /usr/share/nginx/modules-available/mod-http-xslt-filter.conf
│   ├── 50-mod-mail.conf -> /usr/share/nginx/modules-available/mod-mail.conf
│   └── 50-mod-stream.conf -> /usr/share/nginx/modules-available/mod-stream.conf
├── nginx.conf
├── proxy_params
├── scgi_params
├── **sites-available**
│   └── default
├── **sites-enabled**
│   └── default -> /etc/nginx/sites-available/default
├── snippets
│   ├── fastcgi-php.conf
│   └── snakeoil.conf
├── uwsgi_params
└── win-utf

6 directories, 24 files

其中,加粗部分的sites-enable、sites-available是有关站点配置文件的目录

enable目录意为启用,其包含的链接将指向available(可用),这样就可以方便得控制站点的启停

当然,你也可以不遵循这个原则,nginx不会报任何错误,只是维护起来可能会遇到些许问题


一般来说 default文件包含了最标准的配置信息,如SSL、PHP等

所以当我们需要建立其他站点时,可以将default文件复制一份,再在副本中更改其hostname即可

但是当我们兴冲冲地将PHP文件放入root时,却发现弹出了下载..

Down

这是因为Nginx并不知道该怎么处理PHP文件,所以只好将PHP发还给你

现在,我们需要通过更改配置文件的方式让Nginx“学会”与php-fpm程序沟通并处理PHP,来输出页面

在大约56行的地方,有一串关于PHP的配置

# pass PHP scripts to FastCGI server                                                                                    
#                                                                                                                       
#location ~ \.php$ {                                                                                                    
#       include snippets/fastcgi-php.conf;                                                                              
#                                                                                                                       
#       # With php-fpm (or other unix sockets):                                                                         
#       fastcgi_pass unix:/run/php/php7.3-fpm.sock;                                                                     
#       # With php-cgi (or other tcp sockets):                                                                          
#       fastcgi_pass 127.0.0.1:9000;                                                                                    
#}   

这里,我们需要取消location与底部括号和中间与当前环境所对应的注释即可

因为我使用的是php-fpm,所以我需要取消第五行的注释

至于第二行的fastcgi,不取消的话有个别PHP程序会无法运行

完成之后使用systemctl restart nginx来重启nginx,现在PHP就会正常被处理啦

php done

至此,PHP与Nginx的对接已经成功 如果在重启nginx后浏览器仍然在尝试下载,请尝试清除浏览器缓存

截图中的PHP程序源于项目Pi-DashBord

#配置数据库 在初次使用数据库的时候,我们需要对其进行初始化

mysql_secure_installation

第一步,程序询问你的数据库root密码,但是我们是初次配置,root密码并不存在,留空回车

Enter current password for root (enter for none):

第二步,程序询问是否需要设置root密码

Set root password? [Y/n]

第三步,程序询问是否删除匿名用户(这里不删除的话会有安全问题)

Remove anonymous users? [Y/n]

第四步,程序询问是否禁用远程登陆root的权限(如果没有闲的没事登root的习惯的话,建议禁用)

Disallow root login remotely? [Y/n]

第五步,程序询问是否移除“test”数据库(默认情况下,test库是允许所有人访问的,这里容易出现安全问题,建议删除)

Remove test database and access to it? [Y/n]

最后,程序询问是否立即reload数据库并使配置生效

Reload privilege tables now? [Y/n]

当看到Thanks for using MariaDB!输出时,mariadb的初始化便到此结束


当我们使用MySQL认证登录数据库时,即使密码正确,我们会发现其拒绝访问

access_denied

这是因为MariaDB默认并没有启用MySQL的认证,所以我们需要手动启用

使用mysql或者mariadb命令可以进入数据库的shell

然后执行以下命令

update mysql.user set plugin = 'mysql_native_password' where User='root';   
flush privileges;  
exit

然后,使用systemctl restart mariadb重启数据库程序

现在,再重新登录,就不会被拒绝访问啦

Done_Database

另外,默认MariaDB只将3306端口绑定在了本地 如果需要更改,可以在/etc/mysql/mariadb.conf.d/50-server.cnf中进行

Licensed under CC BY-NC-SA 4.0
Made with ❤ By GiriNeko
Built with Hugo
主题 StackJimmy 设计