web应用中配置文件

NGINX配置文件 nginx.conf

1、nginx.conf结构分析

nginx配置文件中主要包括六块:main,events,http,server,location,upstream

193354_fo09_347414.png

main 块:(全局设置)主要控制 nginx子进程的所属用户/用户组、派生子进程数、

events块:控制 nginx处理连接的方式

http块:是nginx处理http请求的主要配置模块,大多数配置都在这里面进行

upstream块:用于设置一系列后端服务器,nginx做反向代理、后端服务器负载均衡相关配置,可以有多个

server块:用于指定虚拟主机域名、IP和端口,可以配置多个虚拟主机

location块:是server中对应的目录级别的控制块,URL匹配特定位置后的设置,可以有多个

他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。

2、nginx配置命令解释

nginx中每条配置命令都必须要以分号“;”结束!

user  nobody;         //配置nginx 子进程使用的用户和组
worker_processes  1;  //配置nginx工作进程数,建议跟指定CPU数量一样多
error_log  logs/error.log   notice; //配置错误日志的存放位置,错误日志的级别有:debug,info,notice,warn,error,crit
pid  logs/nginx.pid;  //指定nginx master pid的存放路径
worker_rlimit_nofile   51200; //配置文件描述符数量,最大为系统最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致

events {
    use  epoll; //使用网络I/O模型,linux系统推荐使用epoll,FreeBSD推荐使用kqueue
    worker_connections  1024; //允许并发连接的最大请求数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections
    #multi_accept on;  //暂时还没了解其作用
}

http {
    include  mime.types; //包含指定的文件(可以含路径)
    default_type  application/octet-stream; //文件类型未定时,默认类型为二进制流
    #charset   utf-8;  //默认的字符编码集
    #include       upstream.conf; //可单独配置,include 进来
    upstream ixdba.net{ //负载均衡器名字
       ip_hash; //调度算法:轮询(默认),weight(需要设置权值weight=1;),ip_hash(来自同一个 ip的访客固定访问一个后端服务器),fair和 url_hash(第三方)
       server  192.168.12.133:80;
       server  192.168.12.134:80   down; //暂不参加负载均衡
       server  192.168.12.133:8090 max_fails=3 fail_timeout=20s; //允许请求失败的次数,默认1,当超过时返回 proxy_next_upstream 定义错误;
       #server  192.168.12.135:8090  backup; //当算法为 ip_hash 时不可用,预留备份机器,当非 backup 机器忙或故障时启用,
    }
    
  
    //配置访问日志格式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" "$http_cookie" "$http_user_agent" '
                      '$request_time $logid $remote_addr $server_addr $upstream_addr $host '
                      '"$http_x_forwarded_for" $product $subsys $tracecode $msec';

    access_log  logs/host.access.log  main;  //启用访问日志,并且指定日志采用的格式
  
   server_names_hash_bucket_size 128; //
   client_header_buffer_size 4k;      //客户端请求头的 headerbuffer 大小;如果自定义消息头或 cookie 大,可适当调大
   large_client_header_buffers 4 32k; //客户端请求中较大的消息头的缓存最大数目和大小
   client_max_body_size 4m;           //允许客户端请求的最大单个文件;
   client_body_buffer_size 513k;
   
   open_log_file_cache max=10 inactive=60s valid=1m min_uses=2;
###max : 设置缓存中描述符的最大数量;如果缓存被占满,最近最少使用(LRU)的描述符将被关闭。
###inactive : 设置缓存文件描述符在多长时间内没有被访问就关闭; 默认为10秒。
###min_uses : 设置在inactive参数指定的时间里, 最少访问多少次才能使文件描述符保留在缓存中;默认为1。
###valid :设置一段用于检查超时后文件是否仍以同样名字存在的时间; 默认为60秒。

   sendfile        on;        //开启高效文件传输模式,将tcp_nopush和 tcp_nodelay 开启,用于防止网络阻塞
   tcp_nopush      on;
   tcp_nodelay     on;
   keepalive_timeout  65; #长连接
   send_timeout 10;       #响应客户端的超时时间,这个超时仅限于连个连接活动之间
####FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
    fastcgi_connect_timeout 50;
    fastcgi_send_timeout 10;
    fastcgi_read_timeout 10;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 128k;
    fastcgi_intercept_errors on;

    gzip on; //是否开启gzip压缩(还需要和其它配置项共同起作用),实时压缩数据流
    gzip_min_length 1k; //
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    
    policy_frame off; 
    policy_path "<path>webserver/conf/";
    policy_dtdname policy.dtd;
    policy_docname policy.xml;
    policy_logpath "<path>log/webserver";
    policy_logfile policy.;
    policy_logsize 1600;
    policy_loglevel 16; 

    proxy_connect_timeout 15s; #nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_read_timeout 24s;    #连接成功后,后端服务器响应时间(代理接收超时)
    proxy_send_timeout 10s;    #后端服务器数据回传时间(代理发送超时)
    proxy_buffer_size 64k;     #设置代理服务器(nginx)保存用户头信息的缓冲区大小
    proxy_buffers 4 64k;       #proxy_buffers缓冲区,网页平均在32k以下的设置
    proxy_busy_buffers_size 128k;   #高负荷下缓冲大小(proxy_buffers*2)
    proxy_temp_file_write_size 128k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传
    proxy_set_header LOGID $logid;
    proxy_set_header Host $http_host;
    uninitialized_variable_warn off;

    set_real_ip_from 10.0.0.0/8;
    real_ip_header CLIENTIP;
    include php.conf; #server配置单独配置,减少主配置文件复杂度

}
    

