LNMP架构部署及应用

    科技2025-11-19  6

    LNMP部署及应用

    一、Nginx服务搭建1-1、编译安装Nginx及运行控制1-1-1、创建运行用户、组##1-1-2、编译安装Nginx## 1-2、检查配置文件1-2-1、启动、停止Nginx 1-3、配置文件Nginx.conf1-3-1、全局配置1-3-2 、I/O时间配置##1-3-3、HTTP配置##1-3-4、访问状态统计 1-4、Nginx 虚拟主机1-4-1、修改主机域名1-4-2、准备各个网站的目录和测试首页1-4-3、修改配置文件,把配置文件中的server{代码段全部去掉,加入2个新的server{}段,对应2个域名 二、搭建MYSQL数据库2-1、安装MYSQL环境依赖包2-2、cmake配置和编译安装2-3、设置/usr/local/mysql目录的权限2-4、编辑配置文件2-5、设置环境变量2-6、初始化数据库2-7、开启数据库并检查状态 三、PHP编译安装3-1、安装PHP的环境包3-2、编译安装3-3、配置PHP的三个配置文件3-4、配置及优化FPM模块3-5、创建软链接3-6、编辑,让nginx支持PHP功能3-7、测试数据库工作是否正常

    一、Nginx服务搭建

    1-1、编译安装Nginx及运行控制

    Nginx 的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保 Nginx 的安装顺利完成

    [root@localhost~]# yum -y install pcre-devel zlib-devel

    1-1-1、创建运行用户、组##

    Nginx 服务程序默认以 nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。例如,创建一个名为 nginx 的用户,不建立宿主文件夹,也禁止登录到Shell环境。 [root@localhost ~]#useradd-M-s/sbin/nologin nginx

    1-1-2、编译安装Nginx##

    配置Nginx的编译选项时,将安装目录设为/usr/loca/nginx,运行用户和组均设为nginx;启用http_stub_status module模块以支持状态统计,便于查看服务器的连接信息。具体选项根据实际需要来定,配置前可参考"/configure -help"给出的说明。 上传nginx-1.15.9.tar.gz至/opt目录

    [root@localhost~]# cd/opt [root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz [root@localhost nginx-1.15.9]#√configure\ --prefix=/usr/local/nginx\--user=nginx\--group=nginx\ --with-http_stub status module [root@localhost nginx-1.15.9]# make && make instl ##1.3路径优化##

    为了使 Nginx 服务器的运行更加方便,可以为主程序 nginx 创建链接文件,以便管理员直接执行"nginx"命令就可以调用Nginx 的主程序

    [root@localhost nginx-1.15.9]# In-s/usr/local/nginx/sbin/nginx/usr/local/sbin/ [root@localhost nginx-1.15.9]# Is-l/usr/local/sbin/nginx Irwxrwxrwx 1 root root 27 2月 28 05∶17/usr/local/sbin/nginx->/usr/local/nginx/sbin/nginx

    1-2、检查配置文件

    与 Apache的主程序 httpd类似,Nginx的主程序也提供了"-t"选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf 默认位于安装目录下的conf/子目录中。若要检查位于其他位置的配置文件,可使用"-c"选项来指定路径。

    [root@localhost nginx-1.15.9]#nginx -t nginx: the configuration file/usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file/usr/local/nginx/conf/nginx.conf test is successful

    1-2-1、启动、停止Nginx

    直接运行Nginx 即可启动Nginx 服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加"-c 配置文件路径"选项来指定路径。需要注意的是,若服务器中已装有httpd等其他 Web 服务软件,应采取措施(修改端口、停用或卸载)避免冲突。

    [root@localhost nginx-1.15.9]# nginx [root@localhost nginx-1.15.9]#nestat-anptgre|grep nginx N11191/nginx: master tcp 0 00.0.0.0:80

    通过检查Nginx 程序的监听状态,或者在浏览器中访问此 Web 服务(默认页面将显示"Welcom to nginx!"),可以确认 Nginx 服务是否正常运行。

    [root@localhost nginx-1.15.9]# yum-y install lynx [root@localhost nginx-1.15.9]# lynx 127.0.0.1 Welcome to nginx!Welcome to nginx! If you see this page, the nginx web server is successfullyinstalled and working. Further confiauration is required

    主程序Nginx 支持标准的进程信号,通过 kill 或kill命令发送 HUP信号表示重载配置,QUIT信号表示退出进程,KILL信号表示杀死进程。例如,若使用 killl命令,重载配置、停止服务的操作分别如下所示(通过"s"选项指定信号种类)

    [root@localhost~]# kill-s HUP nginx ###选项-s HUP等同于-1重新加载[root@localhost~~]# killall-s QUIT nginx ###选项-s QUIT 等同于-3停止服务

    当Nginx进程运行时,PID号默认存放在logs/目录下的 nginx.pid 文件中,因此若改用kill命令,也可以根据 nginx.pid 文件中的PID号来进行控制。

    [root@localhost~]#chmod 754 /lib/systemd/system/nginx.service [root@localhost ~]# systemct enable nginx.service Created symlink from /et/systemd/system/multi-user.targetwants/nginx.service to /us/lib/systemd/system/nginx.sevice

    检查通过systemct命令能否正常 启动、停止、重启、重载 Nginx 服务

    [root@localhost ~]# neSa-anup gre:ngin [root@localhost ~]# systemctl start nginx [root@localhost~]# netstat -anutp grep nginx 0 00.0.0.0:800.0.0.0:*LISTEN114' [root@localhost~]#

    由各种配置语句组成,不使用特定的界定标记。全局配置部分包括 Nginx 服务的运行用户、工作进程数、错误日志、PID 存放位置等基本设置

    1-3、配置文件Nginx.conf

    在 Nginx 服务器的主配置文件/ustr/local/nginx/conf/nginx.conf中,包括全局配置、I/O 事件配置和HTTP配置这三大块内容,配置语句的格式为"关键字值∶"(末尾以分号表示结束),以"#"开始的部分表示注释。

    1-3-1、全局配置

    由各种配置语句组成,不使用特定的界定标记。全局配置部分包括Nginx 服务的运行用户、工作进程数、错误日志、PID存放位置等基本设置

    [root@localhost ~]# vi/ust/local/nginx/conf/nginx.conf #user nobody; ##运行用户 worker processes 1; ##工作进程数 PrivateTmp=true [Install] WantedBy=multi-user.target

    配置参数解释 [Unit] Description=nginx ####描述 After=network.target ####描述服务类别 [Service] Type=forking###后台运行形式 PIDFile=/usr/local/nginx/logs/nginx.pid###PID文件位置 ExecStart=/usr/local/nginx/sbin/nginx###启动服务 ExecReload=/usr/bin/kill-s HUP SMAINPID ###根据PID重载配置 ExecStop=/usr/bin/kill-s QUIT SMAINPID###根据PID终止进程

    PrivateTmp=true [Install] WantedBy=multi-user.target [root@localhost~]# chmod 754/lib/systemd/system/nginx.service [root@localhost~]# systemctl enable nginx.service Created symlink from /ete/systemd/system/multi-user.targetwants/nginx.service to/ur/lib/systemd/system/nginx.service. 检查通过systemctl命令能否正常 启动、停止、重启、重载 Nginx 服务

    [root@localhost ~]# netstat-anutp lgrep nginx [root@localhost ~]# systemctl start nginx [root@localhost ~]# netstat-anutp lgrep nginx tcp 0 00.0.0.0:800.0.0.0:*LISTEN 11 [root@localhost ~]#

    1-3-2 、I/O时间配置##

    使用"events{}"界定标记,用来指定Nginx 进程的I/O响应模型、每个进程的连接数等设置。对于2.6及以上版本的内核,建议使用epoll 模型以提高性能;每个进程的连接数应根据实际需要来定,一般在10 000以下(默认为1024)

    events { use epoll; worker_connections 4096; }

    若工作进程数为8,每个进程处理4096个连接,则允许 Nginx 正常提供服务的连接数已超过3万个(4096×8=32768),当然具体还要看服务器硬件、网络带宽等物理条件的性能表理

    1-3-3、HTTP配置##

    使用"http{"界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持,以及后面要讲到的虚拟Web主机、PHP解析等一系列设置,其中大部分配置语句都包含在子界定标记"server{}"内

    #user nobody; worker_processes 1; #error log logs/error.log; #error log logs/error.log notice; #error log logs/error.log info; #pid logs/nginx.pid events { use epoll; worker_connections 4096; } http{ include mime.types; default type application/octet-stream; log_ format main$remote addr-$remote user【$time local】"$request"'##●去掉前面注释 '$status Sbody bytes sent "Shttp referer"'; ###●去掉前面注释 '"$http user agent""Shttp x forwarded for";###●去掉前面注释 access log logs/access.log main;###e访问日志位置,去掉前面注释 sendfile on###支持文件发送(下载) #keepalive timeout 0;###链接保持时间 keepalive _timeout 65; #gzip on; server{ ###WEB服务的监听配置 listen 80; ###WEB服务的监听端口 server name www.51xit.top;###网站名称(FQDN) charset koi8-r; ###网页的默认字符集 #access log logs/host.access.log main; location/{ ###根目录配置 root html; ###网站根目录的位置 index index.html index.htm; ###默认首页(索引页) /404.html; error page 404 #redirect server error pages to the static page/50x.html # error page 500 502 503 504 /50x.html; ###内部错误反馈页面 location =/50x.html{ ###错误页面配置 root html; #proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location~\.php${ #nrox pass httn:LL127.0.0.1: #}

    1-3-4、访问状态统计

    Nginx内置了HTTPSTUB STATUS状态统计模块,用来反馈当前的Web 访问情况,配置编译参数时可添加-with-http stubstatus module来启用此模块支持,可以使用命令/usr/local/nginx/sbin/nginx-V查看已安装的Nginx是否包含HTTP STUB STATUS模块。 要使用Nginx 的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf配置文件,指定访问位置并添加 stub_status 配置代码。 [root@localhost~]# vim /usr/local/nginx/conf/nginx.conf ####省略#### 在localtion/这个大模块下面 location/status模块 location/{ root html; index index.html index.htm; } location /status{ stub status on; access log off; } ####省略#### [root@localhost nginx]# nginx-t nginx: the configuration file/usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file/usr/local/nginx/conf/nginx.conf test is successful [root@localhost nginx]# systemctl restart nginx

    [root@localhost nginx]# lynx 127.0.0.1/status Active connections∶1 ###活动连接数 server accepts handled requests ##已经处理的链接信息 ##上个数字从左到右依次表示∶已处理的连接数、成功的TCP握手次数、已处Reading:0O Writing: 1 Waiting:0

    1-4、Nginx 虚拟主机

    利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx 服务器或单独运行一组Nginx进程,虚拟主机提供了在同一台服务器,同一组Nginx进程上运行多个网站的功能。跟Apache 一样,Nginx也可以配置多种类型的虚拟主机,分别是基于IP的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机。 使用 Nginx 搭建虚拟主机服务器时,每个虚拟 Web 站点拥有独立的"serverl)"配置段,各自监听的 IP地址、端口号可以单独指定,当然网站名称也是不同的。 #基于域名的虚拟主机###

    1-4-1、修改主机域名

    修改 windos 客户机的C∶\Windows\System32\driversletc\hosts 文件,加入www.51xit.top和www.52xit.top 这两个域名,它们都指向同一个服务器 IP地址,用于实现不同的域名访问不同的虚拟主机。 8.100.41 www.51xit.top www.52

    1-4-2、准备各个网站的目录和测试首页

    [root@localhost~]# mkdir-p /var/www/html/51xit/ ###创建 www.bt.com的根目录[root@localhost~]#mkdir-p/var/www/html/52xit/ ####创建 www.test.com的根目录 [root@localhost ~]# echo "www.51xit.top">>/var/www/htm/51xit/index.htm [rot@localhost~]# echo "www.52xittop">>/var/www/html/52xit/index.html

    1-4-3、修改配置文件,把配置文件中的server{代码段全部去掉,加入2个新的server{}段,对应2个域名

    server{ listen 80; server_name www.51xit.top; charset utf-8; access log logs/www.51xit.top.access.log; location/{ root/var/www/html/51xit; index index.html index.htm; } error page 500 502 503 504/50x.html; location=50x.html{ root html; } } server{ isten 80; Server name www.52xit.top; charset uf-8; access log logs/www.52xit.top.access.log; Location / { root/var/www/htm/52xt index index.html index.htm; } error page 500 502 503 504/50x.html; location =50x.html { root html; } } #####最后详细参数如下#### [root@localhost~]# vim /usr/local/nginx/conf/nginx.conf #user nobody; worker processes 1; #error log logs/error. log; #terror log logs/error.log notice; #error log logs/error.log info; #pid logs/nginx.pid;

    二、搭建MYSQL数据库

    2-1、安装MYSQL环境依赖包

    [root@localhost ~]# yum -y install \ > ncurses \ ##字符终端的包,方便终端操作## > ncurses-devel \ > bison \ ##MySQL的解析器,解析C++的解析器 > cmake ##作用和configure是一样的 [root@localhost ~]# useradd -s /sbin/nologin mysql ##创建用户##

    2-2、cmake配置和编译安装

    ##将所需压缩包传入/opt目录下## [root@localhost ~]# cd /opt [root@localhost opt]# tar xf mysql-boost-5.7.20.tar.gz [root@localhost opt]# cd mysql-5.7.20/ [root@localhost mysql-5.7.20]# cmake \ > -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ ## 指定安装路径 > -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ ##sock;通讯文件,连接数据库,通讯协议的载体## > -DSYSCONFDIR=/etc \ ##放的mysql的配置文件 > -DSYSTEMD_PID_DIR=/usr/local/mysql \ ## pid文件指定目录 > -DDEFAULT_CHARSET=utf8 \ ##此行和下一行为字符集相关## > -DDEFAULT_COLLATION=utf8_general_ci \ > -DWITH_INNOBASE_STORAGE_ENGINE=1 \ ##此行和下三行为存储引擎 > -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ > -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ > -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ > -DMYSQL_DATADIR=/usr/local/mysql/data \ ##指定数据存放位置 > -DWITH_BOOST=boost \ ##底层要支持c++运行库 > -DWITH_SYSTEMD=1 ##ID序列号 [root@localhost mysql-5.7.20]# make -j6 ##-j6指定处理的核心数,最大不能超过本身核心数## [root@localhost mysql-5.7.20]# make install

    2-3、设置/usr/local/mysql目录的权限

    [root@localhost mysql-5.7.20]# chown -R mysql:mysql /usr/local/mysql

    2-4、编辑配置文件

    ##设置/usr/local/mysql目录的权限## [root@localhost mysql-5.7.20]# cd /etc [root@localhost etc]# vim my.cnf ##将原文删除,添加以下内容## [client] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

    2-5、设置环境变量

    方法1、 [root@localhost ~]# echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile [root@localhost ~]# echo 'export PATH' >> /etc/profile [root@localhost ~]# source /etc/profile 方法2、 [root@localhost ~]# vim /etc/profile 去下面添加如下代码 PATH=/usr/local/mysql/bin:/usr/local/mysql/bin:$PATH ==>> wq 保存退出 [root@localhost ~]# source /etc/profile

    2-6、初始化数据库

    [root@localhost ~]# cd /usr/local/mysql/ bin/mysqld \ ## mysqld 是数据库初始化启动脚本 --initialize-insecure \ ## bin/mysql里的初始化的命令 --user=mysql \ ## 指定用户 --basedir=/usr/local/mysql \ ## 指定工作目录 --datadir=/usr/local/mysql/data ## 指定数据存放位置 为了让systemctl进行管理,systemctl管理/usr/lib/systemd/system/下的程序 [root@localhost mysql]# cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

    2-7、开启数据库并检查状态

    [root@localhost mysql]# systemctl enable mysqld ## 数据库开机自启 Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service. [root@localhost mysql]# systemctl start mysqld ## 开启数据库 [root@localhost mysql]# systemctl status mysqld ## 查看数据库状态 [root@localhost mysql]# netstat -anpt | grep 3306 ## 查看数据库端口状态 tcp6 0 0 :::3306 :::* LISTEN 92257/mysqld

    8、设置mysql密码并登录数据库

    [root@localhost mysql]# mysqladmin -u root -p password ##刚开始没密码是空的直接回车,然后输入密码12345,再次确认密码## Enter password: New password: Confirm new password: Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety. ##密码设置成功## [root@localhost mysql]# mysql -u root -p ##输入密码,即可登录到数据库## . . . . . . . . . . . . . . mysql> exit

    三、PHP编译安装

    3-1、安装PHP的环境包

    [root@localhost ~]# yum -y install \ libjpeg \ libjpeg-devel \ libpng libpng-devel \ freetype freetype-devel \ libxml2 \ libxml2-devel \ zlib zlib-devel \ curl curl-devel \ openssl openssl-devel

    3-2、编译安装

    ##将安装包传入/opt目录下## [root@localhost opt]# cd /opt [root@localhost opt]# tar xf php-7.1.10.tar.bz2 [root@localhost opt]# cd php-7.1.10/ [root@localhost php-7.1.10/]# ./configure \ --prefix=/usr/local/php \ --with-mysql-sock=/usr/local/mysql/mysql.sock \ --with-mysqli \ --with-zlib \ --with-curl \ --with-gd \ --with-jpeg-dir \ --with-png-dir \ --with-freetype-dir \ --with-openssl \ --enable-fpm \ --enable-mbstring \ --enable-xml \ --enable-session \ --enable-ftp \ --enable-pdo \ --enable-tokenizer \ --enable-zip [root@localhost php-7.1.10/]# make -j3 [root@localhost php-7.1.10/]# make install

    3-3、配置PHP的三个配置文件

    ##php有三个配置文件 php.ini核心配置文件 php-fpm.conf进程服务配置文件www.conf 扩展配置文件## [root@localhost php-7.1.10/]# cp php.ini-development /usr/local/php/lib/php.ini [root@localhost php-7.1.10/]# vi /usr/local/php/lib/php.ini ##找到以下两行的位置,修改这两行## 1170行:mysqli.default_socket = /usr/local/mysql/mysql.sock ##数据库通讯文件 939行:date.timezone = Asia/Shanghai ##添加时区 [root@localhost php-7.1.10]# /usr/local/php/bin/php -m ##验证安装的模块

    3-4、配置及优化FPM模块

    [root@localhost php-7.1.10]# cd /usr/local/php/etc/ [root@localhost etc]# cp php-fpm.conf.default php-fpm.conf ##优化复制默认进程服务配置文件 [root@localhost etc]# cd /usr/local/php/etc/php-fpm.d/ [root@localhost php-fpm.d]# cp www.conf.default www.conf ##优化复制扩展配置文件 [root@localhost php-fpm.d]# cd /usr/local/php/etc/ [root@localhost etc]# vi php-fpm.conf pid = run/php-fpm.pid ##将;去掉##

    3-5、创建软链接

    [root@localhost etc]# /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini [root@localhost etc]# netstat -natp |grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 99975/php-fpm: mast [root@localhost etc]# ln -s /usr/local/php/bin/* /usr/local/bin/ [root@localhost etc]# ps aux | grep -c "php-fpm”

    3-6、编辑,让nginx支持PHP功能

    [root@localhost etc]# vi /usr/local/nginx/conf/nginx.conf location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; include fastcgi_params; } ##将;去掉,用/usr/local/nginx/html替换原来的路径## [root@localhost etc]# vi /usr/local/nginx/html/index.php <?php phpinfo(); ?> [root@localhost etc]# systemctl restart nginx ##重启nginx## ##在windows的浏览器中输入http://20.0.0.11/index.php

    3-7、测试数据库工作是否正常

    [root@localhost ~]# mysql -u root -p ##输入密码12345## CREATE DATABASE bbs; GRANT all ON bbs.* TO 'bbsadm'@'%' IDENTIFIED BY 'admin123'; GRANT all ON bbs.* TO 'bbsadm'@'localhost' IDENTIFIED BY 'admin123'; flush privileges; ##最后exit退出## [root@localhost ~]# vi /usr/local/nginx/html/index.php ##将之前的内容删除## <?php $link=mysqli_connect('20.0.0.11','bbsadm','admin123'); if($link) echo "<h1>Success!!</h1>"; else echo "Fail!!"; ?> [root@localhost ~]# killall -s HUP nginx ##重启##
    Processed: 0.010, SQL: 8