LNMP环境部署
- 软件规划
件 版本 Nginx Nginx 1.16.1 MySQL MySQL 5.7.28 PHP PHP 7.0.33
- 系统规划
操作系统:CentOS Linux release 7.3.1611
主机 IP地址 node07.host.com 172.24.248.19 node08.host.com 172.24.248.20 node09.host.com 172.24.248.21
WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。
Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括Yandex、Mail.Ru、VKontakte,以及Rambler。据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48%使用Nginx作为其服务器或者代理服务器。目前互联网主流公司360、百度、新浪、腾讯、阿里等,目前中国互联网企业70%以上公司都在使用nginx作为自己的web服务器。
Nginx特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
Nginx相对于Apache优点
:1) 高并发响应性能非常好,官方Nginx处理静态文件并发5w/s 2) 反向代理性能非常强。(可用于负载均衡) 3) 内存和cpu占用率低。(为Apache的1/5-1/10) 4) 对后端服务有健康检查功能。 5) 支持PHP cgi方式和fastcgi方式。 6) 配置代码简洁且容易上手。
Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作.
Nginx的模块从结构上分为核心模块、基础模块和第三方模块
:核心模块:HTTP模块、EVENT模块和MAIL模块 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块, 第三方模块:HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。 Nginx的高并发得益于其采用了epoll模型,与传统的服务器程序架构不同,epoll是linux内核2.6以后才出现的。Nginx采用epoll模型,异步非阻塞,而Apache采用的是select模型: Select特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。 epoll的特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高
- 环境依赖
[[email protected] ~]# yum -y install vim lrzsz tree screen psmisc lsof tcpdump wget ntpdate gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel net-tools iotop bc zip unzip zlib-devel bash-comletion nfs-utils automake libxml2 libxml2-devel libxslt libxslt-devel perl perl-ExtUtils-Embed gd-devel GeoIP GeoIP-devel GeoIP-data
- 编译安装nginx
[[email protected] /usr/local/src]# tar xf nginx-1.16.1.tar.gz [[email protected] /usr/local/src]# useradd nginx -s /sbin/nologin -u 2000 [[email protected] /usr/local/src]# cd nginx-1.16.1 [[email protected] /usr/local/src/nginx-1.16.1]# cat src/core/nginx.h |grep NGINX_VER #define NGINX_VERSION "1.16.1" define NGINX_VER "nginx/" NGINX_VERSION #开启server_tokens显示此信息 [[email protected] /usr/local/src/nginx-1.16.1]# cat src/http/ngx_http_header_filter_module.c |grep "NGINX_VER_BUILD" static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF; #关闭server_tokens显示此信息 [[email protected] /usr/local/src/nginx-1.16.1]# [[email protected] /usr/local/src/nginx-1.16.1]# ./configure --prefix=/apps/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_image_filter_module --with-http_geoip_module --with-http_gunzip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module [[email protected] /usr/local/src/nginx-1.16.1]# make && make install
- 配置nginx,自定义json日志,error页面,并启动nginx
[[email protected] /apps/nginx/conf]# egrep -v "#|^$" nginx.conf user nginx; worker_processes 2; worker_cpu_affinity 01 10; error_log /apps/nginx/logs/error.log error; pid /apps/nginx/logs/nginx.pid; worker_priority 0; worker_rlimit_nofile 65536; events { worker_connections 65536; use epoll; accept_mutex on; multi_accept on; } http { include mime.types; default_type application/octet-stream; log_format access_json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"size":$body_bytes_sent,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamhost":"$upstream_addr",' '"http_host":"$host",' '"uri":"$uri",' '"domain":"$host",' '"xff":"$http_x_forwarded_for",' '"referer":"$http_referer",' '"tcp_xff":"$proxy_protocol_addr",' '"http_user_agent":"$http_user_agent",' '"status":"$status"}'; access_log /apps/nginx/logs/access_json.log access_json; sendfile on; keepalive_timeout 65 65; server_tokens off; server { listen 80; server_name localhost; charset utf-8; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } include /apps/nginx/conf/conf.d/*.conf; } [[email protected] /apps/nginx/conf]# [[email protected] /apps/nginx]# cd html/ [[email protected] /apps/nginx/html]# echo "access page error" > error.html [[email protected] /apps/nginx/html]# chown nginx.nginx -R /apps/nginx/ # 查看版本以及编译参数 [[email protected] ~]# /apps/nginx/sbin/nginx -V nginx version: nginx/1.16.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.0.2k-fips 26 Jan 2017 TLS SNI support enabled configure arguments: --prefix=/apps/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_image_filter_module --with-http_geoip_module --with-http_gunzip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module # 检查nginx配置语法是否正确 [[email protected] ~]# /apps/nginx/sbin/nginx -t nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful [[email protected] ~]# # 启动nginx [[email protected] ~]# /apps/nginx/sbin/nginx
- 页面验证nginx
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gk6DeCFP-1612149734988)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210126173130434.png)]
- 二进制安装mysql
[[email protected] ~]# tar xf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz [[email protected] ~]# ln -sv /usr/local/mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql-5.6.36 "/usr/local/mysql-5.6.36" -> "/usr/local/mysql-5.6.36-linux-glibc2.5-x86_64" [[email protected] ~]# useradd mysql -s /sbin/nologin [[email protected] ~]# mkdir -pv /opt/mysql /var/lib/mysql mkdir: 已创建目录 "/opt/mysql" [[email protected] ~]# chown -R mysql.mysql /opt/mysql /var/lib/mysql -R
- 初始化数据库
[[email protected] ~]# /usr/local/mysql-5.6.36/scripts/mysql_install_db --user=mysql --datadir=/opt/mysql --basedir=/usr/local/mysql-5.6.36 [[email protected] ~]# cp /usr/local/mysql-5.6.36/support-files/mysql.server /etc/init.d/mysqld [[email protected] ~]# chmod a+x /etc/init.d/mysqld
- 配置文件
[[email protected] /usr/local/mysql-5.6.36]# cat my.cnf [mysqld] basedir = /usr/loca/mysql datadir = /opt/mysql port = 3306 # server_id = ..... socket = /opt/mysql/mysql.sock user=mysql symbolic-links=0 innodb_file_per_table=1 max_connections=10000 [client] port=3306 socket = /var/lib/mysql/mysql.sock [mysqld_safe] log-error=/usr/local/mysql/log/mysqld.log pid-file=/tmp/mysql.sock [[email protected] /usr/local/mysql-5.6.36]# [[email protected] /usr/local/mysql-5.6.36/log]# touch mysqld.log [[email protected] /usr/local/mysql-5.6.36]# ./mysql.server start Starting MySQL..... SUCCESS!
- 软件环境依赖
[[email protected] ~]# yum -y install pcre pcre-devel openssl openssl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison libevent automake libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel openjpeg bzip2 bzip2-devel
- 解压安装
[[email protected] /usr/local/src]# wget https://museum.php.net/php7/php-7.2.15.tar.gz [[email protected] /usr/local/src]# tar xf php-7.2.15.tar.gz [[email protected] /usr/local/src]# cd php-7.2.15 [[email protected] /usr/local/src/php-7.2.15]# ./configure --prefix=/apps/php-7.2.15 --with-config-file-path=/apps/php-7.2.15/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-pear --with-curl --with-png-dir --with-freetype-dir --with-iconv --with-mhash --with-zlib --with-xmlrpc --with-xsl --with-openssl --with-mysqli --with-pdo-mysql --disable-debug --enable-zip --enable-sockets --enable-soap --enable-inline-optimization --enable-xml --enable-ftp --enable-exif --enable-wddx --enable-bcmath --enable-calendar --enable-shmop --enable-dba --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-libxml --with-gd --with-jpeg-dir --with-bz2 --with-mcrypt --enable-gd-native-ttf --enable-fastcgi --enable-pdo --enable-mbstring --enable-exif --enable-opcache --enable-mbregex --enable-pcntl --with-gettext --enable-session --enable-ctype --enable-dom --with-libdir=lib64 --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --disable-fileinfo [[email protected] /usr/local/src/php-7.2.15]# make && make install
- 生成配置文件
[[email protected] ~]# cd /apps/php-7.2.15/etc/php-fpm.d/ [[email protected] /apps/php-7.2.15/etc/php-fpm.d]# cp www.conf.default www.conf [[email protected] /apps/php-7.2.15/etc/php-fpm.d]# cp /usr/local/src/php-7.2.15/php.ini-production /apps/php-7.2.15/etc/php.ini [[email protected] /apps/php-7.2.15/etc/php-fpm.d]# useradd www -s /sbin/nologin -u 1001 [[email protected] /apps/php-7.2.15/etc/php-fpm.d]# cat www.conf [www] user = www group = www listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 50 pm.start_servers = 30 pm.min_spare_servers = 30 pm.max_spare_servers = 35 pm.status_path = /status ping.path = /ping ping.response = pong access.log = log/$pool.access.log slowlog = log/$pool.log.slow [[email protected] /apps/php-7.2.15/etc/php-fpm.d]# [[email protected] /apps/php-7.2.15/etc]# mkdir /apps/php-7.2.15/log [[email protected] /apps/php-7.2.15/etc]# cp php-fpm.conf.default php-fpm.conf [[email protected] /apps/php-7.2.15/etc]#
- 启动并验证php-fpm
[[email protected] ~]# /apps/php-7.2.15/sbin/php-fpm -t [29-Jan-2021 13:59:28] NOTICE: configuration file /apps/php-7.2.15/etc/php-fpm.conf test is successful # 验证php-fpm [[email protected] ~]# /apps/php-7.2.15/sbin/php-fpm -c /apps/php-7.2.15/etc/php.ini [[email protected] ~]# netstat -lntp |grep 9000 tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1630/php-fpm: maste
- 准备测试页
[[email protected] ~]# cat /apps/nginx/html/index.php <?php phpinfo(); ?> [[email protected] ~]#
- 整合php
[[email protected] ~]# cat /apps/nginx/conf/nginx.conf|egrep -v "#|^$" user nginx; worker_processes 2; worker_cpu_affinity 01 10; error_log /apps/nginx/logs/error.log error; pid /apps/nginx/logs/nginx.pid; worker_priority 0; worker_rlimit_nofile 65536; events { worker_connections 65536; use epoll; accept_mutex on; multi_accept on; } http { include mime.types; default_type application/octet-stream; log_format access_json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"size":$body_bytes_sent,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamhost":"$upstream_addr",' '"http_host":"$host",' '"uri":"$uri",' '"domain":"$host",' '"xff":"$http_x_forwarded_for",' '"referer":"$http_referer",' '"tcp_xff":"$proxy_protocol_addr",' '"http_user_agent":"$http_user_agent",' '"status":"$status"}'; access_log /apps/nginx/logs/access_json.log access_json; sendfile on; keepalive_timeout 65 65; server_tokens off; server { listen 80; server_name localhost; charset utf-8; location / { root html; index index.php index.html index.htm; if ($http_user_agent ~ "ApacheBench|WebBench|TurnitinBot|Sogou web spider|Grid service"){ return 403; } } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } include /apps/nginx/conf/conf.d/*.conf; } [[email protected] ~]#
- 重启nginx,验证php
[[email protected] ~]# /apps/nginx/sbin/nginx -t nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok nginx: configuration file /apps/nginx/conf/nginx.conf test is successful [[email protected] ~]# /apps/nginx/sbin/nginx -s reload
- 修改配置文件,在配置文件增加虚拟主机,配置参数和虚拟主机一旦很多,很容易很长,采用多配置分开的模式如在nginx.conf http模块中引用
[[email protected] ~]# cd /apps/nginx/conf/ include /apps/nginx/conf/conf.d/*.conf;
- 增加虚拟主机访问节点配置
[[email protected] /apps/nginx/conf]# mkdir conf.d [[email protected] /apps/nginx/conf/conf.d]# cat pc.conf server { listen 80; server_name 172.24.248.20; location / { root /data/nginx/html/pc; index index.html; } location /images { root /data/nginx/images; index index.html; } error_page 500 502 503 504 404 /error.html; location = /error.html{ root html; } } [[email protected] /apps/nginx/conf/conf.d]# [[email protected] /data/nginx]# cat /data/nginx/images/index.html images [[email protected] /data/nginx]# cat /data/nginx/html/pc/index.html pc web [[email protected] /data/nginx]# curl 172.24.248.20 pc web [[email protected] /data/nginx]# curl 172.24.248.20/images images png
总结:
LNMP整体安装相对比较简单,而源码安装需要提前准备好源码包以及环境依赖。另外环境安装可以不需要过多去关注,更多的则是配置方面,因为安装好之后就不会在去处理,当然安装的方式分可选择自动化运维工具一键安装,也可以使用脚本一键安装。
文章浏览阅读5.8k次。在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理。今天我们的大数据入门分享,就主要来讲讲,Hive应用场景。关于Hive,首先需要明确的一点就是,Hive并非数据库,Hive所提供的数据存储、查询和分析功能,本质上来说,并非传统数据库所提供的存储、查询、分析功能。Hive..._hive应用场景
文章浏览阅读496次。Zblog是由Zblog开发团队开发的一款小巧而强大的基于Asp和PHP平台的开源程序,但是插件市场上的Zblog采集插件,没有一款能打的,要么就是没有SEO文章内容处理,要么就是功能单一。很少有适合SEO站长的Zblog采集。人们都知道Zblog采集接口都是对Zblog采集不熟悉的人做的,很多人采取模拟登陆的方法进行发布文章,也有很多人直接操作数据库发布文章,然而这些都或多或少的产生各种问题,发布速度慢、文章内容未经严格过滤,导致安全性问题、不能发Tag、不能自动创建分类等。但是使用Zblog采._zblog 网页采集插件
文章浏览阅读2.4k次,点赞2次,收藏2次。restUI页面提交1.1 添加上传jar包1.2 提交任务job1.3 查看提交的任务2. 命令行提交./flink-1.9.3/bin/flink run -c com.qu.wc.StreamWordCount -p 2 FlinkTutorial-1.0-SNAPSHOT.jar3. 命令行查看正在运行的job./flink-1.9.3/bin/flink list4. 命令行查看所有job./flink-1.9.3/bin/flink list --all._flink定时运行job
文章浏览阅读1k次,点赞2次,收藏6次。这个项目是基于STM32的LED闪烁项目,主要目的是让学习者熟悉STM32的基本操作和编程方法。在这个项目中,我们将使用STM32作为控制器,通过对GPIO口的控制实现LED灯的闪烁。这个STM32 LED闪烁的项目是一个非常简单的入门项目,但它可以帮助学习者熟悉STM32的编程方法和GPIO口的使用。在这个项目中,我们通过对GPIO口的控制实现了LED灯的闪烁。LED闪烁是STM32入门课程的基础操作之一,它旨在教学生如何使用STM32开发板控制LED灯的闪烁。_嵌入式stm32闪烁led实验总结
文章浏览阅读63次。本文介绍了安装和部署Debezium的详细步骤,并演示了如何将Debezium服务托管到systemctl以进行方便的管理。本文将详细介绍如何安装和部署Debezium,并将其服务托管到systemctl。解压缩后,将得到一个名为"debezium"的目录,其中包含Debezium的二进制文件和其他必要的资源。注意替换"ExecStart"中的"/path/to/debezium"为实际的Debezium目录路径。接下来,需要下载Debezium的压缩包,并将其解压到所需的目录。
文章浏览阅读4.4k次。需求:在诗词曲文项目中,诗词整篇朗读的时候,文章没有读完会因为屏幕熄灭停止朗读。要求:在文章没有朗读完毕之前屏幕常亮,读完以后屏幕常亮关闭;1.权限配置:设置电源管理的权限。
文章浏览阅读2.3k次。目标检测简介、评估标准、经典算法_目标检测
文章浏览阅读6.3k次,点赞4次,收藏9次。实训时需要安装SQL server2008 R所以我上网上找了一个.exe 的安装包链接:https://pan.baidu.com/s/1_FkhB8XJy3Js_rFADhdtmA提取码:ztki注:解压后1.04G安装时Microsoft需下载.NET,更新安装后会自动安装如下:点击第一个傻瓜式安装,唯一注意的是在修改路径的时候如下不可修改:到安装实例的时候就可以修改啦数据..._sqlserver 127 0 01 无法连接
文章浏览阅读7.4k次。1. Object.keys(item); 获取到了key之后就可以遍历的时候直接使用这个进行遍历所有的key跟valuevar infoItem={ name:'xiaowu', age:'18',}//的出来的keys就是[name,age]var keys=Object.keys(infoItem);2. 通常用于以下实力中 <div *ngFor="let item of keys"> <div>{{item}}.._js 遍历对象的key
文章浏览阅读2.2w次,点赞51次,收藏310次。粒子群算法求解路径规划路径规划问题描述 给定环境信息,如果该环境内有障碍物,寻求起始点到目标点的最短路径, 并且路径不能与障碍物相交,如图 1.1.1 所示。1.2 粒子群算法求解1.2.1 求解思路 粒子群优化算法(PSO),粒子群中的每一个粒子都代表一个问题的可能解, 通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。 在路径规划中,我们将每一条路径规划为一个粒子,每个粒子群群有 n 个粒 子,即有 n 条路径,同时,每个粒子又有 m 个染色体,即中间过渡点的_粒子群算法路径规划
文章浏览阅读353次。所谓稳健的评估指标,是指在评估的过程中数据的轻微变化并不会显著的影响一个统计指标。而不稳健的评估指标则相反,在对交易系统进行回测时,参数值的轻微变化会带来不稳健指标的大幅变化。对于不稳健的评估指标,任何对数据有影响的因素都会对测试结果产生过大的影响,这很容易导致数据过拟合。_rar 海龟
文章浏览阅读607次,点赞2次,收藏7次。–基于STM32F103ZET6的UART通讯实现一、什么是IAP,为什么要IAPIAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给_value line devices connectivity line devices