nginx

作者: 蔚蓝天空99 | 来源:发表于2019-01-30 16:23 被阅读0次

    Nginx 是一个高性能的 Web 和反向代理服务器

    优势

    高性能: 作为WEB服务器, 性能好开销低, 10,000 非活动的 HTTP keep-alive 连接仅需要 2.5M 内存,能够支持高达 50,000 个并发连接数的响应

    可以作为反向代理服务器,性能优异

    使用安装配置简单, 重新配置和在线升级可以无缝连接,无须中断客户端工作进程

    缺点

    nginx目前使用简单的轮巡算法,无法做更复杂的负载均衡,比如基于链接计数的负载均衡

    NGINX配置说明

    配置模块

    main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)

    这四者之间的关系式:server继承main,location继承server,upstream既不会继承其他设置也不会被继承

    配置完整示例说明

    ################## 全局配置 ##################

    user www-data

    #运行nginx的用户,默认由nobody账号运行

    worker_processes

    #nginx启动的工作进程数 - 每个进程平均消耗10-12M,一般指定和CPU数目相同

    #error_log logs/error.log;

    #error_log  logs/error.log  notice;

    #error_log  logs/error.log  info;

    #error_log 主模块指令,定义全局错误日志文件。输出级别有debug,info,notice,warn,error,crit可供选择,其中debug输出日志最详细,而crit输出日志最少

    pid logs/nginx.pid; 

    #nginx进程pid存储文件路径

    worker_rlimit_nofile  65535;

    #用于绑定worker进程和CPU,Linux内核2.4以上使用

    events {

            use epoll;

            #use是个事件模块指令,用于指定工作模式,nginx支持的工作模式有select、poll、kqueue、epoll、rtsig、和/dev/poll,其中select和poll都是标准的工作模式。kqueue和epoll是高效的工作模式,其中kqueue用于BSD系统,而epoll用于Linux系统,对于Linux系统,epoll是首选。

            worker_connections  65536;

            # 用于定义单个进程处理的最大并发连接数,默认为1024, 该值的设置考虑服务器的物理内存大小

            #最大客户连接数由worker_connections和worker_processes决定,即max_client=worker_processes*worker_connections,在作为反向代理时变为:max_client= worker_processes*worker_connections/4, 除以4是一个经验值设定。

            #并发请求受I/O约束,max_clients的值须小于系统可以打开的最大文件数

            #进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit –n 65536”后worker_connections的设置才生效。

            #而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右

            #查看服务器可以打开的文件句柄数是多少

            # cat /proc/sys/fs/file-max

            # 实质上max_clients就是受制于服务器的cpu和内存大小

    }

    ################## http服务器配置 ##################

    http {

            include       mime.types;

            #include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。

            default_type application/octet-stream;

            #default_type属于http核心模块指令,默认为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,nginx是不与解析的,此时,用浏览器访问PHP文件就会出现下载窗口。

            #log_format main '$remote_addr - $remote_user [$time_local] "$request" '

            #                             '$status $body_bytes_sent "$http_referer" '

            #                             '"$http_user_agent" "$http_x_forwarded_for"';

            #log_format是nginx的httplog模块指令,用于指定nginx的日志输出格式,main为此日志格式的名称,可以在下面的access_log指令中使用

            #access_log  logs/access.log  main;

            sendfile   on;

            tcp_nopush    on;

            tcp_nodelay    on;

            #sendfile用于开启高效文件传输模式,将tcp_nopush和tcp_nodely另个指令设置为on,用于防止网络阻塞。

            #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,

            #对于普通应用,必须设为 on,

            #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,

            #以平衡磁盘与网络I/O处理速度,降低系统的uptime.

            #keepalive_timeout  0;

            keepalive_timeout  65;

            #keepalive_timeout用于设置客户端连续保持活动的超时时间。

            client_max_body_size   20m;

            #设置允许客户端请求的最大单个文件字节数

            client_header_buffer_size    32k;

            #用于指定客户端请求头的headerbuffer大小,对于大多数请求,1kb的缓冲区大小已经足够,如果定义了消息头或有更大的cookie,可以增加缓冲区大小。

            large_client_header_buffers        4      32k;

            #用于指定客户端请求中较大的消息头的缓存最大数量和大小

            client_header_timeout 10;

            #client_header_timeout用于设置客户端请求头读取超时时间,超过该时间客户端还没发送任何数据,nginx将返回“request time out(408)”错误。

            client_body_timeout    10;

            #client_body_timeout用于设置客户端请求主体读取超时时间,默认时间为602s,超过该时间客户端还没发送任何数据,nginx将返回“request timeout(408)”错误。

            send_timeout                10;

            #send_timeout 用于指定响应客户端的超时时间,这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx将会关闭连接

            server_tokens off;

            #隐藏Nginx版本号

    }

    ################## HttpGzip模块配置 ##################

    gzip        on;

    #gzip on : 开启实时gzip压缩输出数据流,减少网络传输

    gzip_min_length   1k;

    ##gzip_min_length设置允许压缩的页面最小字节数,页面字节数从header头的content-length中进行获取。默认值是0,不管页面大小都进行压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。

    gzip_buffers      4  16k;

    #gzip_buffers设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表申请4个单位为16K的内存作为压缩结果流缓存

    gzip_http_version   1.1;

    #gzip_http_version用于识别 http 协议的版本,默认是1.1,目前绝大多数浏览器已经支持gzip解压。

    gzip_comp_level     6;

    #gzip_comp_level:gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

    gzip_types text/html text/plaintext/css text/javascript application/json application/javascriptapplication/x-javascript application/xml;

    #gzip_types指定何种类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。

    gzip_vary   on;

    #gzip_vary:和http头有关系,会在响应头加个 Vary: Accept-Encoding ,可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Squid缓存经过Nginx压缩的数据。。

    ################## Server主机配置 ##################

    server {

            listen    8088;

            主机监听端口

            server_name www.example.com 192.168.56.110;

            #指定IP地址或者域名,多个域名之间用空格隔开。

            charset  utf-8;

            #设定网页默认的编码格式

            location / {

                root   /home/www/myweb;

                #指定主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径

                index  index.html index.htm;

                #设定访问的默认首页地址,从左到右依次查找

            }

            error_page  404              /404.html;

            error_page 500 502 503 504 /50x.html;

            location = /50x.html {

                root  html;

            }

            #error_page指令可以定制各种错误信息返回页面,nginx会在主目录的html目录中查找指定的返回页面

            #对 / 所有做负载均衡+反向代理

            location / {

                proxy_pass        http://myserver; 

                #proxy_pass http://myserver:实现负载调度功能,proxy_pass指令用来指定请求转向代理的后端服务器定义的服务器列表,即反向代理,对应upstream负载均衡器。地址也可以是主机名或者IP地址,如:proxy_passhttp://ip:port。

                proxy_next_upstream   http_500  http_502  http_503   http_504 error  timeout invalid_header;

                #proxy_next_upstream:定义故障转移策略,当后端服务器节点返回500、502、503、504和执行超时等错误时,自动将请求转发到upstream负载均衡组中的另一台服务器,实现故障转移。

            }    

            location ~ .php$ {

                fastcgi_pass127.0.0.1:9000;

                fastcgi_index index.php;

                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

                include fastcgi_params;

                [

                    fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=licache:10m inactive=5m;

                    #指定缓存文件路径

                    fastcgi_cache_key "$request_method://$host$request_uri";

                   #

                    fastcgi_connect_timeout 300;

                    #指定连接到后端FastCGI的超时时间

                    fastcgi_send_timeout 300;

                    #指定向FastCGI传送请求的超时时间,这个值是已经完成两次握手后向FastCGI传送请求的超时时间

                    fastcgi_read_timeout 300;

                    #指定接收FastCGI应答的超时时间,这个值是已经完成两次握手后接收FastCGI应答的超时时间

                    fastcgi_buffer_size 64k;

                    #用于指定读取FastCGI应答第一部分需要用多大的缓冲区,这个值表示将使用1个64KB的缓冲区读取应答的第一部分(应答头),可以设置为fastcgi_buffers选项指定的缓冲区大小

                    fastcgi_buffers 8 64k;

                    #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等

                    fastcgi_busy_buffers_size 128k;

                    #默认值是fastcgi_buffers的两倍

                    fastcgi_temp_file_write_size 128k;

                    #表示在写入缓存文件时使用多大的数据块,默认值是fastcgi_buffers的两倍。fastcgi_cache表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502错误的发生,但是开启缓存也会引起很多问题,要视具体情况而定

                    fastcgi_cache licache;

                    fastcgi_cache_valid 200 302 1h;

                    fastcgi_cache_valid 301 1d;

                    fastcgi_cache_valid any 1m;

                    fastcgi_cache_min_uses 1;

                    fastcgi_cache_use_stale error timeout invalid_header http_500;

                    open_file_cache max=65535 inactive=20s;

                    open_file_cache_min_uses 1;

                    open_file_cache_valid 30s;

                    #用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一个小时,将301应答缓存1天,其他应答均缓存1分钟

                ]

                #[]内为实际include的fastcgi配置

            }

            #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.

            location ~ /.ht {

                deny all;

            }

            #禁止访问 .htxxx 文件

    }

    ################## URL配置设置 ##################

    ###location支持正则表达式和条件判断匹配,可以通过location指令实现nginx对动静态网页的过滤处理。

    location ~ * \.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$  

     {  

         root   /web/wwwroot/html;

        expires      30d;

        #expires指定静态文件的过期时间

     }

    #所有扩展名为gif|jpg|jpeg|bmp|png|ico|txt|js|css的静态文件都交给nginx处理

    location  ~ .*.jsp$

    {

        Index       index.jsp;

        Proxy_pass     http://localhost:8080;

    }

    #location对此虚拟机下动态网页的过滤处理,也就是将所有.jsp为后缀的文件都交给本机8080端口处理。

    ################ 负载均衡配置 (实例) ################

    upstream  myserver {

            # upstream  example.com;指定一个负载均衡器的名称为example.com;。该名称为任意##的,使用时调用即可。

            空/ip_hash/weight/fair(第三方)/url_hash(第三方);

            # 此处设置负载均衡策略

            server  192.168.56.102:8088        

            ## 空, 默认设置, 如果不设置负载均衡策略,默认使用轮询的方式进行负载,每一个请求按时间顺序逐一分配到不同的后端服务器。假设后端服务器down掉。能自己主动剔除。尽管这样的方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡,适用于图片服务器集群和纯静态页面服务器集群

            ip_hash;

            server 10.0.0.10:8080;

            server 10.0.0.11:8080;

            ##ip_hash调度算法,每个请求按IP的hash结果分配,是来自同一个IP的访客##固定访问一个后端服务器,有效解决了动态服务器存在的session共享问题,

            server  10.0.0.88:8088 weight=5

            server  10.0.0.77:8088 weight=10

            ##指定轮询几率,weight和訪问比率成正比,用于后端服务器性能不均的情况。例如以下所看到的。10.0.0.77的訪问比率要比10.0.0.88的訪问比率高一倍

            server 10.0.0.10:8080;

            server 10.0.0.11:8080;

            fair;

            ##按后端服务器的响应时间来分配请求。响应时间短的优先分配

            server 10.0.0.10:7777;

            server 10.0.0.11:8888;

            hash $request_uri;

            hash_method crc32;

            ##按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器。后端服务器为缓存时比較有效。

            ##注意:在upstream中加入hash语句。server语句中不能写入weight等其他的參数,hash_method是使用的hash算法。

            状态设置

            server 10.0.0.11:9090 down; 

            down:表示当前server暂时不参与负载均衡

            server 10.0.0.11:8080 weight=2

            weight:默认1,weight越大,负载的权重就越大。

             server  192.168.56.103:8088 max_fails=3  fail_timeout=20s;

            max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义错误。

            fail_timeout:经历max_fails次失败后,暂停服务的时间。

            server 10.0.0.11:7070 backup

            #backup:预留的备份机器,当其他所有的非backup机器出现故障或正在忙时,##才会请求backup机器,该机器压力最轻。当调度算法为ip_hash,状态不能##为backup和weight;

    }

    ############## http_proxy反向代理设置 ##############

    ####该部分亦可以使用写进proxy.conf文件中,再使用include指令包含进来,######从而使配置显得更简练

    ######用法:include   /usr/local/etc/nginx/nginx.conf ####

    client_body_buffer_size   128k;

    #client_body_buffer_size:用于指定客户端请求主体缓冲区大小,意思就是先保存到本地再传给用户。

    proxy_connect_timeout   75;

    #nginx跟后端服务器连接超时时间(代理连接超时),单位秒

    #连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)

    proxy_send_timeout   75;

    #proxy_send_timeout:后端服务器的数据回传时间,超时则断开连接

    proxy_read_timeout   75;

    #proxy_read_timeout:设置nginx从代课的后端服务器获取信息的时间,即在规定时间之内后端服务器必须传完所有的数据,否则断开连接。

    proxy_buffer_size   4k;

    #设置代理服务器(nginx)从后端服务器读取并保存用户头信息的缓冲区大小,默认与proxy_buffers大小相同,其实可以将这个指令值设的小一点

    proxy_buffers   4  32k;

    #proxy_buffers缓冲区,nginx针对单个连接缓存来自后端realserver的响应,网页平均在32k以下的话,这样设置

    proxy_busy_buffers_size    64k;

    #高负荷下缓冲大小(官方建议为proxy_buffers*2)

    proxy_temp_file_write_size   64k;

    #指定proxy缓存临时文件的大小

    proxy_temp_path    /usr/local/nginx/proxy_temp 1 2;

    #当缓存被代理的服务器响应到临时文件时,这个选项限制每次写临时文件的大小。proxy_temp_path(可以在编译的时候)指定写到哪那个目录。

    proxy_redirect off;

    # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP

    proxy_set_header  Host $host;

    proxy_set_header  X-Real-IP $remote_addr; 

    proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;

    #proxy_set_header:设置由后端服务器获取用户主机或真实IP地址,以及代理者的真实IP

    ############### stub_status监控模块配置 ###############

    stub_status模块主要用于查看Nginx的一些状态信息

    本模块默认是不会编译进Nginx的,如需手动添加./configure –with-http_stub_status_module 

      location /Nginx_status {

            stub_status   on;

            #启用stub_status的工作状态统计功能

            access_log     log/NginxStatus.log;

            # access_log用来指定stub_status模块的访问日志文件

            auth_basic       “NginxStatus”;

            #auth_basic是nginx的一种认证机制

            auth_basic_user_file     ../htpasswd;

            #auth_basic_user_file用来指定认证的密码文件

            #nginx的auth_basic采用的是与Apache兼容的密码文件,所以需要采用

            #Apache的htpasswd命令来生成密码文件

            #如添加一个fieldyang 用户可以用该方式生成密码文件

            #/usr/local/apache/bin/htpasswd  –c /opt/nginx/conf/htpasswd fieldyang  

            #要查看nginx运行状态,只需在http://ip/NginxStatus输入账号密码即可

            allow  192.168.10.0/24;

            allow  192.168.56.100;

            deny all;

     }

    相关文章

      网友评论

          本文标题:nginx

          本文链接:https://www.haomeiwen.com/subject/fnnijqtx.html