server块配置文件

server {
    listen              8234; //主机监听端口(可以是ip:port格式,默认监听127.0.0.1)
    server_name         192.168.12.188 www.ixdba.net; //指定 IP 地址或域名,多个用空格分开
    more_set_headers    'Server: Apache';
    set $php_upstream 'unix:var/php-cgi.sock';
    #set $php_upstream 'unix:var/hhvm.sock';
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST';
####设置 access_log日志按小时切割###
    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
    {
        set $year $1; 
        set $month $2; 
        set $day $3; 
        set $hour $4; 
        set $minutes $5; 
        set $seconds $6; 
    }
    access_log  "/home/aaa/log/webserver/access.log.$year$month$day$hour" main; 

####统一配置全局的rewrite规则,rewrite文件
    include             rewrite;
#######location###可以在location里设置 proxy ,实现动静分离
    location ~* /((.*)\.(.*)\/(.*)\.php){
        deny all;
    }
    #图片缓存时间设置
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
        expires 10d;
    }
    location ~ .*\.(js|css)?$ {
        expires   1h;  //配置所有的js,css文件缓存1小时
    }
    location /sample/ {
        root            /home/aaa/sample/webroot; #
        index           index.php;
        fastcgi_pass    $php_upstream;
        include         fastcgi.conf;
        rewrite ^/sample(/[^\?]*)?((\?.*)?)$ /sample/index.php$1$2 break;
    }
}

nginx 配置文件语法

4.1 break指令:

语法:break;

默认值:none

使用范围:if,server,location

作用:完成当前的规则集,不再处理rewrite指令,需要和last加以区分

4.2 if指令:

语法:if ( condition ) { ... }

默认值:none

使用范围:server,location

作用:用于检测一个条件是否符合,符合则执行大括号内的语句。不支持嵌套,不支持多个条件&&或||处理

condition的范围:

4.2.1 变量名,但是不包括空字符串“”,或者任何以0开始的字符串

4.2.2 变量可以比较,用“=”或者“!=”

4.2.3 变量可以匹配正则表达式,用“~*”(不区分大小写)或者“~”(区分大小写),可以采用“!”来表示取反,如“!~”或者“!~*”

4.2.4 “!-f”和“-f”用来判断文件是否存在

4.2.5 “-e”和“!-e”用来文件或者目录是否存在

4.2.6 “-d”和“!-d”用来判断目录是否存在

4.2.7 “-x”和“!-x”用来判断文件是否可执行

4.2.8  正则表达式中支持“()”分组,分组的值在后面可以通过$1~$9来引用

4.3 return指令:

语法:return code;

默认值:none

使用范围:server,if,location

作用:用于结束规则的执行和返回状态码给客户端。状态码的值可以是:204,400,402~406,408,410,411,413,416以及500~504,另外非标准状态码444,表示以不发送任何的Header头来结束连接。

4.4 rewrite指令:

语法:rewrite  regex  replacement  flag;

默认值:none

使用范围:server,if,location

作用:该指令用于重定向URI或者更改字符串的内容,指令根据配置文件中的顺序来执行。注意:rewrite只针对相对路径,即匹配的是URL地址中主机名之后的内容。如果你想匹配主机名,则需要使用 if 语句。

