nginx笔记汇总

常用地址

官网:nginx

下载地址(选择Stable version 下的也就是稳定版本): http://nginx.org/en/download.html

安装步骤

 #下载地址(选择Stable version 下的也就是稳定版本)
http://nginx.org/en/download.html  
#上传tar包到liunx上       
rz -bye       
#解压tar包                            
tar xvf  nginx-1.26.2.tar.gz    
#进入安装目录        
cd /root/nginx-1.26.2      
#安装nginx需要的依赖               
yum -y install pcre yum -y install openssl openssl-devel yum -y install gd-devel 
#编译前的配置和依赖检查  
./configure --user=nginx --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module --with-http_image_filter_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_stub_status_module --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --without-http_rewrite_module              
#编译安装
make install
#进入默认安装路径                                 
cd /usr/local/nginx/sbin    
#添加nginx用户                 
sudo useradd -s /sbin/nologin -M nginx  
 #启动nginx      
./ nginx 
#查看是否有返回                                    
curl http://localhost:80     
#查看版本                 
./ nginx -v                                   

常用命令

进入到安装默认路径下
cd  /usr/local/nginx/sbin

./nginx                                #启动nginx
./nginx -t                             #在不启动nginx的情况下,使用-t参数测试配置文件是否有错误
./nginx -v                             #查看版本信息
./nginx -s stop                        #强制停止nginx服务
./nginx -s quit                        #优雅的停止服务
./nginx -s reopen                      #日志文件回滚
./nginx -s reload                      #重新加载配置文件

配置

     这些配置项都是用于调试测试的配置

1 daemon on|off;    是否以守护进程方式运行nginx(默认为 on )守护进程(daemon)是脱离终端并且在后台运行的进程,不过nginx还提供了关闭守护进程模式,为了方便跟踪调试nginx。

2 master_process on|off;  是否以master/worker方式工作(默认为 on )nginx是以一个master进程管理多个worker进程的方式运行的,如果关闭了master_process方式,就不会fork出worker字进程来处理请求,而是用master进程自身来处理请求。

3 error_logpathfile level;  error日志的设置    (默认为 error_log logs/error.long error);我们可以根据自己需求设置error日志的路径和级别,pathfile参数可以是一个具体文件,默认是logs/error.log文件,最好将它放在磁盘足够大的位置,pathfile也可以 /dev/null,这样就不会输出任何日志了,这也是关闭error日志的唯一手段;pathfile也可以是stderr,这样日志会输出到标准错误文件中。 level是日志的输出级别,取值范围是dedug、info、notice、warn、error、crit、alert、emerg从左至右级别依次增大。当设定为一个级别时,大于或等于该级别的日志都会被输出到pathfile文件中,小于该级别的日志则不会输出。如果日志级别设定到debug,必须在configure时加入 --with-debug配置项。   

4  debug_points[stop|abort]  是否处理几个特殊的调试点这个配置项是帮助用户跟踪调试nginx的,它接受两个参数:stop和abort;如果设置为stop那么nginx的代码执行到这些调试点时就会发出SIGSTOP信号用于调试,如果设置为abort则会产生一个coredump文件,可以用gdb来查看nginx当时的各种信息。 通常不会使用这个配置。

5  debug_connection[IP|CIDR] 仅对指定的客户端输出debug级别的日志这个配置属于事件类配置,它必须放在events{}中才有效,它的值可以是IP地址或者CIDR地址;例如

               events{

                   debug_connection 10.224.66.14;

                   debug_connection  10.224.57.0/24;      

               }只有来自以上IP地址的请求才会输出debug级别的日志,该配置确保已在configure时已加入--with-debug参数。

6  worker_rlimit_core size;限制coredump核心转储文件的大小在linux系统中,当进程发生错误或收到信号而终止时,系统会将进程执行时的内存内容(核心影像)写入一个文件(core文件),以作为调试之用。如果不加以限制,那么可能一个core文件会达到几GB,通过worker_rlimit_core可以限制core文件的大小。

7   working_directory path;  指定coredump文件生成目录这个配置唯一用途就是设置coredump文件所放置的目录,因此需确保worker进程有权限向working_directory 指定的目录中写入文件。    

配置项是正常运行的配置 

3.8 env VAR|VAR=VALUE  定义环境变量可以让用户直接设置操作系统上的环境变量。    例如:env  TESTPATH=/tmp/;

