• Nginx学习笔记二基本配置


    1.Nginx的配置文件默认在Nginx程序安装目录的conf二级目录下,主配置文件为nginx.conf.假设您的Nginx安装

    在/usr/local/webserver/nginx/目录下,那么默认的主配置文件则为/usr/local/webserver/nginx/nginx.conf.
    2.Nginx配置参数:
    (1)user www www 指定使用的用户和用户所在的组
    (2)worker_processes 8 指定工作衍生进程数(一般等于CPU的总核数或总核数的两倍,如两个四核CPU,则总核数为8)
    (3)error_log /data1/logs/nginx_error.log crit;指定错误日志存放路径,错误日志记录级别[debug|info|notice|warn|

    error|crit]
    (4)pid  /usr/local/webserver/nginx/nginx.pid; 指定pid存放的路径
    (5)events{use epoll;} 指定使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD系统推荐采用kqueue模型.
    (6)events{worker_connections 51200;}指定允许的连接数
    (7)http{charset gb2312;}设置使用的字符集,如果一个网站有多种字符集,请不要随便设置,应让程序员在HTML代码中通过

    Meta标签设置
    (8)http{client_max_body_size 8M;}设置客户端能够上传的文件大小.
    (9)http{gzip on ;}开启gzip压缩
    3.nginx.conf配置文件结构如下:
    ...
    events
    {
    ...
    }
    http
    {
    ...
    server{
    ...
    }
    server{
    ...
    }
    ...
    }
    4.Nginx可以配置多种类型的虚拟主机:一是基于IP的虚拟主机,二是基于域名的,三是基于端口的
    5.本地回环lo,被看作室永远不会宕掉得接口.它的主要作用是测试本机的网络配置,能ping通127.0.0.1说明本机的网卡和IP

    协议安装都没有问题.
    6.IP别名背后的概念很简单:可以在一块物理网卡上绑定多个IP地址.这样就能够在使用单一网卡的同一服务器上运行多个基

    于IP的虚拟主机.如果要在eth0网卡设备上添加两个IP别名192.168.8.43和192.168.8.44可以通过以下ifconfig 和route命令

    来进行:
    /sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up
    /sbin/route add -host 192.168.8.43 dev eth0:1
    /sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up
    /sbin/route add -host 192.168.8.44 dev eth0:2
    配置后如果能从另外一台服务器ping 192.168.8.43和192.168.8.44 ,如果能ping通,则证明配置无误.但是通过ifconfig 和

    route配置的IP别名在服务器重启后会消失.不过可以将这两条命令添加到/etc/rc.local文件中,让系统开机时自动运行,
    vi /etc/rc.local
    在文件末尾增加以下内容,然后保存即可.
    /sbin/ifconfig eth0:1 192.168.8.43 broadcast 192.168.8.255 netmask 255.255.255.0 up
    /sbin/route add -host 192.168.8.43 dev eth0:1
    /sbin/ifconfig eth0:2 192.168.8.44 broadcast 192.168.8.255 netmask 255.255.255.0 up
    /sbin/route add -host 192.168.8.44 dev eth0:2
    无论是通过IP别名在一台服务器上配置多个IP地址,还是通过多块网卡在服务器上配置多个IP地址,在Nginx中都能将其配置

    成为基于IP的虚拟主机.

    7.在Nginx配置文件中,分别对192.168.8.43,192.168.8.44,192.168.8.45三个IP配置三个纯静态HTML支持的虚拟主机
    http{
      #第一个虚拟主机
      server{
        #监听的IP和端口
        listen 192.168.8.43:80;
        #主机名称
        server_name 192.168.8.43;
        #访问日志文件存放路径
        access_log logs/sever1.access.log combined ;
        location /
        {
          #默认首页文件,顺序从左到右,如果找不到index.html,则找index.htm
          index index.html index.htm
          #HTML网页文件存放的目录
          root /data0/htdocs/server1;
        }
      }
      #第二个虚拟主机
      server{
        #监听的IP和端口
        listen 192.168.8.44:80;
        #主机名称
        server_name 192.168.8.44;
        #访问日志文件存放路径
        access_log logs/sever2.access.log combined ;
        location /
        {
          #默认首页文件,顺序从左到右,如果找不到index.html,则找index.htm
          index index.html index.htm
          #HTML网页文件存放的目录
          root /data0/htdocs/server2;
        }
      }
      #第三个虚拟主机
      server{
        #监听的IP和端口
        listen 192.168.8.45:80;
        #主机名称
        server_name 192.168.8.45;
        #访问日志文件存放路径
        access_log logs/sever3.access.log combined ;
        location /
        {
          #默认首页文件,顺序从左到右,如果找不到index.html,则找index.htm
          index index.html index.htm
          #HTML网页文件存放的目录
          root /data0/htdocs/server3;
        }
      }
    }

    从配置文件可以看出,一段server{...}就是一个虚拟主机,如果要配置多个虚拟主机,建立多段server{}配置即可,监听的IP和

    端口也可以不写IP地址,只写端口,把它配置成"listen 80",则表示监听该服务器上所有Ip的80端口,可以通过server_name区

    分不同的虚拟主机.

    8.基于域名的虚拟主机是最常见的虚拟主机,只需配置DNS服务器,将每个主机名映射到正确的IP地址,然后配置Nginx服务器,

    令其识别不同的主机名即可.这种技术可以使很多虚拟主机共享同一个IP地址.

    9.Nginx中配置基于域名的虚拟主机.主机1对aaa.domain.com的访问都由它来处理,主机2对bbb.otherdomain.com的访问都由

    它来处理,主机3对域名www.domain.com,domain.com及aaa.domain.com之外的所有*.domain.com二级域名的访问都由它来处理

    .每个虚拟主机的网页文件分别存放在了不同的目录中,每个虚拟主机使用了不同的日志文件来记录访问日志.配置情况如下:
    http{
      #第一个虚拟主机
      server{
          #监听的端口
        listen 80 ;
        #主机名称
        server_name aaa.domain.com;
        #访问日志文件存放路径
        access_log logs/aaa.domain.com.access.log combined ;
        location /
        {
            index index.html index.htm;
            root /data0/htdocs/aaa.domain.com;
        }
      }
      #第二个虚拟主机
      server{
          listen 80;
        server_name bbb.otherdomain.com;
        access_log logs/bbb.otherdomain.com.access.log.combined ;
        location /
        {
            index index.html index.htm
            root /data0/htdocs/bbb.otherdomain.com;
        }
      }
      #第三个虚拟主机
      server{
        listen 80;
        server_name www.domain.com domain.com *.domain.com;
        access_log logs/bbb.domain.com.access.log bombined ;
        location /
        {
            index index.html index.htm ;
            root /data0/htdocs/domain.com;
        }
      }
    }

    10.Nginx的日志文件配置与切割
    与Nginx日志相关的指令主要有两条,一条是log_format,用来设置日志的格式,另外一条是access_log,用来指定日志文件的

    存放路径,格式和缓存大小.两条指令在Nginx配置文件中的位置可以在http{...}之间,也可以在虚拟主机之间,即server{...}

    11.用log_format指令设置日志格式
    设置格式为:
    log_format name format [format ...]
    name 表示定义的格式名称 , format 表示定义的格式样式. log_format有一个默认的,无须设置的combined日志格式设置.也

    可以自定义一份日志记录格式,不过需要注意,log_format指令设置的name名称在Nginx配置文件中是不能重复的.
    具体参数如下:
    log_format combined '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';
    注意:如果Nginx作为Web服务器,位于负载均衡设备,Squid,Nginx反向代理之后,就没法获得客户端的真实IP地址了.即

    $reomte_addr变量拿到得不是客户端的IP地址,而是反向代理服务器的IP地址.但是反向代理服务器在转发请求的HTTP头信息

    中,可以增加X-Forwarded-For信息,用来记录原有的客户端IP地址和原来客户端请求的服务器地址.这个时候可以自定义日志

    格式.如下.
    log_format mylogformat '$http_x_forwarded_for - $remote_user [$time_local]'
                   '"$request" $status $body_bytes_sent'
                   '"$http_referer" "$http_user_agent"';
    在日志格式中,变量
    $remote_addr 和$http_x_forwarded_for用于记录IP地址
    $remote_user 用来记录远程客户端用户名称;
    $time_local用于记录访问时间与时区;
    $request用于记录请求URL与HTTP协议;
    $status用于记录请求状态,例如成功时状态为200,页面找不到时状态为404;
    $body_bytes_sent用于记录发送给客户端的文件主体内容大小
    $http_referer用于记录是从哪个页面链接访问过来的;
    $http_user_agent用于记录客户端浏览器的相关信息

    日志信息如下:
    123.42.4.194 - - [12/Mar/2009:02:18:23 +0800] "GET / HTTP/1.1" 200 36179 "-" "Mozilla/4.0 (compatible;MSIE

    7.0;Windows NT 5.1;Mozilla/4.0 (compatible; MSIE6.0; Windows NT 5.1; SV1) ; CIBA; .NET CLR 2.0.50727)"
    分别对应以上的变量


    12.用access_log指令指定日志文件存放路径
    access_log path [format [buffer=size | off]]
    path表示日志文件的存放路径,format表示使用log_format指令设置的日志格式的名称,buffer=size 表示设置内存缓存区的

    大小,例如可以设置buffer=32k
    (1)不记录日志.可以用如下指令关闭记录.
    access_log off ;
    (2)使用默认的combined格式的日志记录,使用如下示例:
    access_log /data1/logs/filename.log;

    access_log /data1/logs/filename.log combined ;
    (3)如果使用自定义格式的日志记录,就需要两条命令了.mylogformat是日志格式名称
    log_format mylogformat '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" $http_x_forwarded_for' ;
    access_log /data1/logs/access.log mylogformat buffer=32k
    (4)在Nginx0.7.4之后的版本中,access_log指令中的日志文件路径可以包含变量.如:
    access_log /data1/logs/$server_name.log combined
    如果sever_name指令设置的虚拟主机名称为test.domain.com.那么access_log指令将把访问日志记录在
    /data1/logs/test.domain.com.log文件中

    13.日志文件中含有变量的限制
    (1)Nginx进程设置的用户和组必须有对该路径创建文件的权限.假设Nginx的user指令设置的用户名和用户组都是www,

    而/data1/logs/目录的用户名和用户组为root.日志文件/data1/logs/test.domain.com.log将无法被Nginx创建.
    (2)缓冲将不会被使用.(这个没看明白)
    (3)每一条日志记录,日志文件都将先打开文件,再写人日志记录,然后马上关闭,这个比较耗性能,为了提高包含变量的日志文

    件存放路径的性能,须要使用open_log_file_cache指令设置经常被使用的日志文件描述符缓存.

    语法:
    open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time] | off

    例如:open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m ;

    max:设置缓存中的最大文件描述符数量
    inactive: 设置一个时间,如果在设置的时间内没有使用此文件描述符,则自动删除此描述符,默认是10秒
    min_uses:在参数inactive指定的时间范围内,如果日志文件超过被使用的次数,则将该日志文件的描述符记入缓存,默认次数

    为1.
    valid:设置检查时间,看变量指定的日志文件路径与文件名是否仍然存在,默认时间为60秒.

    open_log_file_cache off 禁止使用缓存.


    14.日志文件的切割
    生产环境中的服务器,由于访问日志文件增长速度非常快,日志太大会严重影响服务器效率.同时为了方便对日志进行分析计算

    ,须要对日志进行定时切割.定时切割的方式有按月切割,按天切割,按小时切割.最常用的是按天切割.

    切割命令如下:
    mv /data1/logs/access.log /data1/logs/20090318.log
    kill -USR1 Nginx主进程号

    或者(如果在配置文件中使用了 pid /usr/local/webserver/nginx/nginx.pid指令)

    mv /data1/logs/access.log /data1/logs/20090318.log
    kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid' 这样的话就不用ps查找Nginx主进程号了.

    如果要让它每天定时切割日志,可以编写shell脚本.并且利用crontab来每天定时运行.
    shell 脚本代码:

    #!/bin/bash
    #定义Nginx日志文件的存放路径
    logs_path = "/data1/logs/"

    mkdir -p ${logs_path}$(date -d "yesterday" + "%Y")/$(date -d "yesterday" +"%m")/
    mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday"+"%m")/
    access_$(date -d "yesterday" + "%Y%m%d").log
    kill -USR1 'cat /usr/local/webserver/nginx/nginx.pid'

    再配置crontab,输入crontab -e
    输入:
    00 00 * * * /bin/bash /usr/loca/webserver/nginx/sbin/cut_nginx_log.sh

    shell脚本和crontab配置主要实现的功能是:假设今天的日期为2009年5月19日,Nginx当前的日志文件

    为/data1/logs/access.log,2009年5月20日00:00会执行cut_nginx_log.sh脚本,cut_nginx_log.sh脚本首先创建一个目录
    /data1/logs/2009/05/,然后将/data1/logs/access.log文件移动并重命名为/data1/logs/2009/05/access_20090519.log,

    再发送kill -USR1信号给Nginx主进程,告诉Nginx重新生成一个/data1/logs/access.log文件,2009年5月20日的日志记录在这

    个新生成的日志文件中.而/data1/logs/2009/05/access_20090519.log文件,就是2009年5月19日的日志文件.



    15.Nginx的压缩输出配置.

    经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样用户浏览页面的时候速度会快很多.服务器压缩,浏览器解压

    缩.IE,Firefox,Opera,Chrome都支持gzip解压缩.
    压缩输出的相关指令位于http{...}两个大括号之间:
    gzip on ;
    gzip_min_length 1k;
    gzip_buffers 4 16k ;
    gzip_http_version 1.1 ;
    gzip_comp_level 2 ;
    gzip_types text/plain application/x-javascript text/css application/xml ;
    gzip_vary on ;

    16.Nginx的自动列目录配置.
    感觉没什么用,就不写了,用到再查.

    17.Nginx的浏览器本地缓存设置.
    浏览器在用户磁盘上对最近请求过的文档进程存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就

    可以加速页面的阅历.
    通过expires指令输出Header头来实现缓存.控制HTTP应答中的"Expires"和"Cache-Control"的Header头信息.
    语法: expires [ time | epoch | max | off]
    默认值为: expires expires off
    作用域: http , server , location
    time可以为正数或负数,Expires头标的值将通过当前系统时间加上您设定的time值来获得.
        "Cache-Control"头标的值由指定的时间来决定.
        负数:Cache-Control:no-cache
        正数或零:Cache-Control:max-age=您指定的时间的秒数,-1表示永远过期.

    epoch指定Expires的值为1 january,1970,00:00:01 GMT

    max指定"Expires”的值为31December 2037 23:59:59 GMT , "Cache-Control"的值为10年

    off表示不修改"Expires"和"Cache-Control"的值.

    18网站一般缓存设置.不常被修改的javascript,图片, Flash ,css可以通过expires设置浏览器缓存.
    配置代码如下:
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d ;
    }
    location ~ .*.(js|css)?$
    {
        expires 1h ;
    }
    对图片和flash缓存30天,对css 和js 缓存1个小时.

  • 相关阅读:
    【Object-C】判断指针类型,isKindOfxxx
    【Object-C】继承,super关键字
    Echart的angularjs封装
    ng-validate
    random background
    新发现。css3控制浏览器滚动条的样式
    如何灵活利用免费开源图标字体-IcoMoon篇
    干货分享:让你分分钟学会 javascript 闭包
    webpack
    css黑魔法
  • 原文地址:https://www.cnblogs.com/lidabo/p/4177083.html
Copyright © 2020-2023  润新知