侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

7.34企业级LNMP环境实战

2023-11-21 星期二 / 0 评论 / 0 点赞 / 62 阅读 / 19715 字

几个基本概念PV值(page views):页面的浏览量UV值(unique visitor):独立访客独立IP:独立的IP访问量解决高并发思路如果一个网站的UV、PV,独立IP变大,则会导很高的并发

几个基本概念

  1. PV值(page views):页面的浏览量
  2. UV值(unique visitor):独立访客
  3. 独立IP:独立的IP访问量

解决高并发思路

如果一个网站的UV、PV,独立IP变大,则会导很高的并发,这时要对网站分层布局架构,采用负载均衡。

负载均衡

硬件:立竿见影,效果非常好,价格非常昂贵,比如F5-BIGIP

软件:lvs(linux virtual server) ,nginx(web服务器,负载均衡)

负载均衡实现策略
  1. 轮询, 负载均衡器把请求轮流转发给后面的web服务器。
  2. ip哈希, 同一个地址的客户端,始终请求同一台主机。
  3. 最少连接,负载均衡器把请求给负载最小的哪台服务器。

Nginx的介绍

常用web服务器

Apache:功能完善,历史悠久,模块支持非常丰富,属于重量级产品,比较耗费内存。缺点:处理每一个php比较费资源,导致如果高并发时会耗费服务器资源无法处理更多请求。

lighttpd:内存开销低,cpu占用率低,效能好,模块丰富等特点,轻量级web服务器。

Nginx:省资源,省cpu,所以在高并发时能够处理更多的请求,高端能达到3万到5万的并发量。

选择Nginx理由

  1. 它可以高并发连接,官方测试能够支撑5万并发连接,在实际生产环境中可以支撑2到4万并发连接。
  2. 内存消耗少 Nginx+php(FastCGI)服务器再3万并发连接下,开启的10个Nginx进程消耗150MB内存(15MB10=150MB)开启的64个php-cgi进程消耗1280MB内存(20MB64=1280MB)
  3. 成本低廉 购买F5 BIG-IP ,NetScaler等硬件负载均衡交换机需要10多万甚至几十万人民币。而Nginx为开源软件,可以免费试用,并且可用于商业用途。
  4. 配置文件非常简单:通俗易懂,即使非专业管理员也能看懂。
  5. 支持 rewrite重写规则:能根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组。
  6. 内置的健康检查功能:如果nginx proxy后端的某台服务器宕机了,不会影响前端访问。
  7. 节省带宽,支持gzip压缩。
  8. 稳定性高:用于反向代理,宕机的概率微乎其微。
  9. 支持热部署。在不间断服务的情况下,对软件版本升级。
  10. nginx在反向代理,rewrite规则,稳定性,静态化文件处理,内存消耗等方面,表现出了很强的优势,选用nginx取代传统的apache 服务器,将会获得多方面的性能提升。
  11. 支持的操作系统
FreeBSD 3.x,4.x,5.x,6.x i386; FreeBSD 5.x,6.x amd64;Linux 2.2,2.4,2.6 i386; Linux 2.6 amd64;Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386;MacOS X (10.4) PPC;Windows XP,Windows Server 2003和Windows 7等。

安装Nginx软件

模块依赖性:Nginx的一些模块需要其他第三方库的支持,例如gzip模块需要zlib 库,rewrite模块需要pcre库,ssl功能需要openssl库等。

安装pcre库软件

具体的安装代码:

#解压软件cd /usr/local/src tar zxvf pcre-7.9.tar.gz#进入解压的目录cd pcre-7.9/ #执行配置./configure #执行编译和安装make && make install cd ../ 

安装nginx软件

# 创建www组与www用户 groupadd  www useradd  -g www -s /usr/sbin/nologin   www#解压nginx软件tar -zxvf nginx-1.8.1.tar.gz#进入解压的目录cd nginx-1.8.1#配置./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module#其中参数 --with-http_stub_status_module 是为了启用 nginx 的 NginxStatus 功能,用来监控 Nginx 的当前状态#执行编译和安装make && make install

安装完成后,看到如下4个目录

cd /ulsr/local/nginx, 看到如下4个目录 ... conf  配置文件 ... html  网页文件(网站的根目录,就类似与apache里面htdocs目录) ... logs  日志文件 ... sbin  主要二进制程序

Nginx的启动管理

启动

在nginx安装目录sbin目录下面,直接执行nginx即可

可以通过./nginx –h 查看命令帮助

查看是否启动成功,可以使用netstat –tunpl | grep 80命令

测试配置文件是否正确

/usr/local/nginx/sbin/nginx -t

停止nginx服务

/usr/local/nginx/sbin/nginx –s stop

不停止nginx服务,重新加载配置文件

/usr/local/nginx/sbin/ningx –s reload