3.9  includepathfile;  嵌入其他配置文件 include配置项可以将其他配置文件嵌入到当前的nginx.conf文件中,它的参数可以是绝对路径,也可以是相对路径 (相当于nginx的配置目录,即nginx.conf所在目录); 例如:include mime.types;include vhost/*.conf;

3.10  pid path/file;   pid文件的路径(默认为  pid logs/nginx.pid;);保存master进程ID的pid文件存放路径。默认与configure执行时的参数 --pid-path 所指定的路径是相同的,也可随时修改,但应确保nginx有权在相应的目标中创建pid文件,该文件直接影响nginx是否可以运行。

3.11 user username[groupname];  Nginx worker进程运行的用户及用户组(默认为  user nobody nobody;);user用于设置master进程启动后,fork出的worker进程运行在哪个用户和用户组下,当按照 user username 设置时,用户组名和用户名相同。若用户在configure命令执行时使用了参数 --user=username和 --group=groupname 此时nginx.conf将使用参数中指定的用户和用户组。

3.12  worker_rlimit_nofile limit;  指定Nginx  worker进程可以打开的最大句柄描述符个数。 

3.13  worker_rlimit_sigpending limit;  限制信号队列设置每个用户发往Nginx的信号队列大小。也就是说,当某个用户的信号队列满了,这个用户再发送的信号会丢掉。    

优化性能的配置项     

3.14  worker_processes number;  Nginx  worker进程个数 (默认为: 1)

3.15  worker_cpu_affinity cpumask[cpumask]   绑定Nginx  worker进程到指定的CPU内核绑定worker进程到指定的CPU内核,每一个worker进程都独享一个CPU,就在内核的调度策略上实现了完全的并发。解决了同步问题。例如:如有4颗CPU内核,设置如下worker_processes  4;worker_cpu_affinity 1000  0100   0010  0001;

3.16  ssl_engine device;   SSL硬件加速对SSL进行配置加快SSL协议的处理速度查看命令为:openssl engine -t 

3.17  timer_resolution t; 系统调用gettimeofday的执行频率如果希望日志文件中每行打印的时间更准确,可以使用。否则其它情况下可以不用配置

3.18  worker_priority nice;  Nginx  worker进程优先级设置(默认为:   worker_priority 0)

优先级由静态优先级和内核根据进程执行情况所做的动态调整(目前只有土5的调整)共同决定。nice值是进程的静态优先级,取值范围是-20~+19,-20是最高优先级,+19是最低优先级。因此Nginx需要占用更多的系统资源,可以把nice值配置的更小一些,但不建议比内核进程的nice值(通常为-5)还要小。

 事件类配置项

3.19  accept_mutex[on|of]  是否打开accept锁 (默认为:  on);accept_mutex是Nginx的负载均衡锁,该锁可以让多个worker进程轮流地、序列化地与新的客户端建立TCP链接。accept锁是默认打开的,如果关闭它,那么建立TCP链接的耗时会更短,但worker进程之间的负载会非常不均衡,因此不建议关闭它。  

3.20  lock_file path/file;  lock文件的路径(默认是:  lock_file logs/nginx.lock);accept锁配置打开时 lock_file配置才会生效。

3.21  accept_mutex_delay Nms;  使用accept锁后到真正建立连接之间的延迟时间(默认为:  500ms);accept锁打开后,同一时间只有一个worker进程能够取到accept锁,这个accept锁不是阻塞锁,如果取不到会立刻返回。如果worker进程没有取到accept锁,需要等accept_mutex_delay定义的时间间隔后才能再次取锁

3.22  multi_accept[on|off];  批量建立新连接 (默认为:  off);当事件模型通知有新连接时,尽可能地对本次调度中客户端发起的所有TCP请求都建立连接。

3.23  use[kqueue|rtsig|epoll|dev|poll|select|poll|eventport]; 选择事件类型 (默认:Nginx会自动使用最合适的事件模型);对Llnux操作系统来说,可供选择的事件驱动模型有poll、select、epoll三种,epoll是性能最高的一种(可以处理大并发连接)。

3.24  worker_connections number;  每个worker的最大连接数定义每个worker进程可以同时处理的最大连接数

日志文件备份(自己编写)

自己编写脚本名称:   backupsLog.sh  

        1.在linux中添加定时任务执行命令: crontab -e

        2.定时时间: */1 * * * * sh /data/backupsLog.sh   # 每一分钟执行一次该文件

        3.脚本内容如下:

            LOGPATH=/usr/anzhuanglujing/nginx/logs #日志文件的存储路径

            BASEPATH=/home/$(date -d yesterday +%Y%M) ##备份日志文件的存储路径(按照年月文件夹存储)

             mkdir -p $BASEPATH #创建备份的文件夹

             bak=$BASEPATH/$(date -d yesterday +%M%d)text.log #备份日志文件的名称和格式

             mv $LOGPATH $bak #把原日志文件移动到备份文件夹下并修改日志名称和格式

             touch $LOGPATH #在原有日志路径下重写一个新的日志文件

             kill -USR1 `cat usr/anzhuanglujing/nginx/logs/nginx.pid` #重启linux服务

