CentOS 7.8 搭建LNMP(Linux+Nginx+MySQL+PHP)

摘要:
安装前的准备-配置selinux和防火墙1,临时(永久)关闭selinux为什么要关闭selinux,避免selinux的默认文件权限的限制,导致安装失败。sudofirewall-cmd--permanent--zone=public--add-service=httpsudofirewall-cmd--permanent--zone=public--add-service=httpssudofirewall-cmd--reload如果你的服务器是阿里云ECS,你还可以通过控制台安全组,打开80和443端口,或者其他自定义端口。具体操作路径:阿里云ECS服务器-》安全组-》配置规则-》安全组规则-》入方向-》添加安全组规则启动Nginxsudosystemctlstartnginx.service设置开机自动运行sudosystemctlenablenginx.service检查安装是否成功,在浏览器中输入服务器的地址,本机安装则输入172.0.0.1,回车:会显示:welcometonginx!

安装前的准备-配置selinux和防火墙

1,临时(永久)关闭selinux

为什么要关闭selinux(centos默认开启的安全加强的linux,详细问度娘),避免selinux的默认文件权限的限制,导致安装失败。操作如下:
查看SELinux状态命令:
命令:/usr/sbin/sestatus -v
如果SELinux status参数为enabled即为开启状态,disable为关闭
关闭SELinux方法:
临时关闭(本次安装使用的方法,不用重启机器,重启后恢复):
命令:setenforce 0
永久关闭:修改配置文件需要重启机器:
修改/etc/selinux/config 文件(小白请自学vim操作)
将SELINUX=enforcing改为SELINUX=disabled
重启机器,如下命令都可以:
reboot
shutdown -r
init 1

关于防火墙设置:

CentOS 7 以上版本:

1.查看已开放的端口(默认不开放任何端口)
firewall-cmd --list-ports
2.开启80端口
firewall-cmd --zone=public(作用域) --add-port=80/tcp(端口和访问类型) --permanent(永久生效)
3.重启防火墙
firewall-cmd --reload
4.停止防火墙
systemctl stop firewalld.service
5.禁止防火墙开机启动
systemctl disable firewalld.service
6.删除
firewall-cmd --zone=public --remove-port=80/tcp --permanent

一、配置 EPEL源

sudo yum install -y epel-release
sudo yum -y update

二、安装Nginx

sudo yum install -y nginx

安装成功后,默认的网站目录为: /usr/share/nginx/html

默认的配置文件为:/etc/nginx/nginx.conf

自定义配置文件目录为: /etc/nginx/conf.d/

三、开启端口80和443

如果你的服务器打开了防火墙,你需要运行下面的命令,打开80和443端口。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

如果你的服务器是阿里云ECS,你还可以通过控制台安全组,打开80和443端口,或者其他自定义端口。

具体操作路径: 阿里云ECS服务器 -》 安全组 -》 配置规则 -》 安全组规则 -》 入方向 -》 添加安全组规则

启动Nginx
sudo systemctl start nginx.service
设置开机自动运行
sudo systemctl enable nginx.service

检查安装是否成功,在浏览器中输入服务器的地址,本机安装则输入172.0.0.1,回车:
会显示:welcome to nginx!

四、安装php5.6和php-fpm

cd /etc/yum.repos.d/

yum -y install epel-release #<===安装centos7下php5.6的epel和remi源
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum list --enablerepo=remi --enablerepo=remi-php56 | grep php #<===查看php-5.6相关包
yum -y install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-pecl-apcu php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof php-pdo php-pear php-fpm php-cli php-xml php-bcmath php-process php-gd php-common --skip-broken

yum list installed |grep php #<===查看yum安装的软件包
rpm -ql php-fpm.x86_64 #<===查看php软件包所在路径
php -version #<===查看PHP版本安装是否正确
systemctl start php-fpm
systemctl enable php-fpm
lsof -i :9000

四、安装mysql5.7

1. 首先进入本机的源文件目录
cd /usr/local/src
  • 1
2. 使用wget下载官方yum源的rpm包:
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
  • 1
3. 安装rpm包:
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
4. 再次使用yum来安装mysql-server:
yum install -y mysql-server

