Nginx 配置文件解释及简单配置

Nginx配置文件大致分为以下几个块

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

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

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

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

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

 

配置文件详细表述

# 配置用户或者组,默认为nobody
user  administrator;

# 允许生成的进程数,默认为1
worker_processes  233;

# 制定日志路径,级别。
# 这个设置可以放入全局块,http块,server块
# 级别依次为:debug|info|notice|warn|error|crit|alert|emerg
error_log  logs/error.log  notice;

# 指定nginx进程运行文件存放地址
pid logs/nginx.pid;

# 配置影响nginx服务器或与用户的网络连接。
events {
    # 设置网路连接序列化,防止惊群现象发生,默认为on
    accept_mutex on;    
    
    # 设置一个进程是否同时接受多个网络连接,默认为off
    multi_accept on;
    
    # 事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    # epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
    use epoll;
    
    # 单个进程最大连接数,默认为512
    worker_connections  1024;
}

# 可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。
# 如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
http {
    # 文件扩展名与文件类型映射表
    include       mime.types;
    
    # 默认文件类型,默认为text/plain
    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 off;
    
    # combined为日志格式的默认值
    access_log  logs/access.log  main;
    
    # 开启高效文件传输模式,允许sendfile方式传输文件
    # 默认为off,可以在http块,server块,location块。
    # 对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用可设置为off
    # 以平衡磁盘与网络I/O处理速度,降低系统的负载。
    # 注意:如果图片显示不正常把这个改成off。
    sendfile on;
    
    # 开启目录列表访问,合适下载服务器,默认关闭。
    autoindex on; 
    # 防止网络阻塞
    tcp_nopush on; 
    # 防止网络阻塞
    tcp_nodelay on; 
    
    
    # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    sendfile_max_chunk 100k;

    # 连接超时时间,默认为75s,可以在http,server,location块。
    keepalive_timeout  65;

    # gzip模块设置
    # 开启gzip压缩输出
    gzip on;
    # 最小压缩文件大小
    gzip_min_length 1k;
    # 压缩缓冲区
    gzip_buffers 4 16k;
    # 压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
    gzip_http_version 1.0;
    # 压缩等级
    gzip_comp_level 2;    
    # 压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
    gzip_types text/plain application/x-javascript text/css application/xml;
    # 和http头有关系,加个vary头,给代理服务器用的
    # 有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩
    # 所以根据客户端的HTTP头来判断,是否需要压缩
    gzip_vary on;
    
    # 服务器名字的hash表大小
    server_names_hash_bucket_size 128;
    # 上传文件大小限制
    client_header_buffer_size 32k;
    # 设定请求缓
    large_client_header_buffers 4 64k; 
    #设定请求缓
    client_max_body_size 8m;
    
    # 负载均衡,需要转发的目标服务器地址以及端口号
    # weight:是权重,可以根据机器配置定义权重,权值越高被分配到的几率越大。
    # down:当前server暂时不参与负载均衡
    # backup:预留的备份服务器(当正在使用的后端服务异常时,启动预留服务)
    # max_fails:允许请求失败的次数
    # fail_timeout:经过max_fails失败后,服务暂停的时间
    # max_conns:限制最大的接受的连接数
    # 注意:backup不能和ip_hash同时配置。因为ip_hash只能访问同一台服务器,而backup是在只有所有参与 负载均衡的服务器出现故障时,才会请求备份机。当所有负载均衡的服务器出现故障了,ip_hash的将无法 请求了。
    upstream ServerList {
        # 每个请求按时间顺序逐一分配到不同的后端服务器。
        # 轮询(默认)
        # 每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
        # ip_hash;
        # 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率。
        # url_hash;
        # 这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块。
        # fair
        server 127.0.0.1:7878 weight=2;
        server 127.0.0.5:7878 weight=3;
        server 192.168.10.121:3333 backup;# 热备
        server 192.168.10.121:6767 down;# 不参与负载
    }

    #导入外部服务器配置文件存放地址
    include .\myconf\*.conf;
    
    # 每一个server相当于一个代理服务器
    #
    server {
        # 监听端口,默认80
        listen       8080;
        
        # 当前服务的域名,可以有多个,用空格分隔(我们是本地所以是localhost)
        server_name  localhost;
        
        # 当没有指定主页时,默认会选择这个指定的文件,可多个,空格分隔
        index index.html index.htm index.php;
        
        # 默认编码
        #charset koi8-r;

        # 表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
        # 正则匹配,~为区分大小写,~*为不区分大小写。
        location / {
            # 网页路径
            root   html;
            # 默认页
            index  index.html index.htm;
            # 请求转向自定义的服务器列表,负载均衡
            proxy_pass http://ServerList;
        }
        
        # 匹配静态文件
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
            # 缓存过期时间
            expires 30d;
            # 关闭日志记录
            access_log off;
        }
        location ~ .*\.(js|css)?$ {
            expires 7d;
            access_log off;
        }
        
        # 防盗链
        location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|xls)$
        {
            valid_referers none blocked server_names  *.test.com ;
            expires 7d;  # 缓存过期时间
            if ($invalid_referer) {
                return 403;
            }
            access_log off;  # 关闭日志记录
        }
        
        # 文件和目录不存在的时候重定向
        if (!-e $request_filename)
        {
            proxy_pass http://127.0.0.1;
        }
        
        # 重定向,将多级目录下的文件转成一个文件,增强seo效果
        # /qw-1-2-3.html 指向/qw/1/2/3.html
        rewrite ^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html last;
        
        # 访问控制——访问/admin/目录的请求,只允许某几个IP访问
        location /admin/
        {
            allow 127.0.0.1;
            deny all;
        }
        
        # 拒绝访问.htaccess文件(如果apache的文档根目录为
        # 与nginx的一致
        location ~ /\.ht {
            deny all;# “deny all”和“return 403”效果一样
        }

        # 将404错误页重定向到静态页/404.html
        error_page  404              /404.html;
        # 将服务器错误页重定向到静态页/50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
        # 对 "/" 启用反向代理
        location / {
            # #需要转发请求的服务器
            # 负载均衡也是如此配置
            proxy_pass http://127.0.0.1:88;
            # 是否跳转
            proxy_redirect off;
            # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header X-Real-IP $remote_addr;
            # 以下是一些反向代理的配置,可选。
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 请求要转发的host
            proxy_set_header Host $host;
            # 允许客户端请求的最大单文件字节数
            client_max_body_size 10m;
            # 缓冲区代理缓冲用户端请求的最大字节数,
            client_body_buffer_size 128k;
            # nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_connect_timeout 90;
            # 后端服务器数据回传时间(代理发送超时)
            proxy_send_timeout 90;
            # 连接成功后,后端服务器响应时间(代理接收超时)
            proxy_read_timeout 90;
            # 设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffer_size 4k;
            # 缓冲区,网页平均在32k以下的设置
            proxy_buffers 4 32k;
            # 高负荷下缓冲大小(proxy_buffers*2)
            proxy_busy_buffers_size 64k;
            # 设定缓存文件夹大小,大于这个值,将从upstream服务器传
            proxy_temp_file_write_size 64k;
        }
        
        # 设定查看Nginx状态的地址
        location /NginxStatus {
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            # htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
            auth_basic_user_file conf/htpasswd;
        }
    }
    
    # HTTPS server,用于https认证
    #
    server {
        # 443端口为ssl监听端口。
        listen       443 ssl;
        server_name  localhost;
        
        # on表示打开ssl支持。
        ssl on;
        # 指定crt文件所在路径,如果写相对路径,必须把该文件和nginx.conf文件放到一个目录下。
        ssl_certificate      cert.pem;
        # 指定key文件所在路径。
        ssl_certificate_key  cert.key;
        # 指定SSL协议。
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        # 设置存储session参数的缓存的类型和大小。
        # off | none | [builtin[:size]] [shared:name:size]
        ssl_session_cache    shared:ssl:1m;
        # 指定客户端可以重用会话参数的时间(超时后不可使用)。
        ssl_session_timeout  5m;
        # 配置ssl加密算法,多个算法用:分隔,ALL表示全部算法,!表示不启用该算法,+表示将该算法排到最后面去。
        ssl_ciphers  high:!anull:!md5;
        # 如果不指定默认为off,当为on时,在使用SSLv3和TLS协议时,服务器加密算法将优于客户端加密算法。
        ssl_prefer_server_ciphers  on;
        # 这里的ca.crt是根证书公钥文件
        ssl_client_certificate ca.crt;
        
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}
View Code

 