nginx配置文件(nginx.conf)中的 location执行流程

1.  得到前端地址栏URL。

2.  判断精准(=)是否命中,如果命中,立即返回结果并结束解析过程。

3.  判断普通是否命中,如果有多个命中,记录下来最长的命中结果。备注:记录但不结束,最长的为准 

4.  判断正则表达式(~)的解析结果,按照配置里的正则表达式顺序为准,由上到下开始匹配,一旦有匹配结果立即结束,并结束解析过程。

备注: 1 普通匹配:没有顺序,因为是按命中的长短确定的。

          2 正则表达式:是有序匹配,因为是从前往后命中的。    

rewrite 重写

常用命令:

if(条件){} 设定条件,进行重写    

 set 设置变量  

 return 返回状态码  

break 跳出rewrite      

rewrite重写

gzip压缩 配置的常用参数

     gzip on|of; #是否开启gzip

     gzip_buffers 32 4K | 16 8K #缓冲(压缩在内存中缓冲几块,每块多大)

     gzip_comp_level [1-9] #压缩级别(级别越高,压的越小但浪费CPU计算资源)   推荐6

     gzip_disable  #什么样的URL不进行gzip    正则匹配UA

     gzip_min_length 4000   #开始压缩的最小长度(比如小于4KB时将不再压缩)

     gzip_http_version 1.0 | 1.1  #开始压缩的http协议版本(可以不设置)

     gzip_proxied    #设置请求者代理服务器该如何缓存内容

     gzip_types text/css text/xml appliction/x-javascript;   #设置需要压缩文件的类型 (比如:css、js、xml等)

     gzip_vary on | off;  #是否开启gzip压缩标志

    备注: 图片、mp3、二进制文件不必压缩,因为压缩率较小,而且需要注意的是压缩是非常耗费CUP资源的。

expires缓存配置

备注:

 1、服务器的日期要准确,如果服务器的日期落后于实际日期,会造成换成失败。

 2、304也是一种很好的缓存手段。

 3、原理是:服务器响应文件内容时同时响应etag标签(内容的签名、内容一变,它也变)和last_modified_since标签值

 4、浏览器下次请求时,头信息会发送这连个标签,服务器检测文件有没有发生变化,如果没有发生变化直接头信息返回etag标签和last_modified_since标签

  5、浏览器查看内容无变化,直接调用本地缓存。

  6、对于变化周期较短的,比如静态html、js、css等比较适合。

代码实现:

    写在location或if段里面

              expires 30s;  30秒过期

              expires 30m;  2分钟过期

              expires 30h;  2小时过期

              expires 30d;  30天过期

 nginx实现反向代理和负载均衡

1、反向代理(也叫动静分离)的实现方式:  使用关键字:proxy_pass
     #使用反向代理
     location ~ \.php$ {  #~(波浪号)是正则匹配
        proxy_pass   http://127.0.0.1:8080;  #只是单台机器
     }


