nginx 简介和通用配置

nginx 简介和通用配置

简介

nginx是web服务器,由C语言开发,基于事件驱动能处理百万级别的tcp连接,高度模块化的设计和自由的许可证使得扩展其功能的模块层出不穷,跨平台,可使用当前操作系统特有的一些高效API来提高自己的性能,nginx以性能为王。选择nginx的核心理由是处理高并发请求的同时保持高效的服务。

优点

  • 更快

单次请求更快,高峰期也更快

  • 高扩展性

极具扩展性,它由多个不同功能、不同层次、不同类型且耦合度极高的模块组成,这种低耦合的设计,造就了它庞大的第三方模块

  • 高可靠性

每个worker进程相对独立,master进程在某个worker进程出错时能迅速拉起新的worker进程,nginx的可靠性来源于其核心框架代码的优秀设计、模块设计的简单性。官方提供的常用模块都很稳定。

  • 低内存消耗

一般情况下10000个非活跃的keep-alive连接仅消耗2.5M的内存

  • 单机支持10万以上的并发连接

nginx支持的并发连接上限取决于内存,10万远没封顶

  • 热部署

master管理进程

worker工作进程

  • 最自由的BSD许可协议

nginx 配置一般分为6大块,多数http中的配置都可以配置到server和location中

1、全局块: 配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块: 配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块: 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、upstream: 配置代理服务,在http 模块下,通过server端调用

5、server块: 配置虚拟主机的相关参数,一个http中可以有多个server

6、location块: 配置请求的路由,以及各种页面的处理情况

下面是一份通用的nginx配置

# nginx 使用的用户和组
user  www www;
# worker角色的工作进程的个数,这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是auto值
worker_processes  auto;
# 指定全局日志路径和文件名,可以在下方直接使用 [ debug | info | notice | warn | error | crit ]  参数
error_log   logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
# 指定 pid 存放的路径
pid         logs/nginx.pid;


events {
    # nginx默认使用epoll事件模型,: use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];具体内容查看 http://wiki.codemongers.com/事件模型
    use epoll;
    # 每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)
    worker_connections  2048;
    # 打开同时接受多个新网络连接请求的功能。 默认为off
    # multi_accept on; 
    # 优化同一时刻只有一个请求而避免多个睡眠进程被唤醒的设置,on为防止被同时唤醒,默认为off
    # accept_mutex on; 
}

