Nginx概念和配置项用法篇一

一:理解Nginx
1:什么是Nginx

  Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
2:Nginx特性

  (1)更快

  (2)高扩展性,Nginx的设计极具扩展性, 它完全是由多个不同功能、 不同层次、 不同类型且耦合度极低的模块组成。

  (3)高可靠性

  (4)低内存消耗

  (5)单机支持10万以上并发连接

  (6)热部署,即可以在7*24小时不间断提供服务
3:Nginx使用要求

  1:内核为2.6以上版本的操作系统  

    [[email protected] ~]# uname -a
    Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

  2:所需软件

    1:gcc编译器

      用户编译c语言程序

                     #yum install -y gcc

    2:PCRE库

      支持正则表达式

      #yum install -y pcre pcre-devel
    3:zlib库

      zlib库用于对HTTP包的内容做gzip格式的压缩 。
      #yum install -y zlib zlib-devel
    4:openSSL库
      如果我们的服务器不只是要支持HTTP, 还需要在更安全的SSL协议上传输HTTP, 那么就需要拥有OpenSSL了。
      #yum install -y openssl openssl-devel
  3:linux内核参数优化
    首先需要修改/etc/sysctl.conf来更改内核参数,配置如下,然后执行sysctl -p命令生效。

#file-max: 这个参数表示进程(比如一个worker进程) 可以同时打开的最大句柄数, 这个参数直接限制最大并发连接数, 需根据实际情况配置。
fs.file-max = 999999
#tcp_tw_reuse: 这个参数设置为1, 表示允许将TIME-WAIT状态的socket重新用于新的TCP连接, 这对于服务器来说很有意义, 因为服务器上总会有大量TIME-WAIT状态的连接。
net.ipv4.tcp_tw_reuse = 1
#tcp_keepalive_time: 这个参数表示当keepalive启用时, TCP发送keepalive消息的频度。默认是2小时, 若将其设置得小一些, 可以更快地清理无效的连接。
net.ipv4.tcp_keepalive_time = 600
#tcp_fin_timeout: 这个参数表示当服务器主动关闭连接时, socket保持在FIN-WAIT-2状态的最大时间。
net.ipv4.tcp_fin_timeout = 30
#tcp_max_tw_buckets: 这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字, TIME_WAIT套接字将立刻被清除并打印警告信息。 该参数默认为180000, 过多的TIME_WAIT套接字会使Web服务器变慢。
net.ipv4.tcp_max_tw_buckets = 5000
#ip_local_port_range: 这个参数定义了在UDP和TCP连接中本地(不包括连接的远端)端口的取值范围。
net.ipv4.ip_local_port_range = 1024 61000
#tcp_max_syn_backlog: 这个参数表示TCP三次握手建立阶段接收SYN请求队列的最大长度, 默认为1024, 将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,
#Linux不至于丢失客户端发起的连接请求。
net.core.netdev_max_backlog = 8096
#net.ipv4.tcp_rmem: 这个参数定义了TCP接收缓存(用于TCP接收滑动窗口) 的最小值、 默认值、 最大值。
net.ipv4.tcp_rmem = 4096 32768 262142
#net.ipv4.tcp_wmem: 这个参数定义了TCP发送缓存(用于TCP发送滑动窗口) 的最小值、 默认值、 最大值。
net.ipv4.tcp_wmem = 4096 32768 262142
#netdev_max_backlog: 当网卡接收数据包的速度大于内核处理的速度时, 会有一个队列保存这些数据包。 这个参数表示该队列的最大值。
net.core.netdev_max_backlog = 8096
#rmem_default: 这个参数表示内核套接字接收缓存区默认的大小。
net.core.rmem_default = 262144
#wmem_default: 这个参数表示内核套接字发送缓存区默认的大小。
net.core.wmem_default = 262144
#rmem_max: 这个参数表示内核套接字接收缓存区的最大大小。
net.core.rmem_max = 2097152
#wmem_max: 这个参数表示内核套接字发送缓存区的最大大小。
net.core.wmem_max = 2097152
#tcp_syncookies: 该参数与性能无关, 用于解决TCP的SYN攻击。
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn.backlog=1024