2、负载均衡的实现方式:  使用关键字:upstream  (把多台机器绑定在一起并起一个组名)
        #负载均衡的配置
           #参数介绍:  
              #   1、test:负载均衡的组名
              #   2、weight(权重): 配置的权重越高,该机器被访问的就越多;默认配置为  1
              #   3、max_fails: 连接失效次数
              #   4、fail_timeout:连接失效时间(秒)
        upstream text{
            server localhost:81  weight=1  max_fails=2 fail_timeout=3;  #配置的第一台机器
            server localhost:82  weight=1  max_fails=2 fail_timeout=3;  #配置的第二台机器
        }
        #负载均衡配置的 第一台机器
        server {
            listen       81;   #监听端口
            server_name  localhost;  #监听域名 
            root html;
            access_log /logs/81-access.log main;  #存储本台机器的日志文件路径
        }
         #负载均衡配置的 第二台机器
         server {
            listen       82;   #监听端口
            server_name  localhost;  #监听域名
            root html;
            access_log /logs/81-access.log main;  #存储本台机器的日志文件路径
         }
         #使用负载均衡
          location ~ \.php$ {  #~(波浪号)是正则匹配
              proxy_set_header X-Forwarded-For $remote_addr;  #给负载均衡的机器传递前端访问的IP地址
              proxy_pass   http://test;  #多台机器使用 组名(负载均衡)

           }


#备注:负载均衡默认的算法:根据后端配置的服务器顺序逐个请求。也可以使用第三方一致哈希性算法模块(第三方算法有很多,根据自己的服务器寻找合适的)

整体集群搭建

搭建思路:

           1、总共有4台服务器分别为: A(硬盘比较大)、B(内存比较)、C(内存比较大)、D(内存比较大)

           2、硬盘比较大的适合做  数据库服务器(A)

           3、内存比较大做 Nginx和缓存服务器(B)

           4、内存比较大做 java服务(C)

           5、内存比较大做 内存缓存 比如memcached(D)

高并发调优思路(单台nginx)

备注:高并发其实就是指服务器能打开多少个 Socket 和 文件;

1、Socket

    1.1 系统服务器设置:1.1.1 最大连接数somaxconn;a.查看当前机器打开Socket的连接数命令:   more /proc/sys/net/core/somaxconn; b.设置当前机器打开Socket的连接数命令 (设置为5万个): echo 50000 >  /proc/sys/net/core/somaxconn(该命令临时有效,机器重启后失效);1.1.2 加快TCP连接的回收  tcp_tw_recycle;a.查看TCP是否快速回收命令(0否):      cat /proc/sys/net/ipv4/tcp_tw_recycle; b.设置TCP快速回收命令(设置为1是):echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle  (该命令临时有效,机器重启后失效);1.1.3 空的TCP是否允许回收利用  tcp_tw_reuse;a.查看TCP是否回收利用命令: cat /proc/sys/net/ipv4/tcp_tw_reuse;b. 设置TCP回收利用命令: echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse(该命令临时有效,机器重启后失效);1.1.4 洪水攻击   禁止洪水抵御;a.查看是否设置为洪水抵御命令:(1是)    more /proc/sys/net/ipv4/tcp_syncookies;b.设置为禁止洪水抵御命令:(0否)echo 1 > /proc/sys/net/ipv4/tcp_syncookies;

    1.2  nginx:a. nginx的子进程能打开Socket的连接数  worker_connections (在nginx.conf配置文件中)

                                  events {  
                                         worker_connections  10240;    #设置成1万个
                                  }

                          b. 设置nginx每个 TCP 连接最多可以保持多长时间(默认65秒): keepalive_timeout 60;

2、文件

        2.1 系统服务器配置:a. 查看每个进程可打开的文件数命令(默认为1024):      ulimit -n;b.  设置每个进程可打开的文件数命令(设置为5万):      ulimit -n 50000 (临时有效,重启失效);

        2.2 nginx: nginx的子进程允许打开的文件数:在nginx.conf配置文件中加入(在全局区域):  worker_limit_nofile 10000; 

 配置文件

#以下内容是nginx.conf配置文件内容,供参考使用
/usr/local/nginx/conf/nginx.conf               #配置文件默认路径



# 全局区域   作用:主要会设置一些影响nginx服务器整体运行的配置指令,包括配置运行nginx服务器的用户(组)、允许生成worker_processes(服务器并发处理数)、进程PID存放路径、日志存放路经和类型、配置文件的引入等
#user  nobody;
#处理并发数(根据机器的内核和CPU设置,比如4核机器,设置为4)
worker_processes  1;  

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


# events区域   作用:该模块涉及的指令主要影响nginx服务器与用户的网络连接,常用的配置项有:是否开启对多worker_process下的网络连接进行序列化、是否允许同时接收多个网络连接、选取事件驱动模型来处理请求、每个worker_process可以同时支持的最大连接数等;
events {  
     # nginx最大连接数
    worker_connections  1024; 
}



