nginx作为http服务器常用模块

1、详细描述常见nginx常用模块和模块的使用示例

常用模块:
1.nginx核心功能模块(Core functionality)
accept_mutex on|off; #Context:events
这个指令的意义:当一个新连接或者说用户请求到达nginx服务时,如果accept_mutex为on,
那么多个worker将以串行方式来处理,其中一个worker会被激活,其他worker继续保持休眠状态,
如果accept_mutex为off,那么所有的worker将会被唤醒,但只有一个worker会获取新连接,其他worker会重新休眠。
这可以算是惊群问题吧。当网站并发量很大时,可以设置为off,

    error_log
        错误日志文件路径,错误记录等级,等级从低到高为debug, info, notice, warn, error, crit, alert, emerg
        例:error_log /var/log/nginx/error.log;

    events
        用来指定nginx的工作模式及连接数上限
        例:events {
                use epoll; #使用epoll I/O传输模型
                worker_connections  1024; #每个worker允许的最大用户请求数
                    }

    ***worker_connections #Context:events
        每一个worker进程能并发处理(发起)的最大连接数,并不是越大越好
        ***需要深入理解的优化选项

    worker_cpu_affinity
        将worker进程固定在指定的CPU(或核心)中,因为nginx默认是随机分配cpu(或核心)的,
        此设置可将nginx进程固定在指定的CPU(或核心)上,以加快处理速度降低出错率。
        例:worker_processes    4;
            worker_cpu_affinity 0001 0010 0100 1000;

    worker_priority
        让worker以指定nice值工作,-20~19 nice值越高就会优先获取CPU资源;
        nginx默认状态下的nice值为0

    worker_processes
        设置nginx的work process的数量,推荐设置为等于或略小于CPU的核心数,
        因为若设置为大于CPU的核心数时会产生拥挤,范围会影响性能,若设置成auto,默认数量为CPU的核心数

    include file | mask;
        将指定的文件包含在配置中,nginx运行时会自动加载
        例:include vhost/*.conf

    master_process on | off;
        确认master process的开启状态。

    multi_accept on | off; #Context:events
        当multi_accept为on时,所有的新连接情求将同时被worker process同时接收处理,
        当multi_accept为off时,worker process一次只接收处理一个新连接
        默认为off

    pid
        设置nginx主进程ID文件位置
        例:pid log/nginx.pid;

    use
        设置进程连接的方式。值得注意的是此项一般不做设置,因为nginx会自动选择最适合系统的方式。
        There is normally no need to specify it explicitly, because nginx will by default use the most efficient method.

    user
        指定nginx主进程的用户及组

2.http核心功能模块(ngx_http_core_module)
    alias #Context:location
        alias表示路径别名,alias后面接路径,也就是用户访问的真正路径,一般用在location环境下
        例:location /i/ {
            alias /data/w3/images/; #一定要记得结尾加/
                        }
        当用户请求为路径URI/i/时,实际访问的是URI/data/w3/images/
        此处可深入对比root与alias的区别:
        1.root指定的是location匹配访问的path目录的上一级目录,也可以理解为location匹配访问的起始根目录
        2.alias指定的是location匹配访问的path目录的真正目录路径,而location后是path目录别名
        3.对于root来说,location后的path目录必须真实存在
        4.对于alias来说,location后的path目录可以不存在
        5.alias只能用在location中,而root可用在    http,server,location,if in location中
        6.有网友建议
            1)在location /中配置root目录;
            2)在location /path中配置alias虚拟目录。

    listen #Context:server
        设置监听IP的地址和端口,一般只需设置ip和端口
        例:
        listen 127.0.0.1:8000;
        listen 127.0.0.1;
        listen 8000;
        listen *:8000;
        listen localhost:8000;
        扩展设置:listen address[:port] [default_server] [ssl] [http2 | spdy]  [backlog=number] [rcvbuf=size] [sndbuf=size]
            default_server:设定为默认虚拟主机;
            ssl:限制仅能够通过ssl连接提供服务;
            backlog=number:后援队列长度;
            rcvbuf=size:接收缓冲区大小;
            sndbuf=size:发送缓冲区大小;

    server #Context:http
        用来定义虚拟主机,格式为server { ... }

    server_name #Context:server
        设置虚拟主机的主机名,可使用正则表达式进行匹配
        例:server {
                server_name  ~^(www\.)?(.+)$;
                index index.php index.html;
                root  /nginx/$2;
                    }
            这里用到了正则表达式后向引用的知识,可以实现在一个server中配置多个站点,
            当输入站点www.fff.com时对应站点的主目录为/nginx/fff.com目录
            当输入站点www.ddd.org时对应站点的主目录为/nginx/ddd.com目录
            目录必须存在

    tcp_nodelay on|off; #Context:http, server, location
        只在keepalived下开启有效,长连接时不做报文打包发送,不产生延迟(delay)

    tcp_nopush on|off; #Context:http, server, location
        在 nginx 中,tcp_nopush 配置和 tcp_nodelay "互斥"。它可以配置一次发送数据的包大小。也就是说,它不是按时间累计  0.2 秒后发送包,而是当包累计到一定大小后就发送。
        在 nginx 中,tcp_nopush 必须和 sendfile 搭配使用。

    sendfile #Context:http, server, location, if in location
        此选项可提高web服务器的传输性能,不使用sendfile的传统网络传输:
            read(file,tmp_buf, len);
            write(socket,tmp_buf, len);
            硬盘 --> kernel buffer --> user buffer --> kernel socket buffer --> 协议栈
        使用sendfile的网络传输:
            sendfile(socket,file, len);
            硬盘 --> kernel buffer (快速拷贝到kernelsocket buffer) --> 协议栈
        sendfile省去了很多中间过程,从而提高了传输速度

    keepalive_timeout
        keepalive的超时时间
        例:keepalive 75s;

    root #Context:http, server, location, if in location
        设置站点的根目录

    location #Context: server, location
        根据用户请求的URI做访问逻辑的设置,location下的root比server下的root有更高的优先权?
        例:
        location = / {
        [ configuration A ]
                    }

        location / {
        [ configuration B ]
        }

        location /documents/ {
        [ configuration C ]
        }

        location ^~ /images/ {
        [ configuration D ]
        }

        location ~* \.(gif|jpg|jpeg)$ {
        [ configuration E ]
        }

    error_page #Context:http, server, location, if in location
        设置当用户请求发生错误时nginx反馈给用户错误显示的URI
        设置方法有多种:
            例:1. error_page 502 503  /50x.html; #当访问出现502 503错误时,就向用户反馈50x.html的内容
                2. error_page 502 503 =200 /50x.html; #当访问出现502 503时,向用户反馈状态码为200,并反馈50x.html的内容
                                                        50x.html可替换为其他内容,如jpg,gif,php文件
                3. error_page 404 = http://www.baidu.com; #当访问出现404错误时,将用户请求跳转至百度主页
                4. location / {
                        error_page 404 = @fallback;
                                }

                        location @fallback {
                            proxy_pass http://backend;
                                }

    keepalive_timeout
        设置长连接的超时时间,设置0时表示关闭长连接,默认为75s
            例:keepalive_timeout 40s;

    keepalive_disable none | browser ...;
        设置禁止长连接的浏览器

    keepalive_requests
        设置一次长连接允许的最大请求数,默认为100

    client_body_buffer_size # Context:http, server, location
        body是指报文的主体部分,此选项用于设置接收客户端请求报文的body部分的缓冲区大小,
        默认为16k,一旦超过设置的值,便会发起磁盘I/O,影响站点性能,
        只有在允许用户请求或上传大于16k数据时,才有必要调整此项,
        但当用户上传数据大到不得不直接储存在磁盘上时则需使用client_body_temp_path

    client_body_temp_path # Context:http, server, location
        这里涉及到了当用户较多且用户存放文件较多时,各用户如何快速准确的找到各自存放在站点的文件的问题。
        此选项可设置文件分级存放,
            例:client_body_temp_path /var/tmp/client_body 2 1 1
                #用户存放主目录为/var/tmp/client_body 创建16*16个一级子目录,
                每个一级子目录下创建16个二级子目录,每个二级子目录下创建16个三级子目录
                这是一种算法机制,为用户访问磁盘数据时提供一种快捷的路径路由机制

    aio on|off
        aio是指异步非阻塞IO模型,在nginx第一讲中有详细介绍

    open_file_cache Context:http, server, location
        用于设置服务器访问频率较高文件的元数据缓存,将访问频率较高的文件缓存至内存中,
        当用户访问时不需要再进行磁盘查找,可直接根据文件的元数据找到文件进行下一步操作,
        大大提升了用户访问效率。
            例:open_file_cache off;
                open_file_cache max=1000 inactive=20s; #最大缓存1000个缓存项 缓存项的非活动时长20s,受open_file_cache_min_uses选项的影响,在设定时间内访问命中数少于open_file_cache_min_uses设置数时,缓存将被清理

    open_file_cache_uses
        参照open_file_cache
            例:open_file_cache          max=1000 inactive=20s;
                open_file_cache_valid    30s;
                open_file_cache_min_uses 2;
                open_file_cache_error on; #是否缓存查找时发生错误的文件信息的

3.基于IP的访问控制模块(ngx_http_access_module)
    allow
        允许访问
    deny
        拒绝访问

          例:location / {
                deny  192.168.1.1;
                allow 192.168.1.0/24;
                allow 10.1.1.0/16;
                allow 2001:0db8::/32;
                deny  all; }       

4.基于用户登录的访问控制模块(ngx_http_auth_basic_module)
    auth_basic #Context:http, server, location, limit_except
        反馈给用户的服务器认证信息,必须与auth_basic_user_file配合使用

    auth_basic_user_file
        设置用户认证文件的路径,配置用户认证的用户名与密码可用httpd-tools来实现
            1.yum -y install httpd-tools #安装httpd-tools
            2.htpasswd -c -m /etc/nginx/.ngxpwd ready #指定密码文件路径与文件名,用户名为ready
        例:server {
                server_name www.hhh.com;
                root /nginx/test2/;
                location ~* ^/(login|admin) {
                    #alias /admin/; #为何加此项会访问不成功,改为location /login/却会访问成功?
                    auth_basic "why?";
                    auth_basic_user_file /etc/nginx/.ngxpwd;
                    }   #root路径下用户请求以admin或login开头时,都会出现用户认证
5.nginx访问状态模块(ngx_http_stub_status_module)                }
    stub_status
        可以查看nginx的状态信息,此信息一定要保密,可单独创建一个location再配合auth_basic_user_file与auth_basic使用
        例:
            location /abc {
                stub_status;
                auth_basic "why?";
                auth_basic_user_file /etc/nginx/.ngxpwd;
                    }
        输出示例:
            Active connections: 3  #当前的活动链接数
            server accepts handled requests #accept已经接受的用户请求数,handled已经处理完成的用户请求数,requests总请求数
                   303     303     2533
            Reading: 0 Writing: 1 Waiting: 2 #Reading:处于读取客户端请求报文首部的连接的连接数;
                                             #Writing:处于向客户端发送响应报文过程中的连接数;
                                             #Waiting:处于等待客户端发出请求的空闲连接数

6.nginx访问日志模块(ngx_http_log_module)
    access_log #Context:http, server, location, if in location, limit_except
        设置访问日志路径,可在全局设置,也可在server,location等中做精细设置,便于不同主机的访问精细管理
        也可压缩打包处理
            例:access_log /path/to/log.gz combined gzip  buffer=16k flush=5m;
                #buffer可设置访问日志的缓冲区大小,flush为刷新周期

    log_format
        定义访问日志的格式
            例:log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                                  ‘$status $body_bytes_sent "$http_referer" ‘
                                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;

7.ngx_http_gzip_module
    nginx中gzip的主要作用就是用来减轻服务器的带宽问题,经过gzip压缩后的页面大小可以变为原来的30%甚至更小,
    这样用户浏览页面时的速度会快很多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,
    传到浏览器后浏览器解压缩并解析。目前的大多数浏览器都支持解析gzip压缩过的页面。默认为off
        例:gzip            on;
            gzip_comp_level 2; #压缩等级,默认为1
            gzip_min_length 1000; #启用压缩功能的临界值
            gzip_proxied    expired no-cache no-store private auth;
            gzip_types      text/plain application/xml;

8.https服务模块(ngx_http_ssl_module)
    ssl on | off;
        开启/关闭ssl服务
    例:
    server {
        listen 443 ssl;
        server_name www.hhh.com;
        root /nginx/test2/;
        access_log /var/log/nginx/ssl_access.log main;

        ssl on;
        ssl_certificate /etc/pki/nginx/server.crt; #证书存放路径
        ssl_certificate_key /etc/pki/nginx/private/server.key; #私钥存放路径
        ssl_session_cache shared:SSL:1m; #在各worker之间启用大小为1m的共享缓存,可提高缓存利用率,1m可缓存4000个回话
        ssl_protocols sslv3 TLSv1 tlsv1.1 tlsv1.2; #设置支持的ssl协议
        ssl_session_timeout 10m; #设置共享缓存的超时时间

9.nginx URL重写模块,rewrite模块(ngx_http_rewrite_module)
    根据用户请求的URL按一定规则进行重新替换或定向,使用户请求跳转至规则定制的URL
        例:server {
                server_name www.fff.com;
                location  /alais/ {
                alias /nginx/ta/;
                index index.html index.htm;
                rewrite /(.*)\.png$ http://www.fff.com/$1.jpg; #将用户输入以.png结尾的请求全部替换为.jpg结尾的请求
                rewrite /(.*)$ https://www.fff.com/$1; #将用户请求全部重写为https协议并返回请求
                        }
                    }
    rewrite规则默认会自上而下一次匹配执行,当第一条rewrite执行后,会将新URL再重新在location中检查一遍,直到没有匹配的rewrite,
    这样可能会产生死循环,因为rewrite结尾默认有一个last标识,也可在结尾改为其他标识实现不提功能
        1.last #只要有新URL就会使用此标识结尾的规则检查一次
        2.break #检查若匹配就执行并不再执行后面的rewrite规则
        3.redirect #反馈给用户302响应码并将新定向的URL,让客户端自己请求新定向的URL
        4.permanent #与redirect不同的是,permanent是永久重定向

10.防盗链模块(ngx_http_referer_module)
    **#再打开某些网站时,会出现类似"此图片仅允许xx网内部使用"的图片提示,这就是基于此模块来实现防盗链的一种方法
    valid_referers none | blocked | server_names | string ...;
            定义referer首部的合法可用值;

                none:请求报文首部没有referer首部;
                blocked:请求报文的referer首部没有值;
                server_names:参数,其可以有值作为主机名或主机名模式;
                    arbitrary_string:直接字符串,但可使用*作通配符;
                    regular expression:被指定的正则表达式模式匹配到的字符串;要使用~打头,例如 ~.*\.magedu\.com;

                例:
                valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;

                if($invalid_referer) {
                    return http://www.magedu.com/invalid.jpg;

原文地址:http://blog.51cto.com/13322786/2156501

时间: 2024-09-29 02:33:47

nginx作为http服务器常用模块的相关文章

Nginx 常用模块

Nginx 常用模块 1. ngx_http_autoindex_module # ngx_http_autoindex_module模块处理以斜杠字符(' / ')结尾的请求,并生成一个目录列表. # 通常,当ngx_http_index_module模块找不到索引文件时,请求被传递给ngx_http_autoindex_module模块. `# Example location / { autoindex on; } `# 启用或禁用目录列表输出. autoindex # Syntax: a

Nginx系列--04HTTP常用指令及常用模块

前言 本篇总结Nginx中HTTP常用指令与一些常用的模块 一. HTTP协议常用指令 1. keepalive_timeout 语法 : keepalive_timeout timeout [header_timeout];解释 : 当第一个参数timeout的值不为零时,开启长连接.什么是长连接?我们知道应用层的HTTP协议使用的四层协议是tcp连接,而tcp连接非常重量级,如果用户请求一次资源就经历一次tcp的三次握手和四次挥手,伤不起呀!所以最好是能够重用TCP连接,用户请求一次资源后T

Nginx是什么,有什么优点?为什么选择Nginx做web服务器软件?(经典经典)

1.基础知识 代理服务器:    一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端.应用比如:GoAgent,FQ神器.    一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接.或者获得目标服务器的指定资源. Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色.HTTP的代理服务器即是Web服务器又是Web客户端.    代

Ansible 自动化运维工具之inventory和常用模块介绍

一.inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况下,直接在hosts中定义即可,但是以后很定会管理多台主机,而ansible可管理的主机集合就叫做inventory.在ansible中,描述你主机的默认方法是将它们列在一个文本文件中,这个文件叫inventory文件. 一个简单的inventory文件可能只包含一组主机名的列表,如下: ftp.testansible.com samba.testansible.com mail.t

轻松使用Nginx搭建web服务器

如果读者以前做过web开发的话,就应该知道如何去搭建一个web服务器来跑你的web站点,在windows下你可能会选择去用IIS,十分的快捷,在linux下,你可能首先会想到apache,"一哥"( W3Techs网站数据的排名)啦 今天小编要介绍后起之秀nginx来实现web服务器.小编在前面的博客中也详细的聊过apache的使用,如今又来说nginx的使用,读者可能以后搭建web服务器的话就不知道选用哪一种,O(∩_∩)O~,别急,小编这就来给读者分析一下Nginx和Apache区

Nginx之web服务器

Nginx的介绍 Nginx是由俄罗斯的Igor Sysoev使用C语言开发的轻量级.高性能.开源.跨平台的Web服务器. Nginx使用基于事件驱动的架构能够并发处理百万级的TCP连接,高模块化的设计和自由的许可证使得扩展Nginx功能的第三方模块层出不穷,而且优秀的设计带来了极佳的稳定性,因此其作为Web服务器被广泛应用到大流量的网站上,包括腾讯.新浪.网易.淘宝等访问量巨大的网站. Nginx是Web服务器,或叫做WWW(World Wide Web)服务器,相应具备Web服务器的基本功能

《Nginx高性能Web服务器》系列分享专栏

<Nginx高性能Web服务器>系列分享专栏 [作者:Poechant] Nginx是目前最流行的基于BSD-like协议.轻量级.高性能的HTTP服务器.反向代理服务器和电子邮件(SMTP/POP3/IMAP)服务器.CSDN的Nginx专栏引领大家Step by Step地一起领略当今最强大高性能的Web服务器. <Nginx高性能Web服务器>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/203778.html 文章

linux学习笔记——搭建基于nginx的web服务器、多核配置、nginx配置参数

############ 认识nginx #############Nginx:(发音同 engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用.  其优点是轻量级(占有内存少),高并发(并发能力强),事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用ngi

Nginx详解-服务器集群

Nginx是什么 代理服务器:一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端.应用比如:GoAgent,FQ神器.  一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务器所使用的代理协议,请求对目标服务器创建连接.或者获得目标服务器的指定资源. Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色.HTTP的代理服务器即是Web服务器又是Web客户端. 代理服务器是介于