Better

Ethan的博客,欢迎访问交流

Nginx深入学习系列-入门篇

nginx在代理服务器中扮演着十分重要的位置,目前从事前端工作的我,使用的比较少,但是一直觉得这是一个利器,因此准备深入学习下,本篇是开篇-入门篇,主要介绍是什么,为什么以及一些基本知识。

是什么

nginx:开源且高效可靠的代理服务器、HTTP中间件

  • nginx常用配置场景
    • 代理服务
    • 动态缓存
    • 动静分离
    • 负载均衡
    • ...
  • 应用层安全防护
    • sql注入攻击
    • 请求访问控制
    • 请求频率控制
    • 防爬虫
  • 中间件架构性能优化
    • http性能压测
    • 性能瓶颈分析
    • 系统性能优化
    • 基于nginx性能配置优化

为什么

为什么选择nginx

  • IO多路复用epoll
  • 轻量级
    • 功能模块少:源代码仅保留核心代码,支持插件式安装的不会集成在源代码中
    • 代码模块化
  • CPU亲和(affinity):是一种把CPU核心和Nginx工作进程绑定方式,把每个worker进程固定在一个CPU上执行,减少切换cpu的cache miss,获得更好的性能
  • sendfile
    • 处理静态文件优势,因为静态文件本身不需要通过用户空间,直接通过内核空间就能完成
    • CDN、动静分离中性能比其他服务高很多

IO多路复用:多个描述符的I/O操作都能在一个线程内并发交替地顺序完成,这里的复用指复用同一个线程

环境准备

Linux下环境准备

  • 环境准备:云服务器,vmware,docker
  • 四项确认
    • 公网连通性
    • yum可用
    • 关闭iptables规则
      • iptables -L查看,iptables -F关闭
      • iptables -t nat -L;iptables -t nat -F
    • 停用selinux
      • getenforce 查看状态
      • setenforce 0关闭
    • 两项安装
      • 基础依赖:yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake
      • 必要包:yum -y install wget httpd-tools vim
    • 初始化目录
      • cd /opt;mkdir app dowmload logs work backup

linux下nginx快速安装

  • 官网:nginx.org,点击download进入下载页,进入Pre-Built Packages下的stable version,拷贝yum源
  • 进入/etc/yum.repo.d,新建nginx.repo文件,粘贴yum源,记得修改OS和OSRELEASE
  • yum list | grep nginx 查看版本
  • yum install nginx 即可安装
  • nginx -v查看查看版本,nginx -V查看编译参数

通过minimal安装的linux虚拟机,一开始无法访问网络,是因为在虚拟机上安装默认没有打开网卡, 网卡默认onboot=”no”。 所以我们需要改为 onboot=”yes”。

基本参数

nginx基本参数使用

  • 安装目录
  • 编译参数
  • 基本配置语法

用yum安装nginx后,可以通过rpm -ql nginx,可以查看服务在操作系统上的创建的目录

  • ngninx日志轮转,用户logrotate服务的日志切割:/etc/logrotate.d/nginx
  • nginx主配置文件
    • /etc/nginx/nginx.conf
    • /etc/nginx/conf.d/default.conf:
  • cgi配置相关,fastcgi配置
    • /etc/nginx/fastcgi_params
    • /etc/nginx/uwsig_params
    • /etc/nginx/scgi_params:
  • 编码转换映射转化文件,开发甚少用到
    • /etc/ngnix/koi-utf
    • /etc/nginx/koi-win
    • /etc/nginx/win-utf:
  • 设置http协议的Content-Type与扩展名对应关系:/etc/nginx/mine.types
  • 用于设置出系统守护进程管理器方式
    • /usr/lib/systemd/system/nginx-debug.service
    • /usr/lib/systemd/system/nginx.service
    • /etc/sysconfig/nginx
    • /etc/sysconfig/nginx-debug
  • nginx模块目录
    • /usr/lib64/nginx/modules
    • /etc/nginx/modules
  • nginx服务器的启动管理的终端命令
    • /usr/sbin/nginx
    • /usr/sbin/nginx-debug
  • nginx手册和帮助文件
    • /usr/share/doc/nginx-1.12.0
    • /usr/share/doc/nginx-1.12.0/COPYRIGHT
    • /usr/share/man/man8/nginx.8.gz
  • nginx缓存目录:/var/cache/nginx
  • nginx日志记录:/var/log/nginx

nginx安装编译参数:nginx -V,具体编译参数在后面讲解

nginx默认配置语法

  • user:设置nginx服务的系统使用用户
  • worker_processes:工作进程数,一般和CPU核心数保持一致
  • error_log:nginx的错误日志
  • pid:nginx服务启动时候pid
  • events
    • worker_connections:每个进程允许的最大连接数,越多越好(最大连接数65535),一般调节到1w就可以满足大部分企业基本要求
    • use:工作进程数
  • http模块

如下图所示 1.png

修改配置后需用重启nginx服务

  • systemctl restart|reload nginx.service
  • nginx -s reload -c /path/to/conf:nginx -s reload -c /etc/nginx/nginx.conf

日志类型

日志类型

  • error.log access.log
  • log_format配置
    Syntax: log_format name [escape=default|json] string ...
    Default: log_format combined "..."
    Context: http # 表示上下文是http
    
  • 日志支持的nginx变量(都需要通过$符号标识变量)
    • HTTP请求变量(arg_PARAMETER、http_HEADER、sent_http_HEADER)
    • 内置变量
    • 自定义变量


留言