#http区域    作用:文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单连接请求数上限等
http { 
    #引入nginx支持的文件类型
    include       mime.types;
    #当nginx遇到不支持的文件类型时,以8进制的形式返回给前端
    default_type  application/octet-stream;


    #这是main的日志格式,mian类型的选项有:
    #1、$remote_addr: 远程IP地址
    #2、$remote_user [$time_local]:  远程用户访问的时间
    #3、$request: 请求方式
    #4、$status: 请求状态
    #5、$body_bytes_sent: 主题字节
    #6、$http_referer: 上一个页面来自哪里
    #7、$http_user_agent: 用户代理
    #8、$http_x_forwarded_for: 
    #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;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;


    #负载均衡的配置
    #参数介绍:  
    #   1、test:负载均衡的组名
    #   2、weight(权重): 配置的权重越高,该机器被访问的就越多;默认配置为  1
    #   3、max_fails: 连接失效次数
    #   4、fail_timeout:连接失效时间(秒)
    upstream text{
        server localhost:81  weight=1  max_fails=2 fail_timeout=3;  #配置的第一台机器
        server localhost:82  weight=1  max_fails=2 fail_timeout=3;  #配置的第二台机器

    }

    #server区域   该区域和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是一样的,该技术的产生是为了节省互联网服务器硬件成本,每个http区域可以包含多个server区域,每个server区域相当于一个虚拟主机,而每个server区域包含可以包含多个location区域


    #server区域   作用:配置本虚拟主机的监听、名称、IP配置
    #负载均衡配置的 第一台机器
    server {
         #监听端口
         listen       81;  
         #主机名称
        server_name  localhost; 
        root html;
        access_log /logs/81-access.log main;  #存储本台机器的日志文件路径
    }
    #负载均衡配置的 第二台机器
    server {
        listen       82;   #监听端口
        server_name  localhost;  #监听域名
        root html;
        access_log /logs/81-access.log main;  #存储本台机器的日志文件路径
    }


    server { #server区域,基于域名的虚拟主机
        listen       80;   #监听端口
        server_name  localhost;  #监听域名 

        #gzip压缩的配置(在改位置配置表示全局有效)
        
        gzip on; #是否开启gzip
        gzip_buffers 32 4K; #缓冲(压缩在内存中缓冲几块,每块多大)
        gzip_comp_level 6; #压缩级别(级别越高,压的越小但浪费CPU计算资源)   推荐6
        gzip_min_length 4000;   #开始压缩的最小长度(小于改字节时将不再压缩)
        gzip_types text/css text/xml appliction/x-javascript;   #设置需要压缩文件的类型 (比如:txt、xml、html、css等)

        #charset koi8-r;

        #access_log  logs/host.access.log  main; #该server段访问的日志路径是logs/host.access.log  日志格式是main,



        # localhost区域    作用:基于nginx服务器接收到的请求字符串,对虚拟主机名称之外的字符串进行匹配,对特定的请求进行处理,地址定向,数据缓存和应答控制等,还有许多第三方模块的配置也在这里进行
        #配置规则  1.首先查看有没有精准匹配,如果有,则停止匹配过程
        location / { #定位,把特殊的路径或文件再次定位,如image目录单独处理

            #使用 rewrite(重写)  判断不存在的地址时,跳转到自己配置的错误地址
            if (!-e $document_root$fastcgi_script_name){
                rewrite ^.*$ /404.html;
                break;
            }
            root   html;   #根目录定位
            index  index.html index.htm;
        }

        
        #缓存配置  使用正则表达式匹配以下格式(~*)不区分大小写  如果命中,就缓存1天
        location ~* \.(jpg|jpeg|gif|png) {
             expires 1d;  #缓存一天
        }


        #使用反向代理 或者 负载均衡
        location ~ \.php$ {  #~(波浪号)是正则匹配
            proxy_set_header X-Forwarded-For $remote_addr;  #给负载均衡的机器传递前端访问的IP地址(负载均衡)
            proxy_pass   http://127.0.0.1:8080;  #单台机器(反向代理)
            proxy_pass   http://test;  #多台机器使用 组名(负载均衡)

        }


        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {  #=(等于号)是精准匹配
            root   html;
        }

        #
        #location php$ {  #没有任何符号是一般匹配
        #    proxy_pass   http://127.0.0.1;
        #}

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {  #~(波浪号)是正则匹配
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值