nginx配置文件详解

nginx安装是的configure语句:

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
 

1、总体介绍

Nginx的HTTP配置主要包括三个区块,结构如下:
http { //这个是协议级别
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
    server { //这个是服务器级别
      listen 80;
      server_name localhost;
        location / { //这个是请求级别
          root html;
          index index.html index.htm;
        }
      }
}

2、已配nginx文件介绍

/*运行用户*/
user  nginx;

/*启动进程,通常设置成和cpu的数量相等*/
worker_processes  auto;

/*进程最大打开文件数*/
worker_rlimit_nofile 204800;

/*全局错误日志 crit最低级别*/
error_log /var/log/nginx/error.log crit;

/*PID文件,记录当前启动的nginx的进程ID*/
pid /var/run/nginx/nginx.pid ;

/*工作模式*/
events {
	/*使用epoll模型*/
    use epoll;

	/*如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接。 */
    multi_accept on; 

	/*并发总数是 worker_processes 和 worker_connections 的乘积*/
    worker_connections  1024;
}

/*设定http服务器,利用它的反向代理功能提供负载均衡支持*/
http {
	
	/*设定日志格式与位置*/
    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  /var/log/nginx/access.log  main;
	
	/*hash表可保存服务器名字的数量(32的倍数)*/
    server_names_hash_bucket_size 128;
	
    /*用于设置客户端请求的Header头缓冲区的大小,一般1kb就够用*/
    client_header_buffer_size 2k;
	
	/*设置客户端请求的Header头缓冲区大小,默认为4K。客户端请求行不能超过设置的第一个数,请求的Header头信息不能大于设置的第二个数,否则会报"Request URI too large"(414)或“Bad request”(400)错误。如果客户端的Cookie信息较大,则需增加缓冲区大小*/
    large_client_header_buffers 4 4k;
	
	/*设置nginx允许接收的客户端请求内容的最大值,及客户端请求Header头信息中设置的Content-Lenth大最大值。如果超出该指令设置的最大值,nginx将返回“Request Entity Too Large”的错误信息(HTTP的413错误码)*/
    client_max_body_size 8m;
	
	/*这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后***缓存*/
    open_file_cache max=204800 inactive=20s;
	
	/*这个是指多长时间检查一次缓存的有效信息。*/
    open_file_cache_min_uses 1;
	
	/*open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。*/
    open_file_cache_valid 30s;
    
	/*默认情况下数据发送时,内核不会马上发送,会等待较多的字节组成一个数据包,这样能提供IO的发送效率,对于大量数据的传送石非常有益的。但是,如果每次只发送很少字节的程序中,等待时间就会长,由于我们的web服务器一次不会传输大量数据,故禁用内核这个等待功能,会提高nginx传送数据的效率。*/
	tcp_nodelay on;
	
	/*sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.。*/ 
    sendfile        on;
	
	/*连接超时时间*/
    keepalive_timeout  65;
	
	/*文件扩展名与文件类型映射表*/
    include             /etc/nginx/mime.types;
	
	/*默认文件类型,默认为text/plain*/
    default_type        application/octet-stream;

	/*设定实际的服务器列表*/
	upstream Server80{
		server 10.10.6.247:8080;
	}

	/*HTTP服务器*/
    server {
		/*监听8082端口*/
		listen       8082;
		
		/*定义使用xxxx访问*/
		server_name  paas.ihuijian.com;
		
		/* $remote_addr 与$x_forwarded_for 用以记录客户端的ip地址;*/
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		
		
		location /mnt/data/getfile {
			/*这是每个请求能用磁盘上临时文件最大大小。这些当上游响应太大不能装配到缓冲区时被创建。*/
			proxy_max_temp_file_size 0;
			
			/*指定每秒该连接能下载的bytes,主要用来限制个别请求的带宽*/
			limit_rate	200k;
			if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|mp4)$){
           		 add_header Content-Disposition: 'attachment;';
			}
			alias /mnt/data/;	
		}

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

	}

    server {
        listen       80;
        server_name  localhost;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

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

        location / {
		proxy_pass  http://Server80;
        }
  

        location /RecordServer/10.10.26.191/ {
                        if ($request_filename ~* ^.*?\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|mp4)$){
                                add_header Content-Disposition: 'attachment;';
                        }
                        proxy_pass http://10.10.26.191/RecordServer/;
                }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

3、细节解读

3.1、location区段

通过指定模式来与客户端请求的URI相匹配,基本语法如下:location [=|~|~*|^~|@] pattern{……}

查找顺序和优先级
1:带有“=“的精确匹配优先
2:没有修饰符的精确匹配
3:正则表达式按照他们在配置文件中定义的顺序
4:带有“^~”修饰符的,开头匹配
5:带有“~” 或“~*” 修饰符的,如果正则表达式与URI匹配
6:没有修饰符的,如果指定字符串与URI开头匹配

3.2、root 、alias指令区别

location /img/ {
    alias /var/www/image/;
}
#若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件
location /img/ {
    root /var/www/image;
}
#若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件。] 

alias是一个目录别名的定义,root则是最上层目录的定义。

还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值