nginx的学习

nginx的学习

1、工做方式

    1.1 学习网址

        阿里团队的tengin-x出的nginx文档:http://tengine.taobao.org/book/chapter_02.html javascript

    1.2 工做流程

    运行css

        a、首先启动了一个master进程,而后阻塞端口(默认80)的信号。
html

        b、接受信号,加载配置文件,启动worker来处理请求。
java

        c、worker处理完成request的全部的数据处理,并response个client。node

    重启
linux

        a、当使用nginx -s reload的时候,已经有的worker不会当即中止工做。可是,也不会在去抢request请求。
nginx

        b、新的master在处理请求的时候,会从新fork新的worker。
web

     worker
json

        a、worker是fork的master,所用共享文件描述符。当request信号来的时候,全部的worker都会去抢sock的互斥锁,抢到的处理request。
后端

        

2、配置

    2.1 总体结构

########main##########
    链接数、进程数、用户及用户组、
########http##########
http{
     http参数设置
    server{
        服务器设置
    }
}
########mail##########
mail{
    ..........
}

   2.二、主要配置

    a、main模块

###################
main模块:配置用户或用户组,worker数量、错误日志、文件描述符、事件设置(这部分都是配置链接数、进程(至关于java中的线程数))
####################
#用户及用户组
user nobady;

#工做进程,根据硬件调整,大于等于cpu核数
worker_processes 8;

#错误日志(将不一样的日志等级、记录到不一样的文件中)
error_log  logs/error.log  error;
#error_log  logs/notice.log  notice;
#error_log  logs/info.log  info;
#error_log  logs/debug.log  debug;
#error_log  logs/warn.log  warn;

#pid放置的位置
pid logs/nginx.pid;

worker_rlimit_nofile 204800;
#指定进程能够打开的最大描述符
#这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,可是nginx分配请求并非那么均匀,因此最好与ulimit -n 的值保持一致。
#如今在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。这是由于nginx调度时分配请求到进程并非那么的均衡,因此假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。


events{
use epoll;
#linux的epoll是同步非阻塞I/O,有很高的可复用性。


worker_connections 204800;
#每个worker的链接数
#工做进程的最大链接数量,根据硬件调整,和前面工做进程配合起来用,尽可能大,可是别把cpu跑到100%就行
#每一个进程容许的最多链接数, 理论上每台nginx服务器的最大链接数为
#总共能够接受的链接数:worker_processes*worker_connections
}

    b、http

#############################3
http区域中主要http相关的参数:文件类型、字符集、root/index、http的log(主要是access.log)、链接时间、压缩、系统文件设置、动态代理、以及server 等等 
####################################
http {
	
###########  所用server 都会生效下面的配置###################
include mime.types;	#include 用户加载另外的配置文件,例如其它配置内容
default_type application/octet-stream;
server_tokens off;		#关闭在错误页面中的nginx版本数字
charset UTF-8;
limit_conn addr 100;		#每一个IP链接100个链接

root D:\website
index	index.html index.htm;
	
# 命名为main的日志格式
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;	#开启文件从硬盘到网络的传输,不须要经过缓存(减小IO,平缓硬盘和网络的处理速度)
#tcp_nopush on;	#此选项容许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用
#tcp_nodelay on;	

#【响应设置,缓存和响应】
client_max_body_size 50m;	        #客户端请求的请求体大小
client_header_buffer_size 4k;		#客户端请求头部的缓冲区大小
client_body_buffer_size 256k;           #客服端请求体缓存大小
large_client_header_buffers 8 128k;	#客户请求头的最大缓冲大小
	
client_header_timeout 3m;		#请求头超时
client_boddy_timeout 3m;		#请求体超时
reset_timeout_connection	        #关闭不响应的客户端链接。这将会释放那个客户端所占有的内存空间
send_timeout 3m;		        #客服端响应超时
	
keepalive_timeout 65;		#nginx和client的链接超时

	
#【压缩】
gzip on;
gzip_disable "msie6";		#ie6一下不压缩
gzip_proxied any;		#容许或者禁止压缩基于请求和响应的响应流
gzip_min_length 1000;		#最小的压缩文件,小于这个不压缩
gzip_comp_level 4;		#压缩等级(1-9)
gzip_types  text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;  #压缩类型

#【反向代理】
########## 响应时间 ######################
proxy_connect_timeout 75s;   	#nginx跟后端服务器请求时间
proxy_rend_timeout 75s;		#链接后,等候后端服务器响应时间处理时间。
proxy_send_timeout 75s;		#链接成功后,发送数据到后端服务器的时间
########## 响应缓存 ######################
proxy_buffer_size 64k;		        #代理服务器(nginx)保存用户头的缓冲区
proxy_buffers 4 32k; 		        #proxy_buffers缓冲区,网页平均在32k如下
proxy_busy_buffers_size 64k;		#高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;	   #设定缓存文件大小,大于这个值,将从后端服务器传送,不用经过nginx缓存
proxy_ignore_client_abort on;		#若是客户端断开请求,也保持与后端服务器的链接,防止服务器出现BUG
################设置传送给后台服务器的请求头(主要是为了session) #####
proxy_set_header Host $host;		        #表示客户端请求头部中的Host字段
proxy_set_header X-Real-IP $remote_addr;	#客户端IP地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;	#设置头转发

upstream tomcat{
	server 192.168.217.1:8080 weight=4;
	server 192.168.217.2:8080 weight=4;		
}												
######【服务器】########
server{
listen 80;
server_name localhost;
#默认
localhost /{
	
}	
		
#错误
error_page 500 502 503 504 /50x.html;
localhost =/50x.html{
	}
		
#静态文件
localhost ~*.*\.(js|css)?${
	expires 7d;			#保存7天
	access_log off;			#关闭访问日志
}
localhost ~*.*\(png|jpg|gif|jpeg|bmp|ico)?${
	expires 7d;
	access_log off;
}
location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|rmvb|mp4|wma|wmv|rm)?${
	deny all; //禁止这些文件下载,你们能够根据本身的环境来配置
}
}
	
	
server{
	listen 80;
	server_name tomcat.com;
	
	#动态代理
	localhost =/{
		proxy_redirect off;
		proxy_pass 	http://tomcat;
	}
		
	#错误
	error_page 500 502 503 504 /50x.html;
	localhost =/50x.html{
	}
		
	#静态文件
	localhost ~*.*\.(js|css)?${
		expires 7d;							#保存7天
		access_log off;						#关闭访问日志
	}
	localhost ~*.*\(png|jpg|gif|jpeg|bmp|ico)?${
		expires 7d;
		access_log off;
	}
	location ~* .*\.(zip|rar|exe|msi|iso|gho|mp3|rmvb|mp4|wma|wmv|rm)?${
		deny all; //禁止这些文件下载,你们能够根据本身的环境来配置
	}
		
	######################访问控制##################300s
	##location / {
	##	: deny    192.168.1.1;
	##	: allow   192.168.1.0/24;
	##	: allow   10.1.1.0/16;
	##	: deny    all;
	##}
	
}
相关文章
相关标签/搜索