设为首页 收藏本站
查看: 809|回复: 0

[经验分享] nginx 导读

[复制链接]

尚未签到

发表于 2018-11-14 07:31:04 | 显示全部楼层 |阅读模式
  nginx与apache的异同
  两者都支持一些通用的语言借口,支持正向,反向代理,虚拟主机 rewrite 压缩传输,ssl加密传输,区别最大在于apache
  处理数度狠慢,占用很大的系统资源,
  在fastcgi上nginx支持的非常好,在处理链接上nginx支持epoll
  nginx的优势
  1:对于静态文件,索引文件,以及自动索引效率上nginx非常高
  2:作为代理服务器,nginx可以事先无缓存的反向代理加速
  3:作为负载均衡服务器,nginx可在内部直接支持rails,php,支持http代理服务器,对外服务,支持简单的容错和利用算法进行负载均衡
  4:在稳定性方面,Nginx 采取了分阶段资源分配技术,使得对 CPU 与内存的占用率非常
  低。Nginx 官方表示 Nginx 保持 10 000 个没有活动的连接,这些连接只占 2.5M 内存
  5:高可用方面,Nginx 支持热部署,启动速度特别迅速,因此可以在不间断服务的情
  况下,对软件版本或者配置进行升级,即使运行数月也无需重新启动,几乎可以做到 7×24小时的不间断运行。
  nginx模块的工资原理
  nginx由内核和模块组成,内核的工资非常简单,通过查找配置文件将客户端请求映射到一个 location block中,而location中
  所配置的每个指令将会启动不同的模块
  nginx模块的分类
  结构上分为核心,基础,和第三方,
  1:TTP 模块、EVENT模块和 MAIL 模块等属于核心模块,
  2:HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy模块和 HTTP Rewrite 模块属于基本模块
  3:HTTP Upstream Request Hash 模块、Notice 模块和 HTTP Access Key 模块属于第三方模块,
  用户根据自己的需要开发的模块都属于第三方模块。正是有了这么多模块的支撑,Nginx 的功能才会如此强大。
  nginx的工作方式
  单工作进程:除了主进程外,还有一个工作进程,工作进程为单线程
  多工作进程:每个工作进程包含多个线程,nginx默认为单工作进程
  Nginx 的模块直接被编译进 Nginx,因此属于静态编译方式。启动 Nginx 后,Nginx 的
  模块被自动加载,不像在 Apache 一样,首先将模块编译为一个 so 文件,然后在配置文件中
  指定是否进行加载。在解析配置文件时,Nginx 的每个模块都有可能去处理某个请求,但是
  同一个处理请求只能由一个模块来完成。
  nginx 安装配置
  ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --without-http_rewrite_module
  make
  make install
  id nginx
  groupadd nginx
  useradd -g nginx nginx
  nginx配置文件结构
  Nginx 的配置文件是一个纯文本文件,
  它一般位于 Nginx 安装目录的 conf 目录下,
  整个配置文件是以 block 的形式组织的。每个 block 一般以一个大括号“{}”来表示,block 可以分为几个层次,
  整个配置文件中 Main 指令位于最高层, Main 层下面可以有 Events、在HTTP等层级,
  而在 HTTP 层中又包含有 Server 层, server block,
  即server block 中又可分为 location层,并且一个 server block 中可以包含多个 location block。
  nginx配置文件结构
  主要分为4个部分,main (全局设置);server (主机设置); upstream (负载均衡服务器设置);location(url匹配特定位置设置)
  main部分设置将影响其他所有设置
  server部分主要用于指定主机和端口
  upstream主要用于负载均衡,设置一系列的后端服务器
  location用于匹配网页位置,
  四者的关系,server继承main,location继承server,uostream独立,不会继承其他设置,也不会被继承
  nginx全局配置
  user nobody nobody; #指定nginx运行用户和组,
  worker_processes 4; nginx要开启的进程数,如果是多个cpu,指定和cpu数量一样的进程数
  error_log logs/error.log notice; #定义全局错误日志文件,日志的级别有debug,info,notice,warn,error crit debug最详细,crit最少
  pid
  logs/nginx.pid; #指定进程id的存储文件位置
  worker_rlimit_nofile 65535;用于绑定 worker 进程和 CPU, Linux 内核 2.4 以上可用。
  events{
  use epoll;
  worker_connections
  65536;
  }###events指令是设定 Nginx 的工作模式及连接数上限。
  use 是个事件模块指令,用来指定 Nginx 的工作模式。Nginx 支持的工作模式有 select、
  poll、kqueue、epoll、rtsig 和/dev/poll。其中 select 和 poll 都是标准的工作模式,kqueue 和
  epoll 是高效的工作模式,不同的是 epoll 用在 Linux 平台上,而 kqueue 用在 BSD 系统中。
  对于 Linux 系统,epoll 工作模式是首选。
  worker_connections 也是个事件模块指令,用于定义 Nginx 每个进程的最大连接数,默
  认是 1024.最大客户端连接数由 worker_processes 和 worker_connections 决定,即
  Max_client=worker_processes*worker_connections,在作为反向代理时,max_clients 变为:
  max_clients = worker_processes * worker_connections/4。
  进程的最大连接数受 Linux 系统进程的最大打开文件数限制,在执行操作系统命令
  “ulimit -n 65536”后 worker_connections 的设置才能生效。
  http服务器配置
  http{
  include conf/mime.types; # 主模块指令,减少主配置文件的复杂度,类似apache的include
  default_type application/octet-stream;#http核心模块指令,这里设定默认类型为二进制留,当文件类型未定义时,使用这种方式,如没有php环境,nginx不解析,
  log_format main '$remote_addr - $remote_user [$time_local] '
  '"$request" $status $bytes_sent '
  '"$http_referer" "$http_user_agent" '
  '"$gzip_ratio"';
  log_format download '$remote_addr - $remote_user [$time_local] '
  '"$request" $status $bytes_sent '
  '"$http_referer" "$http_user_agent" '
  '"$http_range" "$sent_http_content_range"';
  #log_format 是nginx的httplog模块指令,用于指定nginx日志的输出格式,main为此日志输出格式的名称,可以在access_log指令中引用
  client_max_body_size 20m; #用来允许客户端请求最大的单个文件字节数
  client_header_buffer_size 32K; #用于指定来自客户端请求的headbuffer大小,对于大多数请求,1K大小已经够了,如果自定义消息头或有更大的Cookie,可以增加缓冲区大小,
  large_client_header_buffers 4 32k; 用来指定客户端请求中较大的消息头缓存最大数量和大小,4为个数,32K为大小,最大为128K
  Sendfile on; #开启高效文件传输模式
  tcp_nopushon;
  tcp_nodelayon;
  设置为on用来防止网络阻塞
  keepalive_timeout 60;#客户端链接保持活动的超时时间,在超时时间后,服务器会关闭该连接
  client_header_timeout 10; #设置客户端请求头读取超过时间,如果超过这个时间,客户端还没有发送任何数据,nginx将返回408错误
  client_body_timeout10;#设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx 将返回“Request time out(408)”错误,默认值是 60。
  send_timeout10; 指定相应客户端的超时时间,这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx将会关闭连接
  httpGzip模块配置
  这个模块支持在线实时压缩输出数据流,查看是否安装此模块使用/your-nginx-path/sbin/nginx -V 查看
  httpGzip相关属性设置
  gzip on; #on,off用于开启或者关闭gzip模块,
  gzip_min_length 1k; #设置允许压缩的页面最大字节数,页面字节数从header头的content-length中获取默认为0,意思不管页面多大都进行压缩,建议设置大于1K
  gzip_buffers 4 16k;表示事情4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始市局大小相同的内存空间来存储gzip压缩结果
  gzip_http_version 1.1; #用于设置识别 HTTP 协议版本,默认是 1.1,目前大部分浏览器已经支持 GZIP 解压,使用默认即可。
  gzip_comp_level 2; 用来指定 GZIP 压缩比, 1压缩比最小,处理速度最快; 压缩比最大,9传输速度快,但处理最慢,也比较消耗 cpu 资源。
  gzip_types text/plain application/x-javascript text/css application/xml;用来指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的。
  gzip_vary on;选项可以让前端的缓存服务器缓存经过 GZIP 压缩的页面,例如用 Squid 缓存经过 Nginx 压缩的数据。
  负载均衡配置
  upstream ixdba.net{  #upstream 是nginx的http upstream模块,这个模块通过一个简单的调度算法来事先客户端ip到后端服务器的负载均衡。
  这里的意思是指定一个负载均衡器的名称ixdba.net,名称可以任意指定,后面需要直接调用
  ip_hash;
  nginx的负载均衡模块没钱支持4中调度算法,后亮相输入第三方调度方法
  1:轮询(默认),每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
  2:weight (指定轮询权值),值越大,分配到的访问几率越高,主要用于后端每个服务器性能不均的情况下
  3:ip_hash,每个请求按访问ip的hash结构分配,这样来自同一个ip的方可固定访问一个后端服务器,有效解决了动态网页存在的session共享问题
  4:fair。比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,
  也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair 的,如果需要使用这种调度算法
  ,必须下载 Nginx 的 upstream_fair 模块。
  5:url_hash ,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率,nginx,本身不支持url_hash,如果需要使用这种调度算法,必须安装nginx的hash软件包
  server 192.168.12.133:80; #
  server 192.168.12.134:80 down;
  #1:down,表示当前的 server 暂时不参与负载均衡。
  #2:backup,预留的备份机器。当其他所有的非 backup 机器出现故障或者忙的时候,才会请求 backup 机器,因此这台机器的压力最轻。
  #3:max_fails,允许请求失败的次数,默认为 1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  #4:fail_timeout,在经历了 max_fails 次失败后,暂停服务的时间。max_fails 可以和fail_timeout 一起使用。
  server 192.168.12.135:8009 max_fails=3
  server 192.168.12.136:8080;
  }
  fail_timeout=20s;
  注意 当负载调度算法为 ip_hash 时,后端服务器在负载均衡调度中的状态不能是
  weight 和 backup。
  server 虚拟主机配置
  建议虚拟主机配置的内容写在另外一个文件中,然后通过include包含进来,
  server{
  listen
  80;
  server_name
  192.168.12.188 www.zhoutao.name;
  index index.html index.htm index.jsp;
  root /tmp;
  charset gb2312;
  access_log logs/tmp/access.log main;
  }
  rul 匹配配置
  URL 地址匹配是进行 Nginx 配置中最灵活的部分。location 支持正则表达式匹配,
  也支持条件判断匹配,
  用户可以通过 location 指令实现 Nginx 对动、
  静态网页进行过滤处理。
  以下这段设置是通过 location 指令来对网页 URL 进行分析处理,所有扩展名
  以.gif、.jpg、.jpeg、.png、.bmp、.swf 结尾的静态文件都交给 nginx 处理,而 expires 用来指
  定静态文件的过期时间,这里是 30 天。
  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
  root
  /web/wwwroot/www.ixdba.net;
  expires 30d;
  }
  #以.gif、.jpg、.jpeg、.png、.bmp、.swf 结尾的静态文件都交给 nginx 处理,而 expires 用来指
  定静态文件的过期时间,这里是 30 天。
  location ~ ^/(upload|html)/ {
  root
  /web/wwwroot/www.ixdba.net;
  expires 30d;
  }
  将 upload 和 html 下的所有文件都交给 nginx 来处理,当然,upload 和
  html 目录包含在/web/wwwroot/www.ixdba.net 目录中
  location ~ .*.jsp$ {
  index index.jsp;
  proxy_pass http://localhost:8080;
  }
  ,location 是对此虚拟主机下动态网页的过滤处理,也就是将所有
  以.jsp 为后缀的文件都交给本机的 8080 端口处理。
  stubstatus模块配置
  stubstatus能够获取nginx上次启动依赖的工作状态,此为非核心模块,需要编译安装时手工指定才能使用
  location /NginxStatus {
  stub_status         on; #启用stubstatus工作状态统计功能
  access_log        logs/NginxStatus.log;#指定stubstatus访问日志文件
  auth_basic        "NginxStatus"; #用来指定认证的密码文件
  auth_basic_user_file    ../htpasswd;
  }
  /usr/local/apache2/bin/htpasswd -c /usr/local/nginx/htpasswd zhoutao
  查看运行状态输入
  http://192.168.3.131/NginxStatus
  Active connections: 1 #当前活跃连接数
  server accepts handled requests
  8 8 31 #
  Reading: 0 Writing: 1 Waiting: 0
  nginx 的启动,停止和平滑重启
  检查nginx配置文件的正确性
  [root@localhost nginx]# sbin/nginx -t
  the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  configuration file /usr/local/nginx/conf/nginx.conf test is successful
  [root@localhost nginx]# sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
  the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  configuration file /usr/local/nginx/conf/nginx.conf test is successful
  -t用于指定nginx配置文件,单不执行 -c指定配置文件路径
  显示nginx的版本以及相关编译信息
  [root@localhost nginx]# sbin/nginx -V
  nginx version: nginx/0.8.46
  TLS SNI support disabled
  configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --without-http_rewrite_module
  nginx启动,关闭,与重启
  nginx通过信号指令控制进程
  QUIT:处理完当前请求后,关闭进程
  HUP:重新加载配置,关闭原有的进程,开启新的工作进程,通过此信号可以平滑的重启nginx
  USR1:用于nginx的日志切换,也就是重新打开一个日志文件,每天要生成一个新的日志文件,可以用这个信号来控制
  USR2:平滑升级可执行的程序
  WINCH,从容关闭工作进程
  nginx关闭
  kill 信号名 pid
  获得pid进程号
  ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'
  或者
  cat /usr/local/nginx/logs/nginx.pid
  nginx平滑重启
  kill -HUP ‘cat /opt/nginx/logs/nginx.pid‘
  #本文是阅读:
  《高性能 Linux 服务器构建实战:运维
  监控、性能调优与集群应用》所记录的读书笔记


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-634730-1-1.html 上篇帖子: nginx统计 下篇帖子: nginx ssi-notepad
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表