西安建网站价格低,软件开发属于技术服务吗,seo主要是指优化,北京市网络科技有限公司Nginx概述
Nginx 是开源、高性能、高可靠、低资源消耗的 Web 和反向代理服务器#xff0c;而且支持热部署#xff0c;几乎可以做到 7 * 24 小时不间断运行#xff0c;即使运行几个月也不需要重新启动#xff0c;还能在不间断服务的情况下对软件版本进行热更新。对HTTP并发…Nginx概述
Nginx 是开源、高性能、高可靠、低资源消耗的 Web 和反向代理服务器而且支持热部署几乎可以做到 7 * 24 小时不间断运行即使运行几个月也不需要重新启动还能在不间断服务的情况下对软件版本进行热更新。对HTTP并发连接的处理能力高单台物理服务器可支持30000~50000个并发请求
Apache是以进程为基础的结构进程要比线程消耗更多的系统开支不太适用于多处理器环境因此在一个apache Web站点扩容时通常是增加服务器或扩充群集节点而不是增加处理器 Nginx和Apache的差异 Apache 创建多个进程或线程而每个进程或线程都会为其分配cpu和内存线程要比进程小的多所以worker支持比perfork高的并发并发过大会榨干服务器资源。
Nginx 采用单线程来异步非阻塞处理请求管理员可以配置Nginx主进程的工作进程的数量不会为每个请求分配cpu和内存资源节省了大量资源同时也减少了大量的CPU的上下文切换。所以才使得Nginx 支持更高的并发
1nginx相对于apache的优点∶
轻量级同样起web服务比apache占用更少的内存及资源抗并发nginx处理请求是异步非阻塞的而apache是阻塞型的在高并发下nginx能保持低资源低消耗高性能高度模块化的设计编写模块相对简支持热部署平滑升级
2apache相对于nginx的优点∶
Rewrite比nginx的rewrite强大 rewrite的主要功能就是实现统一资源定位符URL的跳转模块多基本想到的都可以找到少bug nginx的bug相对较多超稳定Nginx处理动态请求是弱项动态请求要Apache去做。
总结一般来说需要性能的web服务用Nginx. 如果不需要性能只求稳定,那就Apache。Nginx处理动态请求是弱项一般动态请求要Apache去做Nginx只适处理静态网页或反向代理 Nginx的进程
Apache和Nginx的默认端口都是80如果其中一个已经启动了那么再启动另一个会报错。如果想要同时使用可以修改其中一个的端口号
Nginx有两个进程
1master process主进程守护进程用来管理工作进程
2worker process工作进程用来处理用户的请求 编译安装nginx服务
1 关闭防火墙将nginx所需压缩包上传到/opt目录下 [rootzy2 ~]# systemctl stop firewalld[rootzy2 ~]# setenforce 0[rootzy2 ~]# ls /opt/nginx-1.18.0.tar.gz rh
2 安装依赖包
[rootzy2 ~]# yum install -y pcre-devel zlib-devel openssl-devel gcc gcc-c make#各程序作用解释如下gcc #C语言的编译器gcc-c #C的编译器make #源代码编译器源代码转换成二进制文件pcre-devel #perl的接口开发包提供正则表达式zlib-devel #提供压缩功能3 创建运行用户和组便于管理
[rootzy2 ~]# useradd -M -s /sbin/nologin nginx
#创建Nginx程序用户不生成家目录不允许登录系统Nginx服务程序默认nobody身份运行建议为期创建专门的用户账号以便更准确的控制其访问权限
4 解压软件包编译安装nginx [rootzy2 ~]# cd /opt[rootzy2 opt]# lsnginx-1.18.0.tar.gz rh[rootzy2 opt]# tar xf nginx-1.18.0.tar.gz[rootzy2 opt]# lsnginx-1.18.0 nginx-1.18.0.tar.gz rh#切换到源码目录运行configure脚本指定安装路径和安装模块等。[rootzy2 opt]# cd nginx-1.18.0/[rootzy2 nginx-1.18.0]# ./configure \--prefix/usr/local/nginx \ #指定nginx的安装路径--usernginx \ #指定用户名运行用户--groupnginx \ #指定组名--with-http_stub_status_module #启用http_stub_status_module模块以支持状态统计#开2核同时编译之后安装[rootzy2 nginx-1.18.0]# make -j2 make install5 将nginx的操作指令放入环境变量PATH的目录下
[rootzy2 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作指令
6 检查、启动、重启、停止nginx服务
#检查配置文件是否配置正确[rootzy2 ~]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful#启动nginx服务[rootzy2 ~]# nginx
多种方式查看nginx的PID号
logs目录下的文件nginx.pid存放nginx的工作进程号。
nginx有两个进程主进程和工作进程
[rootzy2 ~]# pgrep nginx -l
54266 nginx
55351 nginx
[rootzy2 ~]# cat /usr/local/nginx/logs/nginx.pid
54266
[rootzy2 ~]# netstat -nltp | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 54266/nginx: master
[rootzy2 ~]# ss -nltp | grep nginx
LISTEN 0 128 *:80 *:* users:((nginx,pid55351,fd6),(nginx,pid54266,fd6))
[rootzy2 ~]# lsof -i :80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 54266 root 6u IPv4 142567 0t0 TCP *:http (LISTEN)
nginx 55351 nginx 6u IPv4 142567 0t0 TCP *:http (LISTEN)
停止nginx服务
注意nginx有主进程和工作进程一定要杀死主进程即父进程
[rootzy2 ~]# kill -3 54266 #通过主进程的PID号杀死nginx进程
[rootzy2 ~]# netstat -ntap | grep nginx #此时已查不到进程#杀死nginx进程的多种方式kill -3 PID号 #kill -3杀死进程时可以记录事故现场的信息打印进程各个线程的堆栈信息kill -s QUIT PID号 #-s 指定信号killall -3 nginxkillall -3 QUIT PID号
重载nginx服务
[rootzy2 ~]# nginx #一般用绝对路径启动/usr/local/nginx/sbin/nginx
[rootzy2 ~]# netstat -natp |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 56272/nginx: master
[rootzy2 ~]# cat /usr/local/nginx/logs/nginx.pid
56272
[rootzy2 ~]# kill -1 56272
[rootzy2 ~]# netstat -natp |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 56272/nginx: master #重载nginx服务的多种方式kill -1 PID号kill -s HUP PID号killall -1 nginxkillall -s HUP PID号
日志分割移走原有日志重新打开日志文件kill -USR1 PID号 [rootzy2 ~]# cd /usr/local/nginx/logs #切换到日志目录[rootzy2 logs]# lsaccess.log error.log nginx.pid[rootzy2 logs]# mkdir log.bak[rootzy2 logs]# mv *.log log.bak #将原有日志移走[rootzy2 logs]# lslog.bak nginx.pid[rootzy2 logs]# kill -USR1 56272 #重新生成日志文件[rootzy2 logs]# lsaccess.log error.log log.bak nginx.pid
升级nginx服务 #平滑升级:kill -USR2 PID号#新版本升级#先进入官网下载最新版本的Nginx 然后解压tar xf nginx-1.22.0.tar.gz #1.22.0代表新版本号cd nginx-1.22.0./configure \--prefix/usr/local/nginx \--usernginx \--groupnginx \--with-http_stub_status_module \--with-http_ssl_module#重新编译:make -j2 #注意不要make install此时会在/nginx-1.22.0/objs/生成nginx二进制文件mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old #备份旧文件方便回滚cp objs/nginx /usr/local/nginx/sbin/nginx #将新的运行文件放入安装的运行目录make upgrade #编译升级或者 kill -USR2 cat /usr/local/nginx/logs/nginx.pid#或者先 killall -3 nginx 再 /usr/local/nginx/sbin/nginx 开启新的nginx最后nginx -v 检查nginx版本是否为新版本 添加nginx系统服务通过systemctl 来管理nginx
方法一将nginx命令加入服务编写/lib/systemd/system/nginx.service文件 [rootzy2 ~]# cd /usr/lib/systemd/system/[rootzy2 system]# vim nginx.service[Unit]Descriptionnginx #描述服务Afternetwork.target #表示依赖于network.target启动之后再启动自定义服务[Service]Typeforking #后台运行PIDFile/usr/local/nginx/logs/nginx.pidExecStart/usr/local/nginx/sbin/nginxExecReload/bin/kill -s HUP $MAINPIDExecStop/bin/kill -s QUIT $MAINPIDPrivateTmptrue #表示给服务分配独立的临时空间[Install]WantedBymulti-user.target[rootzy2 system]# systemctl daemon-reload //重载配置[rootzy2 system]# netstat -natp |grep nginxtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 57716/nginx: master [rootzy2 system]# kill -3 57716[rootzy2 system]# netstat -natp |grep nginx[rootzy2 system]# systemctl start nginx[rootzy2 system]# netstat -natp |grep nginxtcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 57899/nginx: master[rootzy2 system]# systemctl stop nginx[rootzy2 system]# netstat -natp |grep nginx#之后可以使用systemctl start|stop|restart|enable nginx 来管理服务
方法二在 /etc/init.d/中创建脚本再用chkconfig加入到chkconfig列表中用service nginx来管理nginx [rootzy2 ~]# vim /etc/init.d/nginx#!/bin/bash#chkconfig: 35 20 99 #35在第三第五个运行级别中开机自动启动 20第二十个启动
99第九十九个关闭 -表示在所有运行级别在不做开机自启动#description:This is nginx control scriptRUN/usr/local/nginx/sbin/nginxPIDcat /usr/local/nginx/logs/nginx.pidcase $1 instart)$RUN;;stop)kill -3 $PID;;restart)kill -3 $PID #或者 $0 stop #$0表示脚本本身 $RUN #$0 start;;reload)kill -1 $PID;;status)if ss -lntp | grep nginx /dev/nullthenecho nginx is running! #注意这里有‘!’,用双引号会被视为取反所以只能用单引号elseecho nginx is not running!fi ;;*)echo 正确用法为$0 {start|stop|restart|reload|status}exit 1 #返回值非0esacexit 0[rootzy2 ~]# chomod x nginx //给nginx赋予权限[rootzy2 ~]# chkconfig --add nginx //将nginx加入chkconfig[rootzy2 ~]# chkconfig --list //查看chkconfig列表[rootzy2 ~]# service nginx start //开启服务或 systemctl start nginx [rootzy2 ~]# ss -natp | grep nginx //查看服务 Nginx服务的主配置文件
主配置文件位置/usr/local/nginx/conf/nginx.conf
/usr/local/nginx/conf/ 目录下nginx.conf 是主配置文件nginx.conf.default 是主配置文件的备份文件
主配置文件中有六个主要模块
1、全局块全局配置对全局生效。
2、events块配置影响Nginx服务器与用户的网络连接。
3、http块配置代理缓存日志定义等绝大多数功能和第三方模块的配置。
4、server块配置虚拟主机的相关参数一个http块中可以有多个server 块。每个 server 块就相当于一个虚拟主机。。
5、location块用于配置匹配的url一个server块中可以有多个location块。
6、upstream配置后端服务器具体地址负载均衡配置不可或缺的部分 全局块全局配置
就是配置文件从头开始到 events 块之间的内容主要设置的是影响nginx服务器整体运行的配置指令。比如 worker_process值越大可以支持的并发处理量也越多但是还是和服务器的硬件相关。
vim /usr/local/nginx/conf/nginx.conf #user nobody; //运行用户若编译时未指定则默认为nobody若编译指定了用户则会写到二进制程序里变成默认配置。此前编译时指定了--usernginx所以现在二进制程序中的运行用户为nginxworker_processes 1; //工作进程数量一般设置为和CPU核数一样所以也可以设置为auto让nginx自动根据cpu数量进行设置#error_log logs/error.log; //错误日志文件的位置#pid logs/nginx.pid; //PID文件的位置events块 I/O 事件配置
events 块涉及的指令主要影响 Nginx 服务器与用户的网络连接常用的设置包括是否开启对多 work process 下的网络连接进行序列化是否允许同时接收多个网络连接选取哪种事件驱动模型来处理连接请求每个 work process 可以同时支持的最大连接数等。 events {use epoll; //使用epoll模型。2.6及以上版本的系统内核建议使用epo11模型以提高性能实现I/O多路复用,异步非阻塞worker_connections 4096; //每个工作进程处理4096个连接。默认值为1024。一般设置为2的次方}#如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大
文件数。
#在Linux平台上在进行高并发TCP连接处理时最高的并发数量都要受到系统对用户单一进程同时可打
开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄每个socket句柄同时也是个
文件句柄)。
#可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制
#epoll是Linux内核为处理大批句柄而作改进的poll是Linux下多路复用IO接口select/poll的增强
版本它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 查看Nginx支持的最大并发量软件支持、系统支持、CPU性能
1.软件配置支持多少并发量由主配置文件nginx.conf决定理论上支持的并发量工作进程数量×每个工作进程处理的连接数
2.系统会限制本地每个用户进程可以同时打开的最大文件数量默认连接数最大1024即系统会限制每个进程的连接数
使用ulimit -a或 ulimit -n可查看系统允许当前用户进程打开的文件数限制
“ulimit -n 最大文件数”命令可临时修改本地每个用户进程可以同时打开的最大文件数。vim /etc/security/limits.conf编辑该文件可永久修改 修改完需要重启系统
注#第一列为用户和组 #第二列为磁盘限额软硬限制。hard表示硬限制。 #第三列为项目。nofile表示最大可打开文件数量。 #第四列为相应项目的数量
3.实际工作中还要进行压测测试CPU性能能否支持这个最大并发量 http块HTTP 配置
http块包括 http 全局块以及多个 server 块。
http {##文件扩展名与文件类型映射表include mime.types;##默认文件类型default_type application/octet-stream;##日志格式设定#log_format main $remote_addr - $remote_user [$time_local] $request # $status $body_bytes_sent $http_referer# $http_user_agent S$http_x_forwarded_for ;##访问日志位置#access_log logs/access.1og main;##开启文件传输模式sendfile on;##减少网络报文段的数量#tcp_nopush on;##连接保持超时时间单位是秒#keepalive_timeout 0;keepalive_timeout 65;##gzip模块设置设置是否开启gzip压缩输出#gzip on;##Web服务的监听配置server {##监听地址及端口listen 80;##站点域名可以有多个用空格隔开server_name www.yuji.com;##网页的默认字符集charset utf-8;##根目录配置location / {##网站根目录的位置/usr/1ocal/nginx/htmlroot html ;##默认首页文件名index index.html index.php;}##内部错误的反馈页面error_page 500 502 503 504 /50x.html;##错误页面配置location /50x.html {root html ;}}}
日志格式设定: $remote_addr与$http_x_forwarded_for 用以记录客户端的ip地址。 $remote_addr记录上一个请求消息发送端的IP代理服务器的IP。 $http_x_forwarded_for 会记录所有经过的服务器的IP地址。 $remote_user用来记录客户端用户名称。 $time_local用来记录访问时间与时区。 $request用来记录请求的url与http协议。 $status用来记录请求状态;成功是200。 $body_bytes_sent记录发送给客户端文件主体内容大小。 $http_referer用来记录从哪个页面链接访问过来的。 $http_user_agent: 记录客户浏览器的相关信息。 通常web服务器放在反向代理的后面这样就不能获取到客户的IP地址了通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中可以增加x_forwarded_for信息用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。 访问状态统计配置
1.查看nginx的安装模块是否包含 HTTP_STUB_STATUS 模块
先使用命令 /usr/local/nginx/sbin/nginx -V 查看已安装的nginx是否包含 HTTP_STUB_STATUS 模块 nginx -v #查看nginx的版本。此前已将nginx的可执行文件放入PATH的目录中所以可以直接使用nginx命令nginx -V #查看nginx的版本以及编译安装时的配置参数cat /opt/nginx-1.12.0/auto/options #查看nginx已安装和未安装的模块with表示已安装without表示未安装cat /opt/nginx-1.12.0/auto/options | grep YES #查看nginx已安装的所有模块查看 HTTP_STUB_STATUS 模块是否已安装cat /opt/nginx-1.12.2/auto/options | grep HTTP_STUB_STATUS
2.修改 nginx.conf 配置文件指定访问位置并添加 stub_status 配置 [rootzy2 ~]# cd /usr/local/nginx/conf[rootzy2 conf]# cp nginx.conf nginx.conf.bak //备份原配置文件[rootzy2 conf]# vim nginx.conf //编辑配置文件..........http {..........server {listen 80;server_name www.kgc.com;charset utf-8;location / {root html;index index.html index.php;}##添加 stub_status 配置location / status { #访问位置为/statusstub_status on; #打开状态统计功能 access_log off; #关闭此位置的日志记录}}}
3. 重启服务访问测试 [rootzy2 conf]# nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful[rootzy2 conf]# systemctl restart nginx
浏览器访问192.168.126.22/status