yande.re 158270 sample crease dress fixme frill_frill loli morinaga_korune nopan open_shirt thighhighs.jpg

此为自己通过centos7系统搭建typecho博客的心得分享,全文目前6部分,这是第二节
点此参看下一节:

视频分享地址:

一、lnmp工作原理和安装准备


lnmp工作原理图.png

检查是否有添加了 FedoraProject 的 epel 源,
如果系统默认没有加入这个源,加入的方法很简单:

yum install epel-release

安装完成后执行

yum update

好了,正式开始:
一般来说,我们可以用编译安装,但是考虑到时间关系和本心得特点
手动通过官方和大型社区源epel规范化安装,不使用一键脚本
同时又不追求极致编译每个参数都亲力亲为,所以所有lnmp模块都采用配置好的源码直接部署
如果用编译安装,一般需要30分钟左右时间,
为了防止掉线,一般推荐安装screen进行分屏操作,这样即使
ssh掉线,还可以恢复正在进行的编译工作,免得做无用功,这里
稍微演示一下screen的安装
刚才已经安装好了epel源,我们继续,直接yum就可以安装screen了

yum -y install screen

复杂的暂时不用管,4个常用操作熟练即可

screen -ls显示所有创建的桌面,未连接的桌面都显示Detached
screen -r +桌面ID或者完整桌面名字 即可进入之前创建的对应ID桌面,
screen -ls就可以显示attached连接中了
在桌面链接中想退出当前桌面?按住 Ctrl +a+d即按着ctrl不放,
再依次按一下a和d,就可以退出当前桌面了
ctrl+c linux通用代码,停止当前运行的指令
screen操作就这么简单

这些附带配置做好之后,我们创建一个screen
开始一键包安装lnmp环境了

screen -S lnmp

我们取一个容易记的别称,开一个叫lnmp的screen窗口开始安装lnmp,
你可以按照自己喜好命名,记得是用 -S大写的
这时候xshell窗口会出现一个screen 0标识
这时候,自己就可以选择一个军哥一键啊之类的脚本运行,
Ctrl +a+d 关闭当前screen,喝杯咖啡或者下午茶,等待半小时后
screen -r lnmp回到咱们的工作分屏,收收菜,查看结果
这里就不多说了,我们今天采用

直接添加官方源后通过 yum 方式安装nginx。

二、配置repo源官方nginx


添加nginx源文件配置 touch /etc/yum.repos.d/nginx.repo,编辑添加以下内容

vi /etc/yum.repos.d/nginx.repo

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/7/$basearch/

gpgcheck=0

enabled=1

(以上适用于 CentOS 7, 其他版本可以看官网说明)
https://nginx.org/en/linux

yum list |grep nginx

查询下配置源是否成功
然后安装 nginx执行:

yum -y install nginx

如果操作正确到这里 nginx 环境就已经安装 OK 了。

当然你还可以使用命令查一下究竟是否安装完成。

rpm -q nginx

rpm是软件管理包工具
-q 是query 英 [ˈkwɪəri]查询对应名字的软件是否安装
-qa就是列出所有已安装软件包

yum install nginx
systemctl start nginx

systemctl enable nginx将nginx加入自启动

systemctl status nginx查看下运行状态
free -m查看下内存占用39m
这时候你的web服务就上线了,打开浏览器输入ip
103.79.76.41
即可看到nginx欢迎页面


关于nginx的一些查询,如果版本更新,怎么找到你的nginx conf位置,
当然去一键包或者官网的readme文档慢慢看也是很好的,
自己记住下面这个查询指令,更加主动:

ps -ef | grep nginx

e指显示所有进程
f指全格式
ps-ef显示出的结果:
1.UID --- 用户ID
2.PID ----进程ID
3.PPID ----父进程ID
4.C ------- CPU占用率
5.STIME-----开始时间
6.TTY ------- 开始此进程的TTY----终端设备
7.TIME ------ 此进程运行的总时间
8.CMD---------命令名

ps指进程显示

grep是查找工具,正则表达式方式搜索文本,打印出匹配结果
|指管道,grep对管道提供的内容进行查询,筛选出nginx的行
然后就可以 vi编辑了


三、安装 Mysql(MariaDB)