配置文件中需要注意的事项

1、每个指令必须有分号结束。

2、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。

3、全局变量介绍

  1. $args :变量中存放了URL中的指令,比如http://e.n.com/index.do?id=10&p=中的id=10&p=,而且可以有多个指令。
  2. $body_bytes_sent :记录发送给客户端文件主体内容大小。
  3. $content_length :请求报文头部中的content-lenght字段。
  4. $content_type :请求头部中的content-type字段。
  5. $document_root :针对当前资源的请求的系统根目录。
  6. $document_uri :当前请求中不包含指令的URI,主注意是不包含请求的指令,比如http://h.c.cn/index.do?id=11会被定义为/index.do。
  7. $host :存放了请求的服务器名称。
  8. $http_user_agent :客户端浏览器的详细信息。
  9. $http_cookie :客户端的cookie信息。
  10. $http_referer :用来记录从那个页面链接访问过来的。
  11. $limit_rate :如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0。
  12. $remote_addr :与$http_x_forwarded_for 用以记录客户端的ip地址,存放了客户端的地址,注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为路由器的公网IP。
  13. $remote_port :客户端请求Nginx服务器时随机打开的端口,这是每个客户端自己的端口。
  14. $remote_user :已经经过Auth Basic Module验证的用户名。
  15. $request :用来记录请求的url与http协议。
  16. $request_body_file :做反向代理时发给后端服务器的本地资源的名称。
  17. $request_method :请求资源的方式,GET/PUT/DELETE等
  18. $request_filename :当前请求的资源文件的路径名称,由root或alias指令与URI请求生成。
  19. $request_uri :包含请求参数的原始URI,不包含主机名,如:”/index.do?id=1&p=”。
  20. $squery_string :URL请求的指令,与 $args相同。
  21. $scheme :请求的协议,如ftp,https,http等。
  22. $server_protocpl :客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1,HTTP/2.0等。
  23. $server_addr :服务器的IP地址。
  24. $server_name :服务器的主机名。
  25. $server_port :服务器的端口号。
  26. $status :用来记录请求状态;成功是200
  27. $time_local :用来记录访问时间与时区。
  28. $uri :与$document_uri相同,是一个不包含指令的uri地址。如访问:h.c.cn/index.do?id=1&p=,uri为:/index.do

4、Nginx正则

  1. ~   区分大小写(大小写敏感)匹配成功
  2. ~*   不区分大小写匹配成功
  3. !~   区分大小写匹配失败
  4. !~*   不区分大小写匹配失败
  5. ^   以什么开头的匹配
  6. $   以什么结尾的匹配
  7. *   代表任意字符
  8. \  转义字符
  9. (值1|值2|值3|值4)  或匹配模式

5、文件及目录匹配

  1.  -f和!-f用来判断是否存在文件
  2.  -d和!-d用来判断是否存在目录
  3.  -e和!-e用来判断是否存在文件或目录
  4.  -x和!-x用来判断文件是否可执行

 

 

posted @ 2019-08-21 09:48  听雨的人  阅读(884)  评论(0编辑  收藏  举报