4:安装Nginx

    下载地址:http://nginx.org/en/download.html寻找一个合适的版本进行下载。

    安装:

$tar -zxvf nginx-1.13.8.tar.gz
#configure命令做了大量的“幕后”工作, 包括检测操作系统内核和已经安装的软件, 参数的解析, 中间目录的生成以及根据各种参数生成一些C源码文件、 Makefile文件等。
$./configure
#make命令根据configure命令生成的Makefile文件编译Nginx工程, 并生成目标文件、 最终的二进制文件。
$make
#make install命令根据configure执行时的参数将Nginx部署到指定的安装目录, 包括相关目录的建立和二进制文件、 配置文件的复制。
$make install

    启动:

    (1)默认方式启动

    #/usr/local/nginx/sbin/nginx

       (2)指定配置文件启动方式

        #/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

 测试:

   (1)测试配置信息是否错误

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

   版本:

    #/usr/local/nginx/sbin/nginx -v

    停止:

          从容停止:

        #/usr/local/nginx/sbin/nginx -s quit

        快速停止:

        #/usr/local/nginx/sbin/nginx -s stop

    重读:

        1:重读配置文件

           #/usr/local/nginx/sbin/nginx -s reload

     日志回滚:

        重新再新的日志文件打印日志

          #/usr/local/nginx/sbin/nginx -s reopen
回到顶部
二:Nginx的配置   
2.1work与进程关系

    在正式环境下,Nginx会使用一个master进程来管理多个work进程,work进程数量与服务器上的CPU核数相等。

              为什么要设置为相同?

              这正是apache和Nginx的不同之处,在apache上每个进程只处理一个请求,work进程可以同时处理多个,只受内存大小的限制。
2.2基本配置项

    按照用户使用时的预期功能,可以将配置项分为4类:

      1:正常运行必备配置项

      2:事件配置项

      3:用于调试,定位问题的配置项

      4:优化性能配置项
2.2.1正常运行配置项

    (1)定义环境变量

      可让用户直接设置操作系统上的环境变量

                     env   TESTPATH=/tmp/;

    (2)嵌入其他配置文件

      include a.conf

    (3)work进程运行的用户及用户组

      user 

    (4)pid文件路径

      pid path;
2.2.2事件配置项

    (1)是否打开accpet锁

       这个锁是负载均衡的锁,这个锁可以让多个work进程轮流地,有序的与新的客户建立TCP连接。

      默认为打开,关闭会使负载不均衡,因此不建议打开。

      accept_mutex   on;

    (2)每个work最大连接数

                   每个work进程可以同时处理最大连接数

         work_connections number;
2.2.3优化性能配置项

    (1)work进程个数

      work_processes number;

    (2)绑定work进程到指定的cpu内核

      work_processes 4;

      work_cpu_affinity 1000 0100 0010 0001;

    (3)work进程优先级设置

      work_priority  0;
2.2.4调试定位

    (1)是否以守护进程运行Nginx

       守护进程是否脱离终端并且在后台运行进程。

      daemon   on;

    (2)err日志设置

      根据自己的需要这是err日志的级别和路径

      日志的级别;debug,info,notice,warn,error,crit,alert,emerg

      err_log  logs/err.log  debug;
 2.3用HTTP模块配置一个静态web服务器

2.3.1虚拟机与请求的分发

  多个主机域名对应同一个IP。

  (1)监听端口

    listen后面可以只加IP地址,端口,或者主机名非常灵活。

    listen  80;

    listen 127.0.0.1:80;

    listen 127.0.0.1;    #默认为80端口

    listen  *.8;

    listen  localhost:80;

    在端口之后可加参数:

    listen  127.0.0.1   .......;

    1.default:将所在的server块作为整个web服务的默认server块。如果没有设置这个,将会以文件的第一个server作为默认server。为什么要这样设置,因为,当一个请求无法配置配置文件中的所有主机域名时,就会选用默认的虚拟主机。

    2.backlog=num:

  (2)主机名称

    server_name

    后面可跟多个主机名,在处理一个请求时,nginx会取出header头部的host,与每个server_name进行匹配,以此决定用哪个server块来处理这个请求。

  (3)server_names_hash_bucket_size

    为提高查找相应server_name的能力,Nginx使用散列表来存储server name,而server_names_hash_bucket_size设置每个散列桶占用内存的大小。

  (4)server_names_hash_max_size

    越大,消耗的内存越多,散列的冲突率会降低。

  (5)location

