LNMP架构搭建
2.1 .1 关闭防火墙,将安装nginx所需软件包传到/opt目录下
Nginx:
Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。
对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求。(实际操作,很多公司为了服务器的稳定,都会设置在20000个左右)
Nginx的主要使用场景: 虚拟主机,反向代理,缓存,http
Apache:Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。
Nginx Apache
nginx是一个基于事件的web服务器 apache是一个基于流程的服务器
所有请求都由一个线程处理单个线程处理单个请求
nginx避免子进程的概念apache是基于子进程的
nginx类似于速度 apache类似于功率
nginx在内存消耗和连接方面比较好 apache在内存消耗和连接上没有提高
nginx在负载均衡方面表现较好 当流量到达进程极限时,apache将拒绝新的连接。
nginx不支持IBMI和openvms一样的osapache支持更多的os
nginx只具有核心功能 apache提供了比nginx更多的功能
nginx的性能和可伸缩性不依赖于硬件apache依赖于cpu和内存等硬件组件
Nginx支持热部署 Apache不支持热部署
Nginx对比Apache的优势:
轻量级,nginx比apache 占用更少的内存及资源;
静态处理,Nginx 静态处理性能比 Apache 高 ;
Nginx可以实现无缓存的反向代理加速,提高网站运行速度;
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;
Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;
nginx是异步进程,多个连接可以对应一个进程 ;apache是同步多进程,一个连接对应一个进程;
Nginx高度模块化,编写模块相对简单,且组件比Apache少
高并发下nginx 能保持低资源低消耗高性能;
Nginx 配置简洁, Apache配置复杂;
apache相对于nginx的优点 :
Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)
模块多,基本想到的都可以找到
少bug, nginx的bug相对较多
超稳定
Nginx处理动态请求是弱项,动态请求要Apache去做。
Apache和Nginx的默认端口都是80,当你发先Nginx启动失败,导致的原因可能就是80端口被占用,而导致服务启动失败,可以修改服务的端口,从而实现两个服务的同时进行。
Nginx有两个进程:
master process:主进程(守护进程),用来管理工作进程。
worker process:工作进程,用来处理用户的请求。
2.1 .1 关闭防火墙,将安装nginx所需软件包传到/opt目录下
systemctl stop firewalld systemctl disable firewalld setenforce 0
#nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
[root@localhost opt]#useradd -M -s /sbin/nologin nginx [root@localhost opt]#tar zxvf nginx-1.12.2.tar.gz -C /opt/ [root@localhost opt]#cd nginx-1.12.2/ [root@localhost nginx-1.12.2]#./configure \ > --prefix=/usr/local/nginx \ > --user=nginx \ > --group=nginx \ > --with-http_stub_status_module
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令
#检查nginx服务配置是否正确 nginx -t #启动nginx服务 /usr/local/sbin/nginx #快捷运行 nginx
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号 kill -3 <PID号> kill -s QUIT <PID号> killall -3 nginx killall -s QUIT nginx
查看进程号
cat /usr/local/nginx/logs/nginx.pid //查看nginx主进程的PID pgrep nginx -l //查看nginx的主进程号和工作进程号 lsof -i :80 //查看nginx的主进程号和工作进程号 ss -ntap | grep nginx //查看nginx的主进程号和工作进程号 netstat -ntap | grep nginx //查看nginx主进程的PID
kill -1 <PID号> kill -s HUP <PID号> killall -1 nginx killall -s HUP nginx
[root@localhost logs]#ls access.log error.log nginx.pid [root@localhost logs]#mv access.log access.`date +%F`.log [root@localhost logs]#ls access.2022-09-27.log error.log nginx.pid [root@localhost logs]#kill -USR1 8468 [root@localhost logs]#ls access.2022-09-27.log access.log error.log nginx.pid [root@localhost logs]#
引入新的升级安装包:
tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0 ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module --with-http_ssl_module
编译安装新的nginx升级软件包:
#编译安装 make #将老版本的nginx进行备份,防止升级失败,还原 mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old #将新的运行文件放入安装的运行目录 cp objs/nginx /usr/local/nginx/sbin/nginx
平滑升级:
make mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old cp objs/nginx /usr/local/nginx/sbin/nginx make upgrade
安装环境必须是4G内存,2核以上,运行脚本需要使用source进行执行,所需安装包需要放在/opt目录下,脚本可放在任意位置进行执行
#!/bin/bash #===============关闭防火墙======================= firewalld () { systemctl stop firewalld systemctl disable firewalld setenforce 0 } #================安装nginx服务=========================== nginx_install () { #安装环境 yum -y install pcre-devel zlib-devel gcc gcc-c++ make #创建nginx用户 useradd -M -s /sbin/nologin nginx #解压编译安装 cd /opt tar zxvf nginx-1.12.2.tar.gz cd /opt/nginx-1.12.2/ ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_stub_status_module make && make install #将nginx程序添加到环境变量中 ln -s /usr/local/nginx/local/sbin/nginx /usr/local/sbin #添加nginx为系统服务 cat >/lib/systemd/system/nginx.service <<EOF [Unit] Description=nginx After=network.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target EOF chmod 754 /lib/systemd/system/nginx.service systemctl start nginx if [ $? -eq 0 ];then systemctl enable nginx echo "nginx服务已启动完成!" else echo "nginx服务启动失败,请检查!" fi } #=========安装mysql服务=========================# mysql_install () { #解压并修改boot包的名称 echo "下面开始安装mysql服务,请耐心等待~~~~~" cd /opt tar -zxf mysql-5.7.17.tar.gz tar -zxf boost_1_59_0.tar.gz -C /usr/local mv /usr/local/boost_1_59_0 /usr/local/boost #安装依赖环境 yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake #指定软件安装的位置 cd /opt/mysql-5.7.17/ cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -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=/usr/local/boost \ -DWITH_SYSTEMD=1 #编译安装 make -j3 && make install #创建一个mysql用户 useradd -s /sbin/nologin mysql #修改mysql程序的归属 chown -R mysql:mysql /usr/local/mysql/ chown mysql:mysql /etc/my.cnf #修改配置文件 echo '[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 auto-rehash [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 bind-address = 0.0.0.0 skip-name-resolve max_connections=2048 default-storage-engine=INNODB max_allowed_packet=16M 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' > /etc/my.cnf #设置环境变量,申明/宣告mysql命令便于系统识别 echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile #初始化数据库 cd /usr/local/mysql/bin/ ./mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data #复制mysql服务程序到启动文件中 cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ #刷新识别 systemctl daemon-reload #开启服务 systemctl start mysqld if [ $? -eq 0 ];then systemctl enable mysqld echo "mysqld服务启动成功" else echo "服务启动失败,请检查mysql用户权限和配置文件" fi } #=============安装PHP服务=========================== php_install () { #安装依赖环境 yum -y install gd \ libjpeg libjpeg-devel \ libpng libpng-devel \ freetype freetype-devel \ libxml2 libxml2-devel \ zlib zlib-devel \ curl curl-devel \ openssl openssl-devel #编译安装 cd /opt tar -zxvf php-7.1.24.tar.gz cd php-7.1.24 ./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 make -j2 && make install #路径优化 ln -s /usr/local/php/bin/* /usr/local/bin/ ln -s /usr/local/php/sbin/* /usr/local/sbin/ #调整主配置文件 cp /opt/php-7.1.24/php.ini-development /usr/local/php/lib/php.ini sed -i -e '1170c mysqli.default_socket = /usr/local/mysql/mysql.sock' -e '939c date.timezone = Asia/Shanghai' /usr/local/php/lib/php.ini #调整进程配置文件 cd /usr/local/php/etc cp php-fpm.conf.default php-fpm.conf sed -i '17s/;//' /usr/local/php/etc/php-fpm.conf #调整扩展配置文件 cd /usr/local/php/etc/php-fpm.d/ cp www.conf.default www.conf #启动php-fpm /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini cd /opt/php-7.1.24/sapi/fpm cp php-fpm.service /usr/lib/systemd/system/php-fpm.service systemctl restart php-fpm #配置nginx支持php解析 sed -i -e '65,71s/#//g' -e '69c fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;' /usr/local/nginx/conf/nginx.conf #重新启动nginx服务 systemctl restart nginx #验证php测试页 echo ' <?php phpinfo(); ?> ' > /usr/local/nginx/html/index.php } #===================创建数据库======================= create_mysql () { #下载免交互软件 yum -y install expect /usr/bin/expect <<-EOF spawn mysql -u root -p expect "password" {send "\r"} expect "mysql>" {send "CREATE DATABASE bbs;\r"} expect "mysql>" {send "GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';\r"} expect "mysql>" {send "GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';\r"} expect "mysql>" {send "flush privileges;\r"} expect "mysql>" {send "exit\r"} EOF #获取本机ip地址 a=ifconfig ens33 |grep "inet "|awk '{print $2}' #替换php页面的内容 echo '<?php $link=mysqli_connect('20.0.0.55','bbsuser','admin123'); if($link) echo "<h1>welcometo ydq!!!!</h1>"; else echo "Fail!!"; ?'> /usr/local/nginx/html/index.php #将本机ip替换文本中的ip sed -i "s/20.0.0.55/$a" /usr/local/nginx/html/index.php } #===========================搭建论坛=============================== luntan () { #安装论坛软件 cd /opt unzip Discuz_X3.4_SC_UTF8.zip -d /opt/dis cd /opt/dis/dir_SC_UTF8/ cp -r upload/ /usr/local/nginx/html/bbs/ #调整论坛目录的权限 cd /usr/local/nginx/html/bbs/ chmod -R 777 ./config/ chmod -R 777 ./data/ chmod -R 777 ./uc_client/ chmod -R 777 ./uc_server/ } #安装环境必须是4G内存,2核以上,运行脚本需要使用source进行执行,所需安装包 #需要放在/opt目录下,脚本可放在任意位置 #=====================main======================= firewalld #关闭防火墙 nginx_install #安装nginx服务 mysql_install #安装mysql服务 php_install #安装PHP服务 create_mysql #创建数据库 luntan #安装论坛