814247614 发表于 2018-11-9 12:27:00

nginx 安装、配置及优化讲解

  最近总是有朋友问我nginx方面的问题,其实我nginx在现在的公司就是做做安装,创建虚拟主机,做做优化,有时候对于朋友问我的问题,我也无能为力,感觉自己超没面子,没办法只能自己恶补恶补下nginx的理论知识了,像我这样的人理论真心的很差啊,面试很吃亏啊,哈哈哈哈,所以我决定以后好好看看平时用到的东西的理论知识。
  下面就给大家,说说我对nginx理解,多多给于意见,谢谢:
  nginx 特性:
  1. nginx是模块化设计的,有较好的扩展性;
  2. 高可靠性
  master/worker 的设计模式
  加载并分析配置文件是由master来实现的
  worker是nginx响应客户请求的
  在nginx中master进程只能有一个,但是worker进程可以根据cpu来调整
  3. 支持热部署
  不停机(不停止服务)更新配置文件,更换日志文件,更新服务器程序版本,在服务不停机的情况下将老版本更新成新版本是完全没有问题的可以称之为平滑升级;
  4. 低内存消耗
  例如:10000个keep-alive的连接模式下的非活动连接,仅消耗2.5M内存
  5. 支持event-driven,aio,mmap等较新型的IO技术
  nginx的基本功能:
  1. 首先大家要知道,nginx是一个静态资源的web服务器,它自身只能接受http请求并返回;
  2. 可以做http协议的反向代理服务;
  3. 同时nginx还是pop3,smtp,imap4等邮件服务的反向代理,这个很少用到,反正我是没有用到过
  4. 能缓存打开的文件(仅限于元数据)、支持FastCHI(和php-fpm交互)等协议
  5. 模块化(非DSO机制的),过滤器zip,ssi,ssl;
  web服务相关的功能:
  1. 虚拟主机(server),做过apache的人知道,apache有一个虚拟主机的功能,可以根据不同的端口,主机名,域名来实现,同样nginx也有这个功能
  2. keepalive,长链接,多数和keepalive软件相结合来实现的,多用于负载均衡
  5. 路径别名,可以在配置文件来使用alias来设置路径访问别名
  6. 基于IP及用户的访控制
  7. 支持速率限制及并发数控制等等,在优化的时候会修改这两项配置
  还有许多,就不在这里一一介绍了
  ...
  nginx 的基本架构:
  1. master/worker模型
  一个master进程,可生成一个或者多个worker进程;
  通过nginx事件驱动来响应用户请求,例如:epoll,/dev/poll
  消息通知功能:select,poll
  支持sendfile,sendfile64
  支持AIO,mmap
  master:加载配置文件,管理worker进程、平滑升级
  worker:http服务,http代理
  模块类型:
  1. 核心模块:core,module标准的
  2. Standard HTTP modules   标准的
  3. Optional HTTP modules   可选的,编译的时候可选择加不加入编译
  4. Mail modules            可选的,编译的时候可选择加不加入编译
  5. 3rd party modules       可选的,编译的时候可选择加不加入编译
  用来做什么?
  1. 静态资源服务器
  一般结合apache来使用,因为nginx只能处理静态资源,配合apache的话,动态访问apache静态访问nginx,更加有效的提高了访问速度;
  2. HTTP服务器的反向代理
  下面来简单说下源码安装nginx吧
  nginx 安装配置
  1. nginx在redhat是没有被收录进官方的发行版本的,所以要epl源来安装,前提是能连接互联网,直接在nginx.org官网中就有epl的yum仓库源
  2. nginx有三种版本
  nginx stable   稳定版本
  稳定版本是nginx官方不断的修改bug的版本
  nginx mainline   主线版本 不建议在生产上使用
  主线版本是nginx官方不断在添加新功能,知道确定稳定好才会发行的
  次版本号为偶数的, 多为传统版本
  3. 编译安装nginx
  1). yum -y groupinstall "Development Tools" "Server Platform Development"
  2). nginx源码包安装一般依赖于以下几个组件(必须保证这三个报的开发包是安装好的)
  PCRE library   主要是在url重新的时候支持poll扩展字符设定的
  zlib library   传输压缩的
  openssl
  yum -y install openssl-devel pcre-devel zlib-devel
  3). 源码包解压出来后文件介绍
  *重点
  *core   核心模块
  *event事件驱动模块
  *http   web服务模块
  mail   邮件模块
  misc   不变规则的杂项
  os   系统本身相关的专用代码
  4) ./configure --help   查询帮助
  一定要使用普通用户来运维worker进程
  ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-debug
  --conf-path=/etc/nginx/nginx.conf   指明配置文件
  --user=nginx                        指明用户
  --group=nginx                     用户所在组
  --error-log-path=/var/log/nginx/error.log错误日志
  --http-log=/var/log/nginx/access.log访问日志
  --pid-path=/var/run/nginx/nginx.pid   pid文件
  --lock-path=/var/lock/nginx.lock      lock文件
  --with-http_ssl_module                默认没有启用,需要起来
  --with-http_stub_status_module      启动状态页面
  --with-http_gzip_static_module      支持gzip压缩
  --with-debug          有必要的话,启用debug
  编译完成后一定要确认epoll这个模块是被编译进去的,默认就在编译列表中的,要是没有编译成功为有大问题
  5) .make && make install
  4. 启动nginx服务
  1). /usr/local/nginx/sbin/nginx -t 测试语法
  2). /usr/local/nginx/sbin/nginx   启动nginx服务
  3). /usr/local/nginx/sbin/nginx -s stop 平滑关闭服务
  下面来简单说下nginx配置文件吧
  nginx.conf配置文件参数介绍:
  main配置段:
  1. worker_connections #;
  每个worker进程所能够响应的对打的并发请求数量;
  worker_processes * worker_connections
  请求的最大数
  2. use
  定义使用的事件模型,建议让nginx自动选择
  3. accept_mutex
  各worker接受用户的请求的负载均衡锁;启用时,表示用于让多个worker轮流序列化的响应新请求
  4. lock_file /PATH/TO/LOCK_FILE;
  event{
  ...
  }
  http{
  ...
  1. server{}
  定义一个虚拟主机
  ---基于端口,ss -tnl ---
  server{
  listen POST;
  server_name www.b.com;
  root /PATH/TO/DOCUMENTROOT
  }
  ---基于主机名,ss -tnl ---
  server{
  listen POST;
  server_name www.a.com;
  root /PATH/TO/DOCUMENTROOT
  }
  2. listen指令
  listen address:
  listen post
  default_server: 默认虚拟主机,若是没有定义的话,就选择第一个虚拟主机来作为默认的虚拟主机
  ssl:用于限制只能通过ssl连接提供服务
  http2: http version 2;
  3. server_name NAME[....];
  server_name可以跟一个或者多个,还可以使用通配符和正则表达式,但是两者要分开使用
  (1). 首先做精确匹配 :www.lanyulei.com;
  (2). 左侧通配符 *.lanyulei.com;
  (3). 右侧统配符 www.lanyulei.*
  (4). 正则表达式 !\^\$
  (5). default_server
  4. tcp_nodelay on|off;
  在keepalive模式下的连接是否使用TCP_NODELAY;推荐不使用
  5. tcp_nopush on|off
  6. alias
  定义路径别名的,只能用于location中
  7. index
  index file...;
  8. error_page code .. url;
  根据http的状态码重定向错误页面
  error_page 404 404.html
  9. try_file ... ... ... ...;
  设置多个主页
  客户端请求相关的配置
  10. keepalive_timeout默认是75秒
  设定keepalive连接的超时时长;0表示禁止长连接
  11. keepalive_requests number;
  在keepalive连接上所允许请求的最大资源数量:默认是100个
  12.keepalive_disable
  指明禁止何种浏览器使用keepalive功能
  13. send_timeout 默认是60秒
  当服务器发送给客户端请求的资源的时候客户端没有任何响应,就在设置的超时时间
  }

页: [1]
查看完整版本: nginx 安装、配置及优化讲解