Nginx是由俄罗斯软件工程师IgorSysoev开发的一个高性能的HTTP和反向代理服务器,具备IMAP/POP3和SMTP服务器功能。Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是Apache服务器不错的替代品。目前,包括新浪、腾讯等知名网站已经开始使用Nginx作为Web应用服务器。 Nginx配置一个神奇的Web服务器,我们在使用的时候有不少需要注意的,接下来我们就看看如何才能简单明了的进行Nginx服务器的配置。 #运行用户 user nobody nobody; #启动进程,根据硬件调整,大于等于cpu核数 worker_processes 2; #指定进程可以打开的最大描述符 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错误。 #全局错误日志[debug|info|notice|warn|error|crit]及PID文档位置 error_log logs/error.log notice; pid logs/Nginx.pid; events { use epoll; #使用epoll的I/O 模型 补充说明: 与apache相类,nginx针对不同的操作系统,有不同的事件模型 A)标准事件模型 Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll B)高效事件模型 Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。 Epoll:使用于Linux内核2.6版本及以后的系统。 /dev/poll:使用于Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。 Eventport:使用于Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁 worker_connections 1024; #工作进程的最大连接数量,根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行 每个进程允许的最多连接数, 理论上每台nginx服务器的最大连接数为worker_processes*worker_connections } #设定http服务器,利用他的反向代理功能提供负载均衡支持 http { #设定mime类型 include conf/mime.types; default_type application/octet-stream; #设定日志格式 log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$gzip_ratio"'; log_format download '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_range" "$sent_http_content_range"'; $remote_addr与$http_x_forwarded_for用以记录客户端的ip地址; $remote_user:用来记录客户端用户名称; $time_local: 用来记录访问时间与时区; $request: 用来记录请求的url与http协议; $status: 用来记录请求状态;成功是200, $body_bytes_s ent :记录发送给客户端文件主体内容大小; $http_referer:用来记录从那个页面链接访问过来的; $http_user_agent:记录客户浏览器的相关信息; 通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址; #设定请求缓冲 client_header_buffer_size 1k; large_client_header_buffers 4 4k; #关闭报错时的Nginx版本显示 server_tokens off; sendfile on; #打开系统函数sendfile()支持 tcp_nopush on; #防止网络阻塞 tcp_nodelay on; #防止网络阻塞 keepalive_timeout 65; #上述四项可以有效提高文件传输性能 fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; #设置上述数值设置太小时若负载上来时可能报 502 Bad Gateway #开启gzip模块 gzip on; gzip_min_length 1k; #最小压缩文件大小 gzip_buffers 4 16k; #压缩缓冲区 gzip_http_version 1.0; #压缩版本(默认1.1,前端为squid2.5使用1.0 gzip_comp_level 2; #压缩等级 gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,默认就已经包含text/html 所以下面就不用再写了,当然写上去的话,也不会有问题,但是会有一个warn gzip_vary on; #此选项可让前端的缓存服务,如squid缓存经过nginx压缩的数据 #该选项在做反向代理时设定压缩,后面参数为验证的header头信息,再做相应的压缩处理,关闭为off #gzip_proxied expired no-cache no-store private no_last_modified no_etag auth any #设定access log access_log logs/access.log main; client_header_timeout 3m; client_body_timeout 3m; #设定负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的Squid开启3128端口 server 192.168.8.1:3128 weight=5; server 192.168.8.2:80 weight=1; server 192.168.8.3:80 weight=6; } #设定虚拟主机 server { listen 80; #配置监听端口 server_name 192.168.8.1 www.; #IP地址或者域名 ,多域名用空格隔开 charset gb2312; #默认编码 index index.html index.htm index.php; #默认访问文件,从前到后的顺序查找 #limit_conn connlimit 20; 限制一个IP只能最多只能发起20个连接,超过报 503 Service unavailable #设定本虚拟主机的访问日志格式 log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" $http_x_forwarded_for'; #设定本虚拟主机的访问日志路径 access_log logs/www..access.log main; #假如访问 /img/*, /js/*, /css/* 资源,则直接取本地文档,不通过squid #假如这些文档较多,不推荐这种方式,因为通过squid的缓存效果更好 location ~ ^/(img|js|css)/ { root //Html; access_log off; #不记录访问日志 expires 24h; #缓存过期时间 } #对 "/" 启用负载均衡,location ~* .(mp3|exe)$ 对以“mp3或exe”结尾的地址进行负载均衡 location / { #设置被代理服务器的端口或套接字,以及URL proxy_pass http://mysvr; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上 client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } #设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } } } 备注:conf/htpasswd 文档的内容用 apache 提供的 htpasswd 工具来产生即可! 查看 Nginx 运行状态 输入地址http://www./NginxStatus/ 。输入验证账号密码,即可看到类似如下内容: Active connections: 328 server accepts handled requests 9309 8982 28890 Reading: 1 Writing: 3 Waiting: 324 
http://blog./?p=196
转载:|REKFAN|系统运维| ? Linux学习笔记_Nginx配置详解
|