http {
    # 文件扩展名与文件类型映射表,设定mime类型,类型由mime.type文件定义
    include               mime.types;
    # 配置默认的mime类型
    default_type          application/octet-stream;
    # 自定义日志格式
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    # 日志文件路径和文件名
    #access_log  logs/access.log  main;
    # 开启高效文件传输模式,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off
    sendfile             on;
    # socket包累计到一定大小后就发送
    # tcp_nopush         on;
    # 强制socket在它的缓冲区里0.2秒后发送数据,tcp_nopush 配置和 tcp_nodelay "互斥"
    # tcp_nodelay        on;
    # 长连接超时时间,单位是秒
    keepalive_timeout   65;
    # 【gzip压缩功能设置】:gzip和gzip_static模块可以搭配使用,也可独立使用,gzip内置,gzip_static官方说不内置,上下文:http,server,location,可以使用nginx -V 来查看是否安装某个模块
    # 是否开启gzip, 默认off,符合条件的都要压缩,使用建议搭配缓存
    # gzip                  on;
    # 是否开启 gzip_static, 默认off,会在同路径下先找寻同名.gz压缩文件,找到直接返回,未找到,压缩后返回,建议手动压缩
    gzip_static             on;
    # 当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩。根据具体情况修改
    gzip_min_length         3k;
    # 缓冲(压缩在内存中缓冲几块? 每块多大?),32 4K| 16 8K,建议用默认
    # gzip_buffers          4 16k;
    # 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议),1.0|1.1,默认1.1,如果是反向代理,考虑使用1.0
    gzip_http_version       1.0;
    # 设置请求者代理服务器,该如何缓存内容,off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any, 默认:off
    # gzip_proxied          any
    # 推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
    gzip_comp_level         6;
    # 对哪些类型的文件用压缩 如txt,xml,html ,css
    # gzip_types                text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    # 增加响应头”Vary: Accept-Encoding”
    gzip_vary               on;

    # 【http_proxy 设置】 上下文:http,server,location
    # 限制请求体的大小,若超过所设定的大小,返回413错误。默认1m
    client_max_body_size           30m;
    # 分配给请求数据的Buffer大小,请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中,临时文件路径为client_body_temp
    client_body_buffer_size       128k;
    # 请求的数据的临时目录,默认/tmp ,修改必须保证nginx具有读写权限
    # client_body_temp          /tmp
    # 连接代理服务器的超时时间,单位秒
    proxy_connect_timeout       75;
    # 代理服务器处理请求的超时时间,单位秒
    proxy_read_timeout           75;
    # 代理服务器数据回传超时时间,单位秒
    proxy_send_timeout           75;
    # 代理服务器错误是否开启拦截
    proxy_intercept_errors      on;
    # 开启从后端被代理服务器的响应body缓冲, on|off, 默认on
    # proxy_buffering           on
    # Nginx使用该大小申请read_buf,即大小指定了 upstream header 最大长度,如果响应头超过了这个长度,Nginx会报upstream sent too big header错误,然后client收到的是502。默认值:proxy_buffer_size 4k/8k
    proxy_buffer_size           4k;
    # 设置存储被代理服务器响应的body所占用的buffer个数和每个buffer大小。开辟4个长度为32k大小的read_buf用来存储body,当然不是连接建立初始化时就开辟4个,而是当当前buf不够存响应body时才会新申请一个,最多申请4个buf; 默认值:proxy_buffers 256 8k
    proxy_buffers               4 32k;
    # nginx会在没有完全读完后端响应就开始向客户端传送数据,所以它会划出一部分busy状态的buffer来专门向客户端传送数据(建议为proxy_buffers中单个缓冲区的2倍),然后它继续从后端取数据。proxy_busy_buffer_size参数用来设置处于busy状态的buffer有多大。如果完整数据大小小于busy_buffer大小,当数据传输完成后,马上传给客户端;如果完整数据大小不小于busy_buffer大小,则装满busy_buffer后,马上传给客户端;
    proxy_busy_buffers_size       64k;
    # 设置临时文件的总大小,默认值:proxy_max_temp_file_size 1024m;
    proxy_max_temp_file_size
    # 同时写入临时文件的数据量的总大小。通常设置为8k或者16k。
    proxy_temp_file_write_size  64k;
    # 定义proxy的临时文件存在目录以及目录的层级。语法:proxy_temp_path  path [level1 level2 level3],默认值proxy_temp_path proxy_temp
    # proxy_temp_path               /usr/local/nginx/proxy_temp 1 2;
  
    # 设定负载均衡后台服务器列表,service:反向服务地址 加端口,weight:权重,max_fails:失败多少次 认为主机已挂掉则,踢出,fail_timeout:踢出后重新探测时间,backup:备用服务,max_conns:允许最大连接数,slow_start:当节点恢复,不立即加入,down:表示单前的server暂时不参与负载.
    upstream  backend  { 
              # 负载均衡的分配策略,ip_hash;|fair;|hash $request_uri; hash_method crc32;  ,默认按照轮询和权重(weight)
              ip_hash; 
              # 负载的服务器ip、端口和一些配置参数
              server   192.168.10.100:8080 max_fails=2 fail_timeout=30s ;  
              server   192.168.10.101:8080 max_fails=2 fail_timeout=30s ;  
              # 指定可用于长连接的连接数
              # keepalive 16;
    }
  
    # 【虚拟主机配置】 也可以  include /etc/nginx/sites-enabled/*; 通过外部引入
    server {
        # 监听80端口
        listen           80;
        # 设置访问的域名
        server_name      host.example.com;
        # 设置主机的根目录
        root                /var/www/html/oaapp;
        # 设置编码格式
        charset         utf-8;
        # 设定本虚拟主机的访问日志
        access_log      /tmp/host.access.log  main;
        # 设定本虚拟主机的错误日志
        error_log       /tmp/host.error.log error;
        
        #对 /proxy 所有做负载均衡+反向代理
        location /proxy{
            # 匹配路 由根目录
            root                   /var/www/html/oaapp;
            # 入口文件
            index                 index index.php index.jsp index.html index.htm;
            # 请求转向backend定义的服务器列表,即反向代理
            proxy_pass            http://backend;  
            # 语法:proxy_redirect [ default|off|redirect replacement ] 默认值:proxy_redirect default 使用字段:http, server, location
            # proxy_redirect         off;
            # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header      Host  $host:$server_port;
            proxy_set_header      X-Real-IP  $remote_addr;  
            proxy_set_header      X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
        
        # 这.php文件的处理交给php-fpm
        location ~ \.php$ {
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    
    
            fastcgi_intercept_errors on;
            fastcgi_buffer_size 16k;
            fastcgi_buffers 4 16k;
            fastcgi_connect_timeout 300;
            fastcgi_send_timeout 300;
            fastcgi_read_timeout 300;
        }

        
        location ~ /\.ht {
            deny all;
        }
        # 设置404状态的重定向页面,可以指定本地也可以是远程url
        error_page   404  /404.html;
        location = /404.html {
            access_log logs/access.log maintry;
            proxy_pass http://192.168.10.100:8080/error404.php;
        }
        # 设置50x错误的重定向页面,可以指定本地也可以是远程url
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root           /var/www/html;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 大多数 Nginx 新手都会频繁遇到这样一个困惑,那就是当同一个location配置块使用了多个 Nginx 模块...
    SkTj阅读 7,671评论 0 12
  • I/O模型: 阻塞型、非阻塞型、复用型、信号驱动型、异步 同步/异步:关注消息通知机制 消息通知:同步:等待对方返...
    Net夜风阅读 2,006评论 0 1
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 2,003评论 0 9
  • 1.简介:  Nginx:engine X ,2002年,开源,商业版 http协议:web服务器(类似于ht...
    尛尛大尹阅读 1,867评论 0 3
  • I/O模型Nginx介绍Nginx的安装和目录结构Nginx的配置Nginx的编译安装 一、I/O模型 (一)I/...
    哈喽别样阅读 892评论 0 4