location = /{
          站点根路径匹配         例如: http://www.magedu.com/ 匹配             http://www.magedu.com/index.html  不匹配
           }

location  ~ /a{

             对uri做正则表达式模式匹配,区分字符大小写 
           }

location  ~* /a{

             对uri做正则表达式模式匹配,不区分字符大小写

           }

location  ^~ /image{
              对uri最左侧部分做匹配检查,不区分字符大小写
           }

location  ~* /.(gif|jpg|jepg)${

             #匹配结尾即可

           }
 匹配优先级从高到低:=, ^~, ~/~*, 不带符号

2.3.2文件路径的定义示例:http://www.magedu.com/bbs/index.php

   (1)以root方式设置资源路径
location  /bbs/ {
     root /web/forum/;  --真实访问的uri /web/forum/bbs/index.html
}

  (2)以alias方式设置资源路径
location  /bbs/ {
     alias /web/forum/;  --> 真实访问uri /web/forum/index.html
}

  (3)HTTP返回码重定向
error_page 500 502 503 504 = /50x.html;

2.3.3内存及虚拟资源的分配

2.3.4网络连接的设置

   (1)读取HTTP头部的超时时间

     client_header_timeout 60

     如果在一定时间内没有收到客户端发送来的字节,则认为超时,返回408

  (2)读取HTTP包体的超时时间

    client_body_timeout   60

    只有超过这个时间,读取HTTP包体时间才有效

  (3)发送相应的超时时间

    超过定义时间则关闭连接

    send_timeout 60

  (4)keepalived_diabled 超时时间

    keepalive_timeout 75;

    一个keepalive连接闲置超过一定时间后,(默认为75秒),服务器和浏览器都会去关闭这个连接

  (5)一个keepalive长连接上允许承载的最大请求

    keepalive_requests 100

    代表keepalive上默认最对只能发送100个请求

2.3.5MIME类型的设置

2.3.6对客户端请求的限制

 (1)按HTTP方法名限制用户请求

    limit_except GET {

      allow 192.168.1.0

    }  

  (2)HTTP请求包体的最大值

    浏览器在发送较大的HTTP请求时,其头部会有一个Content-Length字段,client_max_body_size是用来限制Connect-Length字段的大小

    client_max_body_size 1m

  (3)对请求限速

    limit_rate 0;

    此配置对客户端请求限制每秒传输的字节数,0表示不限速

  (4)limit_rate_after 1m

    此配置表示NGINX想客户端发送的相应长度超过1m后开始限速

2.3.7文件操作的优化

   

2.3.8对客户端请求的特殊处理

   (1)忽略不合法的请求头部

    ignore_invalid_headers off|on

      当为off时当有不合法的http请求头部时,nginx会拒绝服务,并发送400错误

    当为on时,会忽略错误请求

  (2)HTTP请求是否允许下划线

    underscores_in_headers  on|off

    默认为off,表示不允许下划线

  (3)文件未找到时是否记录到err日志

    log_not_found  on|off

  (4)是否合并相邻的“/”

    merge_slashes  on

    此配置项表示是否合并相邻的“/”,例如//test//s.txt,如果为on表示匹配为/tesr/a.txt

  (5)DNS解析地址

    resolver address...

  (6)DNS解析的超时时间

    resolver_timeout  30

    此配置项表示解析的超时时间

原文地址:https://www.cnblogs.com/tanxiaojun/p/12152099.html

时间: 2024-10-27 21:08:48

Nginx概念和配置项用法篇一的相关文章

Docker 概念及基本用法