flag标记:

last --- 相当于Apache中的[L]标记,表示该条是最后一条规则,后面的规则不继续匹配,但是要重新发起请求

break --- 本条规则匹配完成后,终止匹配,不再匹配后面的规则

redirect --- 返回302重定向地址,浏览器地址栏会显示跳转后的地址

premanent --- 返回301永久重定向,浏览器地址栏会显示跳转后的地址

说明:last 和 break 作用类似,但是它们之间有一定的区别。在使用 alias 指令时必须要用 last 标记,在使用 proxy_pass 指令时则要使用 break 标记。last 标记表示,在本条rewrite规则执行完成之后需要对其所在的 server 段重新发起请求,而 break 则在本条规则匹配完成之后,终止匹配,不再对后面的的规则匹配。通常情况下,在“根location”中,如:location / { ... }  或者在 server 中直接编写的 rewrite 指令,推荐使用 last ,而在其它块儿中则推荐使用 break。

4.5 set指令:

语法:set  variable  value;

默认值:none

使用范围:server,location,if

作用:该指令用于定义一个变量,并且给变量进行赋值。变量的值可以是文本、一个变量或者变量和文本的联合,文本需要用引号引起来。

4.6 uninitalized_variable_warn指令:

语法:uninitalized_variable_warn   on|off;

默认值: on 

使用范围:http,server,location,if

作用:用于开启或者关闭记录关于未初始化变量的警告信息

nginx中可以使用的全局变量:$args,$content_lenght,$content_type,$document_root,$document_uri,$host,$http_user_agent,$http_cookie,$limit_rate,$request_body_file,$request_method,$remote_addr,$remote_port,$remote_user,$request_filename,$request_uri,$query_string,$scheme,$server_protocol,$server_addr,$server_name,$server_port,$uri。

$remote_addr, $http_x_forwarded_for 记录客户端IP地址
$remote_user 记录客户端用户名称
$request 记录请求的URL和HTTP协议
$status 记录请求状态
$body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
$bytes_sent 发送给客户端的总字节数。
$connection 连接的序列号。
$connection_requests 当前通过一个连接获得的请求数量。
$msec 日志写入时间。单位为秒,精度是毫秒。
$pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
$http_referer 记录从哪个页面链接访问过来的
$http_user_agent 记录客户端浏览器相关信息
$request_length 请求的长度(包括请求行,请求头和请求正文)。
$request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
$time_iso8601 ISO8601标准格式下的本地时间。
$time_local 通用日志格式下的本地时间。

NGINX配置超时

使用nginx服务器如果遇到timeou情况时可以如下设置参数,使用fastcgi

         fastcgi_connect_timeout 5;  链接

         fastcgi_read_timeout 10;   读取

         fastcgi_send_timeout 10;   发请求

     这两个选项.
         fastcgi_read_timeout是指fastcgi进程向nginx进程发送response的整个过程的超时时间
         fastcgi_send_timeout是指nginx进程向fastcgi进程发送request的整个过程的超时时间

为防止连接超时,在 PHP中可以调用

fastcgi_finish_request — 此函数冲刷(flush)所有响应的数据给客户端并结束请求。 这使得客户端结束连接后,需要大量时间运行的任务能够继续运行。

测试中,如果是php-fpm中的超时

将显示 502 Bad Gateway

<html>

<head><title>502 Bad Gateway</title></head>

<body bgcolor="white">

<center><h1>502 Bad Gateway</h1></center>

<hr><center>nginx</center>

</body>

</html>

        keepalive_timeout  600;   连接超时时间,1分钟;0表示关闭长连接;如有文件下载时必须开启,并根据文件下载时长设定,下载时超过此值会下载失败。

        proxy_connect_timeout 600;    1分钟,该指令设置与upstream server的连接超时时间

        proxy_read_timeout 600;    1分钟

php.ini配置

max_execution_time设置允许脚本运行的时间,单位为秒。如果超过了此设置,脚本返回一个致命的错误。

PHP 中set_time_limit()最大的执行时间,单位为秒。如果设置为0(零),没有时间方面的限制。会从零开始重新启动超时计数器。

max_input_time = 60     ; Maximum amount of time each script may spend parsing request data

 memory_limit = 128M      ; Maximum amount of memory a script may consume (128MB)

转载于:https://my.oschina.net/u/347414/blog/685667

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值