可以看到这次不再提示安装Mariadb了

5. 安装完成后,启动mysqld服务:
systemctl start mysqld

查看是否成功启动:

ps aux|grep mysqld
6. 设置mysqld服务开机自启动:
systemctl enable mysqld
7. 使用初始密码登录

由于MySQL从5.7开始不允许首次安装后,使用空密码进行登录,系统会随机生成一个密码以供管理员首次登录使用,这个密码记录在/var/log/mysqld.log文件中,使用下面的命令可以查看此密码:

cat /var/log/mysqld.log|grep 'A temporary password'

最后一行冒号后面的部分bkv,dy,)o7Ss就是初始密码。
使用此密码登录MySQL:

mysql -u root -p
8. 更改默认密码:

切换数据库:

use mysql;

修改root密码:

alter user 'root'@'localhost' identified by 'Aa-123456';

允许root或者其他账号远程登

grant all privileges on *.* to 'root'@'%' identified by 'Aa-123456' with grant option;

刷新生效

flush privileges;

退出

exit;

五、nginx 配置 php

参考 https://juejin.im/entry/6844903599168815118

因为只是配置PHP的服务器,而且只使用一个端口所以只需要改动server部分

cd /etc/nginx/conf.d/

新建 test.conf 文件,输入

server {
        listen       8090default_server;

        # 这里改动了,也可以写你的域名
        server_name  192.168.17.26;
        
        # 默认网站根目录(www目录)
        root         /var/www/test/;

        # Load configuration files for the defaultserver block.
        include /etc/nginx/default.d/*.conf;

        location / {
            # 这里改动了 定义首页索引文件的名称
            index index.php index.html index.htm;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }

        # 这里新加的
        # PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI协议默认配置.
        # Fastcgi服务器和程序(PHP,Python)沟通的协议.
        location ~ .php$ {
            # 设置监听端口
            fastcgi_pass   127.0.0.1:9000;
            # 设置nginx的默认首页文件(上面已经设置过了,可以删除)
            fastcgi_index  index.php;
            # 设置脚本文件请求的路径
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            # 引入fastcgi的配置文件
            include        fastcgi_params;
        }
    }

修改完成后将vim编辑器切换到一般一半模式(Esc),然后输入:wq保存退出。

之后重启Nginx服务

service nginx restart

以上就配置成功了,但是上面的配置只是nginx配置部分,更多的内容需要继续学习。

测试

我们可以通过下面的方法判断Nginx配置是否成功。

在test网站根目录(/var/www/test)下创建一个php文件,随便起名我的是php_info.php

内容如下:

<?php

    //顺便可以看一下php的扩展全不全
    phpinfo();

进入你的网站看看能不能打开文件 你的ip/文件名 例如:192.168.17.26:8090

二、nginx+php运行原理

上边我们已经配置成功了,现在我们来看下具体的原理。

首先简单的讲一讲原理,目前主流的nginx+php的运行原理如下:
1、nginx的worker进程直接管理每一个请求到nginx的网络请求。

2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。

3、关于fastcgi:fastcgi是一种进程管理器,管理cgi进程。市面上有多种实现了fastcgi功能的进程管理器,php-fpm就是其中的一种。再提一点,php-fpm作为一种fast-cgi进程管理服务,会监听端口,一般默认监听9000端口,并且是监听本机,也就是只接收来自本机的端口请求,所以我们通常输入命令 netstat -nlpt|grep php-fpm 会得到:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1057/php-fpm
这里的127.0.0.1:9000 就是监听本机9000端口的意思。

4、关于fastcgi的配置文件,目前fastcgi的配置文件一般放在nginx.conf同级目录下,配置文件形式,一般有两种:fastcgi.conf 和 fastcgi_params。不同的nginx版本会有不同的配置文件,这两个配置文件有一个非常重要的区别:fastcgi_parames文件中缺少下列配置:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
我们可以打开fastcgi_parames文件加上上述行,也可以在要使用配置的地方动态添加。使得该配置生效。

5、当需要处理php请求时,nginx的worker进程会将请求移交给php-fpm的worker进程进行处理,也就是最开头所说的nginx调用了php,其实严格得讲是nginx间接调用php

了解了上面的这五个简单原理,在nginx中配置php调用方法就变得易如反掌。

配置文件详解:

server {  
    listen       8011;  
    server_name  test.cn;  
    location ~ .php?.*$ {  
        root           /share/test;  
        fastcgi_pass   127.0.0.1:9000;  
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;  
        include        fastcgi_params;  
    }  
}  

1、第一个大括号 server{ }:不必多说,代表一个独立的server,
2、listen 8011:代表该server监听8011端口
3、location ~ .php?.*${ }:代表一个能匹配对应uri的location,用于匹配一类uri,并对所匹配的uri请求做自定义的逻辑、配置。这里的location,匹配了所有带.php的uri请求,例如:http://192.168.244.128:8011/test.php/asdasdhttp://192.168.244.128:8011/index.php等
4、root /share/test:请求资源根目录,告诉匹配到该location下的uri到/share/teset文件夹下去寻找同名资源。
5、fastcgi_pass 127.0.0.1:9000:这行开始是本文的重点:这行代码的意思是,将进入到该location内的uri请求看做是cgi程序,并将请求发送到9000端口,交由php-fpm处理。
6、fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; :这行配置意思是:动态添加了一行fastcgi配置,配置内容为SCRIPT_FILENAME,告知管理进程,cgi脚本名称。由于我的nginx中只有fastcgi_params文件,没有fastcgi.conf文件,所以要使php-fpm知道SCRIPT_FILENAME的具体值,就必须要动态的添加这行配置。
7、include fastcgi_params; 引入fastcgi配置文件
以上就是最简洁版的nginx启动php脚本的最简配置,当重启nginx之后,在/share/test目录下创建一个xx.php文件,输入<?php echo "hello world"; ?>保存,然后在浏览器中访问localhost:8011/xx.php 就可以在网页上显示hello world了。

免责声明:文章转载自《CentOS 7.8 搭建LNMP(Linux+Nginx+MySQL+PHP)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java实现第八届蓝桥杯正则问题md5sum命令详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PHP无法连接MYSQL8.0一般处理办法

以 mysql_native_password 加密方式修改密码 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码 FLUSH PRIVILEGES; #刷新权限 修改MYSQL.INI mysql8.0 默认用户加密...

Thinkphp+Nginx(PHPstudy)下报的404错误,403错误解决

最近一个TP5的项目说放到Nginx下测试看看,下载个 PHPstudy,放到WWW下,配置好域名,直接给个报个404; 解决方法: 1.先在phpstudy下配置好域名目录指向项目下的public下; 2.复制下面这段代码放进nginx/conf/vhost文件里: location / {index index.html index.htm inde...

端口被占用的问题解决 Web server failed to start. Port ×× was already in use

出现此问题是端口被占用了,只需要关闭正在使用的端口就行 解决思路: 1.在服务器中更改port端口号,改为不冲突,没有被占用的端口。 2.找出被占用的端口,结束被占用的端口 解决结束被占用的端口的方法: 1.输入命令查看被占用的端口的进程: netstat -aon|findstr 80 (80为要查找的端口号)此处的pid为3652 2.根据PID来...

PHP的openssl加密扩展使用小结

引言 互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求)、数据完整性(没有被人修改过)、数据私密性(密文,无法直接读取)等。虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是需要我们使用加密方...

K8s-Centos7.4使用kubeadm部署kubernetes1.15

kubeadm部署kubernetes1.15     环境准备:        IP                  角色          系统        192.168.1.201       master     Centos7.4        192.168.1.202       node1      Centos7.4       ...

windows 环境下nginx + tomcat群 + redis 实现session共享

nginx作为负载均衡根据定义将不同的用户请求分发到不同的服务器,同时也解决了因单点部署服务器故障导致的整个应用不能访问的问题 在加入nginx之后,如果多个服务器中的一个或多个(不是全部)发生故障,均不影响用户的正常使用,会将用户请求分发到可以提供服务的服务器上 本节实例仅实现 一个nginx + 2个tomcat + redis实现java web应用...