Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303912
  • 博文数量: 34
  • 博客积分: 2375
  • 博客等级: 大尉
  • 技术积分: 354
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-09 05:49
文章存档

2013年(1)

2012年(3)

2011年(10)

2010年(20)

我的朋友

分类: 系统运维

2011-12-02 09:58:57

最近在学配置Nginx做均衡负载,首先最重要的是Nginx的配置文件,参考网上查到的资料,并结合实践,
将该配置文件的详细功能注释在这里做下笔记,方便今后查阅。

官方的Nginx Wiki(英文)   

环境:FreeBSD8.0+Nginx1.0.10_1
配置文件位置:   /usr/local/etc/nginx(所有配置文件都在此文件夹)
可执行文件位置: /usr/local/sbin/nginx
服务所在位置:   /usr/local/etc/rc.d/nginx

启动:     /usr/local/etc/rc.d/nginx start
停止:     /usr/local/etc/rc.d/nginx stop
重启:     /usr/local/etc/rc.d/nginx restart
测试配置: /usr/local/etc/rc.d/nginx configtest
重载配置: /usr/local/etc/rc.d/nginx reload
服务状态: /usr/local/etc/rc.d/nginx status

主配置文件nginx.conf注释:

#运行服务的用户及用户组 
user www www;

#服务开启的进程数 
worker_processes 5;

#全局错误日志及PID文件 
error_log logs/error.log notice; 
pid logs/nginx.pid;

#限定允许打开的文件的文件描述符长度,包括配置文件、日志文件等,如不指定,则使用操作系统默认值worker_rlimit_nofile 8192; 

#工作模式及连接数上限 
events { 
#工作模式有:
select(标准模式), 
      poll(标准模式), 
kqueue(高效模式,适用FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 and MacOS X),
epoll(高效模式,适用Linux 2.6+,SuSE 8.2,), 
        /dev/poll(高效模式,适用Solaris 7 11/99+,HP/UX 11.22+)
eventport(IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+) 
 use epoll;

 #单个进程允许的最大连接数,总连接数为:worker_processes*worker_connections  
 worker_connections 1024;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持 
http { 
 #设定配置文件位置,这里的conf是指nginx.conf所在的目录,也可以用绝对路径指定其他地方的配置文件 
 include conf/mime.types; 
 include conf/fastcgi.conf; 

 #默认类型-8进制文件流 
 default_type application/octet-stream;

 #全局首页类型 
 index index.html index.htm index.php 

 #设定日志格式 
 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"';

 #是否激活sendfile()函数,比默认模式更有效率 
 sendfile on;

 #将HTTP响应头压缩到一个包中发送,仅在sendfile开启时才能配合使用 
 tcp_nopush on;

 #指定保存服务器名称的hash表的大小,存在多个域名或虚拟主机时指定
 server_names_hash_bucket_size 128;

 #设定用户请求header缓冲区大小 
 client_header_buffer_size 10k; 
 large_client_header_buffers 4 4k;

 #开启gzip模块,要求安装gzip 在运行./config时要指定 
 gzip on; 
 gzip_min_length 1100; 
 gzip_buffers 4 8k; 
 gzip_types text/plain; 
 output_buffers 1 32k; 
 postpone_output 1460;

 #设定访问日志 
 access_log logs/access.log main; 
 client_header_timeout 3m; 
 client_body_timeout 3m; 
 send_timeout 3m; 
 sendfile on; 
 tcp_nopush on; 
 tcp_nodelay on; 
 keepalive_timeout 65;

 #设定负载均衡的服务器列表 
 upstream backserver {
#weigth参数表示权值,权值越高被分配到的几率越大
#本例是指在同一台服务器,多台服务器改变ip即可
server 127.0.0.1:8081 weight=5;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
 } 

 #设定虚拟主机,默认为监听80端口 
 server { 
 listen 80; 
 server_name test.com
 charset utf8; 

 #设定本虚拟主机的访问日志 
 access_log logs/test.com.log main;

 #如果访问 /images/*, /js/*, /css/* 资源,则直接取本地文件,不用转发。
 #但如果文件较多效果不是太好。 
 location ~ ^/(images|js|css)/ { 
 root /usr/local/testweb; 
 expires 30m; 
 }

 #对 "/" 启用负载均衡 
 location / { 
 proxy_pass ; 
 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状态的地址,在运行./config 要指定,默认是不安装的。 
 location /NginxStatus { 
 stub_status on; 
 access_log on; 
 auth_basic "NginxStatus"; 

 #是否要通过用户名和密码访问,测试时可以不加上。
 #conf/htpasswd 文件的内容用apache提供的htpasswd工具来产生即可 
 #auth_basic_user_file conf/htpasswd; 
 } 
}
阅读(14090) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

god_father2011-12-05 10:16:51

更正一个小问题:
配置文件中pid logs/nginx.pid;这一行要改成以下值:
pid /var/run/nginx.pid;
否则用 /usr/local/etc/rc.d/nginx restart  stop 等等命令不能正常控制服务的开启及停止。
因为/usr/local/etc/rc.d/nginx服务脚本只查找/var/run/下的pid文件。

如果不想修改配置文件,那么也可以通过修改/usr/local/etc/rc.d/nginx服务脚本来修正该错误,方法是修改服务脚本的以下两行

_pidprefix="/var/run/nginx"
pidfile="${_pidprefix}.pid"

对应你在nginx.conf中指定的pid文件路径,修改一下也可以正常控制nginx服务