Docker 概念及基本用法 一. 本节内容简介 本实验中我们初步接触Docker的概念和基本用法.需要依次完成下面几项任务: 理解Docker是什么 学习如何在Linux上安装Docker 学习如何使用Docker Hub 创建第一个Hello Shiyanlou的Docker应用 Docker基本的容器和镜像管理 推荐阅读:深入浅入docker docker核心技术预览:http://www.infoq.com/cn/articles/docker-core-technology-previ

ci高级用法篇之扩展核心类

在上一篇文章ci高级用法篇之创建自己的类库中,你是否觉得每个控制器的构造方法都去执行校验代码其实违背了编程规范中的DRY(do'nt repeat yourself)原则呢? 其实我们完全可以把校验的代码在父类的构造函数中.ci中控制器的父类是CI_Controller,现在我们来扩展这个父类. 在application/core目录下创建一个类文件,MY_Controller.php,内容如下: <?php class MY_Controller extends ci_Controller{

命令分析nginx访问日志的用法

awk分析日志常用高级使用命令方法 分析访问日志(Nginx为例) 日志格式: '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"' 统计访问IP次数: # awk '{a[$1]++}END{for(i

Nginx基本用法篇二

一.nginx安装 1. yum 安装 yum install nginx 2.编译安装 useradd nginx -r -s /sbin/nologin wget http://nginx.org/download/nginx-1.12.2.tar.gz tar xf nginx-1.12.2.tar.gz cd nginx-1.12.2 ./configure –prefix=/usr/local/nginx –conf-path=/etc/nginx/nginx.conf –error-

菜鸟nginx源码剖析 框架篇(一) 从main函数看nginx启动流程(转)

俗话说的好,牵牛要牵牛鼻子 驾车顶牛,处理复杂的东西,只要抓住重点,才能理清脉络,不至于深陷其中,不能自拔.对复杂的nginx而言,main函数就是“牛之鼻”,只要能理清main函数,就一定能理解其中的奥秘,下面我们就一起来研究一下nginx的main函数. 1.nginx的main函数解读 nginx启动显然是由main函数驱动的,main函数在在core/nginx.c文件中,其源代码解析如下,涉及到的数据结构在本节仅指出其作用,将在第二节中详细解释. nginx main函数的流程图如下:

Nginx实战系列之功能篇----后端节点健康检查

公司前一段对业务线上的nginx做了整理,重点就是对nginx上负载均衡器的后端节点做健康检查.目前,nginx对后端节点健康检查的方式主要有3种,这里列出: 1.ngx_http_proxy_module 模块和ngx_http_upstream_module模块(自带)     官网地址:http://nginx.org/cn/docs/http/ngx_http_proxy_module.html#proxy_next_upstream 2.nginx_upstream_check_mod

chipmunk 物理引擎的基本概念和基本用法

chipmunk是一个开源2D物理引擎, 项目主页:http://code.google.com/p/chipmunk-physics/ 工作需要研究了一下,这个引擎的资料还是不多,我阅读了所有的文档,7个demo,和一个教学程序,得出如下一些理解. 一,基本概念 space: 发生物理模拟的空间,可容纳body, shape,joint body:刚体,可被赋予shape.刚体具有质量,转动惯量,位置,线性速度,加速度,角度,角速度,角加速度等属性.刚体之间可通过joint连接 shape:决

Nginx学习日记第五篇 -- upstream及fastcgi

一.Nginx upstream Ngx_http_upstream_module模块可实现七层负载均衡,定义的服务器组可被proxy_pass.fastcgi_pass.uwsgi_pass.scgi_pass和memcached_pass所引用. 1.实验场景 Nginx upstream IP:192.168.0.110 apache node1 IP:192.168.0.40 apache node2 IP:192.168.0.30  2.Nginx upstream配置(结合proxy

PHP-流的概念与详细用法

Stream是PHP开发里最容易被忽视的函数系列(SPL系列,Stream系列,pack函数,封装协议)之一,但其是个很有用也很重要的函数.Stream可以翻译为"流",在Java里,流是一个很重要的概念. 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等.根据流的方向又可以分为输入流和输出流,同时可以在其外围再套上其它流,比如缓冲流,这样就可以得到更多流处理方法. PHP里的流