配置文件讲解

配置文件介绍

cd nginx/confegrep –v ‘#|^$’  nginx.conf

通过观察,该配置文件有两段

events {}http {    server {	}}

注意:每一行用分号结束,内容与{之间要有空格worker_processes 1; 配置工作进程的个数,推荐设置为cpu的个数*核心数。worker_connections 1024; 配置工作进程的连接数(一个进程的并发量)

虚拟主机的配置

在http段里面的server段就是配置虚拟主机的,http中每一个server段就是一个虚拟主机

打开nginx.conf配置文件

基于端口的虚拟主机

规范优化nginx配置文件

大家如果了解Apache软件,就会知道apache主配置文件包含虚拟主机子文件的方法,这里也借鉴了Apache的这种包含方法,可以把多个虚拟主机配置成一个个单独的配置文件,仅仅和nginx的主配置文件nginx.conf分离开即可。这里使用语法是 include。

案例:配置一个虚拟主机,www.cms.com ,具体的配置分离开nginx.conf文件。

在nginx的安装目录下面,配置文件目录里面(conf目录)下面,新建一个extra目录,该目录用于存储分离的配置文件。

mkdir extra

在extra目录里面, 新建一个cms.conf文件,用于配置www.cms.com虚拟主机。

server{  listen 80;  server_name www.cms.com;  location / {    root cms;    index index.html index.htm;  }}

在nginx.conf配置文件里面,引入cms.conf文件。

include extra/cms.conf;server{  listen 80;  server_name www.abc.com;  location / {    root abc;    index index.html index.htm;  }}

重新加载配置文件

别名配置

所谓虚拟主机别名,就是为虚拟主机设置除了主域名以外的一个或多个域名名字,这样就能实现用户访问的多个域名对应同一个虚拟主机网站的功能。语法:只需在server_name所在行后面添加别名即可。案例:比如我们使用 cms.net cms.com cms.cn 都能访问www.cms.com

日志管理

与nginx日志相关的指令主要有两条,一条是log_format,用来设置日志的格式,另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小。两条指令在nginx配置文件中的位置可以在http{}之间,也可以在虚拟主机之间,即server{}两个大括号之间。

用log_format来设置日志的格式

#log_format   格式名称   格式样式 log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '                   '$status $body_bytes_sent "$http_referer" '                 '"$http_user_agent" "$http_x_forwarded_for"';                 

在日志格式样式中:

$remote_addr和$http_x_forwarded_for用于记录IP地址$remote_user用于记录远程客户端用户名称;$time_local用于记录访问时间与时区;$request用于记录请求URL与HTTP协议;$status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;$body_bytes_sent用于记录发送给客户端的文件主体内容大小;$http_referer用于记录是从哪个页面链接访问过来的;$http_user_agent用于记录客户端浏览器的相关信息。

用access_log指令指定日志文件存放路径

Nginx允许针对不同的server做不同的Log ,(有的web服务器不支持,如lighttp)

access_log    logs/access_8080.log      mylog;   声明log        log位置                   log格式; 

案例:给www.cms.com域名配置日志记录

  • 使用log_format定义日志的格式。在nginx.conf配置文件里面,定义日志的格式。

注意:mylog是格式的名称。

  • 进入extra目录,打开cms.conf子配置文件,使用access_log指令,声明日志文件的存储位置和名称和使用哪种格式来记录

  • 重新加载nginx的配置文件,进行测试,通过测试,发现日志内容如下

$remote_addr和$http_x_forwarded_for都用于记录IP地址,区别是什么?

通过$remote_addr变量拿到的将是反向代理服务器的IP地址。但是,反向代理服务器在转发请求的HTTP头信息中,可以增加 X-Forwarded-For信息,用以记录原有的客户端IP地址和原来客户端请求的服务器地址。这时候,就要用log_format 指令来设置日志格式,让日志记录X-Forwarded-For信息中的IP地址,即客户的真实IP。

编译 php与nginx整合

注意:在nginx中,php是作为独立软件(进程)来运行的,不是作为nginx的一个模块来运行的,独立运行开启的端口是9000,nginx要监听 php的9000端口,当ngxin遇到php文件时,会把这个php的请求转给9000端口的php来处理,nginx本身不能处理php.

独立安装PHP

  • 解压软件 tar -zxvf php-5.3.16.tar.gz

  • 进入到解压的软件目录 cd php-5.3.16

  • 执行如下配置 ./configure --prefix=/usr/local/php --enable-fpm

注意:--enable-fpm:以上是让 php作为独立进程运行。

  • 执行make && make install进行安装 make && make instll

  • 复制php.ini配置文件到指定目录 cp php.ini-development /usr/local/php/lib/

  • php-fpm.conf.default文件改名为php-fpm.conf cp php-fpm.conf.default php-fpm.conf

  • 启动php服务 /usr/local/php/sbin/php-fpm

  • 关闭php服务 killall php-fpm

PHP与Nginx整合

vi /usr/local/nginx/conf/fcgi.conf 并写入如下内容 fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; fastcgi_param  SERVER_SOFTWARE    nginx;   fastcgi_param  QUERY_STRING       $query_string; fastcgi_param  REQUEST_METHOD     $request_method; fastcgi_param  CONTENT_TYPE       $content_type; fastcgi_param  CONTENT_LENGTH     $content_length;   fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; fastcgi_param  SCRIPT_NAME        $fastcgi_script_name; fastcgi_param  REQUEST_URI        $request_uri; fastcgi_param  DOCUMENT_URI       $document_uri; fastcgi_param  DOCUMENT_ROOT      $document_root; fastcgi_param  SERVER_PROTOCOL    $server_protocol;fastcgi_param  REMOTE_ADDR        $remote_addr; fastcgi_param  REMOTE_PORT        $remote_port; fastcgi_param  SERVER_ADDR        $server_addr; fastcgi_param  SERVER_PORT        $server_port; fastcgi_param  SERVER_NAME        $server_name;   # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param  REDIRECT_STATUS    200;

注意:也可以不需要编辑fcgi.conf给文件,可以直接使用自带的fastcgi.conf配置文件。

  • 编辑nginx配置文件(找到server项目设置如下内容)
vim /usr/local/nginx/conf/nginx.conf location ~ .*/.(php|php5)?$ {   fastcgi_pass  127.0.0.1:9000;          #fastcgi(管理PHP),   fastcgi_index index.php;   include fcgi.conf; } 

案例:让www.cms.com运行能够运行php文件

步骤:打开cms.conf配置文件

让Nginx支持TP框架

  • 把TP框架的源码包,拷到新建的tp目录

cp thinkphp_3.2.3_full.zip /usr/local/nginx/tp/

  • 把tp框架的源码包,进行解压

unzip thinkphp_3.2.3_full.zip

  • 修改cms.conf配置文件,配置 成能够支持TP框架

  • 重新加载配置文件,进行测试,报错

  • 以上错误说明:./App/目录不可写,让其可写即可。

    chmod 777 tp -R

负载均衡

负载均衡配置的原理图

实现一个简单的负载均衡

我们使用基于端口的虚拟主机来模拟两台主机,给负载均衡配置的域名为 www.123.com

  • 配置两个基于端口的虚拟主机

    进入到nginx/conf/extra目录,新建一个81.conf和82.conf,两个文件

  • 在nginx目录下面新建一个81 和82的目录,并各自添加index.html文件,为了看到效果,我们让index.html文件的内容不一样

  • 在nginx.conf配置文件里面,添加一个连接池

  • 在nginx.conf配置文件里面,配置一个基于域名的(www.123.com)的虚拟主机

  • 我们在nginx.conf配置文件里面,使用include把81.conf和82.conf引入

  • 重新加载配置文件,进行测试

  • 注意:修改后的代码如下

upstream模块相关说明

server指令:

  • 语法:server name [参数]
  • 使用环境:upstream

该指令用于指定后端服务器的名称和参数。服务器的名称可以是一个域名,-个ip地址,端口号。在后端服务器名称之后,可以跟以下参数:

  • weight=number 设置服务器的权重,权重数值越高,被分配到的客户端请求数越多。如果没有设置权重,则为默认权重为1.

  • max_fails=number 在参数fail_timeout指定的时间内对后端服务器请求失败的次数,如果检测到后端服务器无法连接及发生服务器错误(404错误除外),则标记为失败。如果没有设置,则为默认值1。设为数值0将关闭这项检查。

  • fail_timeout=time(30s)在经历参数max_fails设置的失败次数后,暂停的世界。

  • down 标记服务器为永久离线状态,用于ip_hash指令。

  • backup 仅仅在非backup服务器全部宕机或繁忙的时候,才启用。

nginx在window里面使用

nginx在window里面使用

  • 解压软件,拷贝到指定位置

  • 可以进入到cmd执行,start nginx完成启动

和php的整合

  • 把php软件拷贝过来,便于管理一般和nginx同级目录

  • 把php.ini-develp 改成php.ini配置文件

  • 打开php.ini 配置文件,进行如下配置

    • 修改加载扩展的路径

    • 修改时区(不是必须的)

    • 配置让php独立运行

  • 为了管理php和nginx,我们使用一个批处理工具,主要是拷贝如下3个文件

  • 打开star_nginx.bat文件进行配置

  • 打开nginx.conf配置文件,在虚拟主机里面,开启如下代码

注意:直接双击start_nginx.bat开启nginx 直接双击stop_nginx.bat关闭nginx。

广告 广告

评论区