oracle美[ˈɔ:rəkl]甲骨文公司收购了mysql,mysql之父再次开发mariaDB作为开源产品替代,
以防mysql今后闭源,mariaDB是完全兼容mysql数据格式的,并且查询效率更高,
CentOS7 官方源中把 mysql 换成了 MariaDB,
因此我们这里以 MariaDB 代替 Mysql,首先执行安装:

yum install mariadb-server

安装完成后启动 MariaDB 并设置为开机启动:

systemctl start mariadb
systemctl enable mariadb

查看下内存占用
`free -m 130m
还是比较占资源的。内存小的vps(256m那种),推荐使用sqlite更轻量化

执行脚本通过交互的方式对 MariaDB 进行一些设置:

/usr/bin/mysql_secure_installation

默认root用户访问第一次是留空密码,
提示是否设置密码,当然设置一个了,弄个复杂点的,自己小本本记录好,
root用户禁止远程访问,我们在后面将设置新的专用远程访问账号就好,
还有开放相关firewalld端口设置,防止3306之类的端口无法访问。

四、安装php和相关扩展


yum search php查询下有哪些可用php扩展
使用 yum 同样方便的安装 php-fpm,这里同时安装 php-mysql 扩展用于连接 mysql 数据库,如果你的 php 应用中需要用到更多的扩展,也可以在这里一并安装
附带安装一些必要的扩展

yum -y install php php-fpm php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

以上就附带安装 PHP(php-fpm) 了

简单点,只安装下面2个也行:

yum install php-fpm php-mysql

2019.9.26更新:
如果要安装php7.0以上版本:

  1. 安装源

安装php72w,是需要配置额外的yum源地址的,否则会报错不能找到相关软件包。

php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic。如果跳过epel-release的话,安装webtatic的时候,会有错误爆出。

所以,这里需要的命令是:

rpm -Uvh https://dl.Fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

当然,您也可以选择下面的这个命令,也是一样的效果。

yum install epel-release -y

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
  1. 清除历史版本

为了防止CentOS上面发生php冲突,所以,这个命令还是先执行一下更好些。

yum -y remove php*
  1. 安装扩展包

事实上,这里面的对应扩展库很多,这里大家一定要注意cli和fpm这两个包,而其它的相关包就看您需要了。

yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel

还有比较豪华的版本:

yum -y install php72w php72w-cli php72w-fpm php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml
  1. 安装完成以后,启动服务
systemctl enable php-fpm.service
   systemctl start php-fpm.service

2020.11.18更新:

如果使用centos8系统 要安装php7.0以上版本,推荐使用dnf包管理器来替换rpm,我们添加remi源:

dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

install remi repo
查看最新包含的php模块,没错,现在使用模块管理包了

dnf module list php

list php module

可以看到包括php7.0-8.0一些版本选择,这里安装7.4

dnf module enable php:remi-7.4

enable php-7.4 module

我们安装普通套件+自选的一些模块,mysqlnd是必须的,当然,你也可以选择自己需要的组合,或者默认的开发套件和最小化安装

dnf install php php-cli php-common php-devel php-embedded php-gd php-mbstring php-mysqlnd php-opcache php-pdo php-xml

最后启动服务,添加开机自启:

systemctl enable php-fpm.service
systemctl start php-fpm.service

php-fpm的由来,nginx和php通信2种模式比较,参考:
https://blog.csdn.net/QFire/article/details/78680717?locationNum=1&fps=1
这里简单说明一下
mod_php和mod_fastcgi两种通信模式沟通apache/nginx web服务端和php解析
php-fmp则是后来搭建的用来辅助mod_fastcgi通信的高效模式。
有兴趣的自己可以看看链接里有关于两者的详细历史发展,或者围观我的博客有文本教程

五、一些参数配置调整和测试


编辑下php配置

vi /etc/php.ini

修改
你在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/”
然后输入你要查找的关键字敲回车就可以了。
如果你要继续查找此关键字,敲字符 n 就可以继续查找了。
敲字符N(大写N)就会向前查询;

cgi.fix_pathinfo=0

举例来说,开启的危害就是假设你的网站有http://xx.com/a.jpg这样的一张图片,
我通过http://xx.com/a.jpg/foo.php就可以查看到这个文件的二进制内容,
意思就是可以通过php来执行它.问题就来了,如果你的网站允许用户上传图片,
那么用户就可以构造一些恶意的代码,并伪装成图片上传.
然后通过上面说的那种方式就可以在你网站的服务器上面通过php跑恶意代码了.
为了方便后面修改上传附件大小,提前修改下相关配置:

upload_max_filesize = 8000M;
post_max_size = 8000M;
max_execution_time=600;

修改php-fpm配置

vi /etc/php-fpm.d/www.conf

先展示下需要修改的列表清单:

listen= /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
user = nginx
group = nginx

pm = dynamic      ;生成进程
pm.max_children = 50       可以启动多少进程
pm.start_servers = 10        一开始启动多少进程
pm.min_spare_servers = 5    最少启动的进程数
pm.max_spare_servers = 25   最多启动的进程数
pm.max_requests = 500    到达多少请求后自动结束进程
rlimit_files = 1024    一次请求的最大字节数

具体修改过程和理由,下面一个个解释
监听 php-fpm.sock
并发进程数设置假设一个进程20m内存占用,参考上面的php-fpm由来,
对于咱的768M辣鸡小鸡鸡,考虑存余内存大概768-300=468m的样子,
最多开25个进程差不多了,有swap缓存,凑合吧,不能再多了

systemctl start php-fpm.service

只有启动后/var/run/php-fpm/php-fpm.sock这个才会生成,而且停止后会自动释放。

systemctl enable php-fpm

最后将php-fpm服务挂载自动启动

重启下nginx

systemctl restart nginx

重启下php-fpm

systemctl restart php-fpm

看看端口:

netstat -pltn

一样的意思
p指program相关程序显示出来
l指listening,正在监听的端口才显示
t指tcp,只显示tcp端口
n指numeric 只显示numerical adress 不显示别名。
有80端口了
再看看咱们的php-fpm还在不在

ls /var/run/php-fpm/

php-fpm.sock正常运行

修改nginx 配置,将listen 127.0.0.0 :9000 端口通信方式也改成fastcgi socket模式
通过查询默认模板,找到咱们站点存放位置

find / -name default.conf

cat  /etc/nginx/conf.d/default.conf

通过root项发现默认网站目录是在:
/usr/share/nginx/html下
cd过去,咱们创一个测试页面看看:

touch test.php
vi test.php

输入:

<?php
echo "Welcome to Steamoe";
phpinfo();
?>

保存
103.79.76.41/test.php
浏览器打开看看
这个页面还无法编译显示
显然我们的php还未和nginx通信成功,那么继续

编辑下nginx默认配置,测试下
vi /etc/nginx/conf.d/default.conf
index项 加入一个index.php (可选内容,不在default.conf做首页index.php配置的话可以不加):

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm index.php;//如果需要,将index.php加入此处;
}

然后server{}项内填写之前cat获得的默认配置root路径

server {
    listen  80 default_server;
    server_name  localhost;
    root    /usr/share/nginx/html;
    //此root路径可能随版本发生改变或者不存在,自行添加修改。
}

server_name也可以填自己vps ip
新加入下面的location:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
}

因为fastcgi_params配置文件中的SCRIPT_FILENAME问题,使用源码安装的nginx,
fastcgi_params配置文件中是没有SCRIPT_FILENAME这个参数的,需要在server中自己填写,

试着打开103.79.76.41/test.php
发现No input file specified.

nginx维护日志查询:

find / -name error.log

cat /var/log/nginx/error.log
FastCGI sent in stderr: "Unable to open primary script:
/etc/nginx/html/test.php (No such file or directory)" while reading response header from upstream

发现要使用fastcgi 和php-fpm传输,这边没有文件信息传递过去,看看咱们的
fastcgi_params数组里面配置是否完整

vi /etc/nginx/fastcgi_params

加入

fastcgi_param SCRIPT_FILENAME $request_filename;

保存

systemctl restart nginx
systemctl restart php-fpm

再次打开
103.79.76.41/test.php
发现咱们的nginx测试网页已经可以和php正常通信了。

要使用上面的php-fpm传输配置,则必须保证fastcgi_params文件中包含下面的配置:

fastcgi_param SCRIPT_FILENAME $request_filename;

否则fastcgi无法找到要执行的脚本文件。

作者:dothetrick
链接:https://www.jianshu.com/p/1abf14f8c1d4
点此参看下一节:

Last modification:December 9, 2021
If you think my article is useful to you, please feel free to appreciate