实战Nginx_取代Apache的高性能Web服务器

本文详细介绍了Nginx服务器的配置方法,包括进程管理、事件处理模型、HTTP核心配置、负载均衡策略等内容,并提供了具体的配置示例。
user  www www;

worker_processes 10;

error_log  /data1/logs/nginx_error.log  crit;

pid        /usr/local/webserver/nginx/nginx.pid;

worker_rlimit_nofile 51200;

events 
{
use epoll;
worker_connections 51200;
}

http 
{
include       mime.types;
default_type  application/octet-stream;

#charset  utf-8;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;

sendfile on;
#tcp_nopush     on;

keepalive_timeout 65;

tcp_nodelay on;

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;

gzip on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone  crawler  $binary_remote_addr  10m;

#允许客户端请求的最大单个文件字节数
client_max_body_size     300m;

#缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户
client_body_buffer_size  128k;

#跟后端服务器连接的超时时间_发起握手等候响应超时时间
proxy_connect_timeout    600;

#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理
proxy_read_timeout       600;

#后端服务器数据回传时间_就是在规定时间内后端服务器必须传完所有的数据
proxy_send_timeout       600;

#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
proxy_buffer_size        16k;

#同上 告诉Nginx保存单个用的几个Buffer 最大用多大空间
proxy_buffers            4 32k;

#如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2    
proxy_busy_buffers_size 64k;

#proxy缓存临时文件的大小
proxy_temp_file_write_size 64k;

upstream php_server_pool {
server   192.168.1.10:80 weight=4 max_fails=2 fail_timeout=30s;
server   192.168.1.11:80 weight=4 max_fails=2 fail_timeout=30s;
server   192.168.1.12:80 weight=2 max_fails=2 fail_timeout=30s;
}

upstream message_server_pool {
server   192.168.1.13:3245;
server   192.168.1.14:3245 down;
}

upstream bbs_server_pool {
server   192.168.1.15:80 weight=1 max_fails=2 fail_timeout=30s;
server   192.168.1.16:80 weight=1 max_fails=2 fail_timeout=30s;
server   192.168.1.17:80 weight=1 max_fails=2 fail_timeout=30s;
server   192.168.1.18:80 weight=1 max_fails=2 fail_timeout=30s;


#第一个虚拟主机,反向代理php_server_pool这组服务器
server
{
listen       80;
server_name  www.yourdomain.com;

location /
{
#如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_pass http://php_server_pool;
proxy_set_header Host  www.yourdomain.com;
proxy_set_header X-Forwarded-For  $remote_addr;
}

access_log  /data1/logs/www.yourdomain.com_access.log;
}

#第二个虚拟主机
server
{
listen       80;
server_name  www1.yourdomain.com;

#访问http://www1.yourdomain.com/message/***地址,反向代理message_server_pool这组服务器
location /message/
{
proxy_pass http://message_server_pool;
proxy_set_header Host  $host;
}

#访问除了/message/之外的http://www1.yourdomain.com/***地址,反向代理php_server_pool这组服务器
location /
{
proxy_pass http://php_server_pool;
proxy_set_header Host  $host;
proxy_set_header X-Forwarded-For  $remote_addr;
}

access_log  /data1/logs/message.yourdomain.com_access.log;
}

#第三个虚拟主机
server{
listen    80;
server_name  bbs.yourdomain.com *.bbs.yourdomain.com;

location /
{
proxy_pass http://bbs_server_pool;
proxy_set_header Host  $host;
proxy_set_header X-Forwarded-For  $remote_addr;
}

access_log off;
}
}



===============================================================


#使用小号
user 
 nobody;

#开启进程数
worker_processes 
 8;

#制定进程到cpu(四cpu:0001 0010 0100 1000)
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;

#每个进程最大打开文件数
worker_rlimit_nofile 10240;

#进程号保存文件
pid 
       logs/nginx.pid;

events {
   #使用epoll(linux2.6的高性能方式)
   use epoll;
   #每个进程最大连接数(最大连接=连接数x进程数)
   worker_connections  10240;
}

http {

#错误信息号自动跳转到相应页面,把500|404.html  放到根目录即可。

error_page   500 502 503 504  /500.html;
error_page 
  404              /404.html;

#文件扩展名与文件类型映射表
include 
      mime.types;

#默认文件类型
default_type 
 text/html;

#日志文件格式
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 
 /dev/null;

#长链接超时时间
keepalive_timeout 
 30;

#打开gzip压缩
gzip 
 on;
#最小压缩文件大小
gzip_min_length 
 1000;
#压缩缓冲区
gzip_buffers 
    4 8k;
#压缩类型
gzip_types 
      text/* text/css application/javascript application/x-javascript;
#压缩比率
gzip_comp_level 
 9;
#压缩通过代理的所有文件
gzip_proxied 
    any;
#vary header支持
gzip_vary 
       on;
#压缩版本(默认1.1,前端为squid2.5使用1.0)
gzip_http_version 1.0;
#输出缓冲区
output_buffers 
  4 32k;
#输出拆包大小
postpone_output 
 1460;

#接收header的缓冲区大小
client_header_buffer_size 128k;
large_client_header_buffers 4 256k;

#客户端发送header超时
client_header_timeout 
 1m;
#客户端发送内容超时
client_body_timeout 
   1m;
#发送到客户端超时
send_timeout 
          1m;
#开启高效文件传输模式
sendfile 
               on;
#捕捉代理端的http错误
#proxy_intercept_errors 
 on;
#默认编码
charset GBK;

#默认域名(不能访问)
server {include port.conf;server_name null;location / {root /dev/null;log_not_found off;}}

#嵌套upstream.conf
include upstream.conf;

#嵌套servers/*.com;
include servers/*.com;
include servers/*.net;
include servers/*.org;
include servers/*.com.cn;
include servers/*.cn;
}

 

---------------------------------------------------

#运行用户
user 

 nobody nobody;
#启动进程
worker_processes 
 2;
#全局错误日志及PID文件
error_log 
 logs/error.log notice;
pid 
       logs/nginx.pid;
#工作模式及连接数上限
events {
use epoll;
worker_connections 
     1024;
}
#设定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"';
#设定请求缓冲
client_header_buffer_size 
   1k;
large_client_header_buffers 
 4 4k;
#开启gzip模 块
gzip on;
gzip_min_length 
 1100;
gzip_buffers 
   4 8k;
gzip_types 
     text/plain;
output_buffers 
 1 32k;
postpone_output 
 1460;
#设定access log
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 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.yejr.com;
charset gb2312;
#设定本虚拟主机的访问日志
access_log 
 logs/www.yejr.com.access.log  main;
#如果访问 /img/*, /js/*, /css/* 资源,则直接取本地文件,不通过squid
#如果这些文件较多,不推荐这种方式,因为通过squid的缓存效果更好
location ~ ^/(img|js|css)/ 
 {
root 
   /data3/Html;
expires 24h;
}
#对 "/" 启用负载均衡
location / {
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 工具来产生即可,内容大致如下:
 3.) 查看 Nginx 运行状态
输入地址 http://192.168.8.1/NginxStatus/,输入验证帐号密码,即可看到 类似如下内容:
Active connections: 328
server accepts handled requests
9309 
   8982        28890
Reading: 1 Writing: 3 Waiting: 324

第一行表示目前活跃的连接数
 
第三行的第三个数字表示Nginx运行到当前时间接受到的总请求数,如果快达到了上限,就需要加大上限值了。
第四行是Nginx的队列状态

实战Nginx取代Apache高性能Web服务器 作者: 张宴 出版社: 电子工业出版社 出版年: 2010年2月 内容简介   Nginx (“engine x”) 是俄罗斯人Igor Sysoev编写的一款高性能HTTP 和反向代理服务器Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,NginxApache服务器不错的替代品,它能够支持高达50 000个并发连接数的响应,运行稳定,且内存、CPU等系统资源消耗非常低。   本书主要分为4个部分,第1部分为基础篇,介绍了Nginx服务器的安装与配置方法;第2部分为进阶篇,重点介绍了Nginx的配置优化方法、Nginx与PHP/Ruby/Python/JSP/Perl/Memcached的结合配置方法、Nginx HTTP反向代理与负载均衡的配置与优化、Nginx模块开发等,最后还分析了新浪的开源软件项目──基于Nginx的NCache网页缓存系统;第3部分为实战篇,分析了Nginx在国内知名网站(如新浪播客、搜狐博客等)中的应用案例;第4部分为模块篇,对Nginx的基本模块和第三方模块进行了集中介绍。   本书是为对配置管理Nginx服务器感兴趣的读者准备的,适用于以前没有接触过Nginx,或者对Nginx有一些了解并希望能够进一步深入学习的专业系统工程师、个人网站站长及Linux/Unix从业人员。   作者简介   张宴,就职于北京金山软件公司,金山游戏官方网站──逍遥网(xoyo.com)系统架构师,技术支持部平台组组长。曾在新浪网、赶集网等公司任系统工程师、系统架构师,工作内容主要涉及:服务器系统架构设计与部署、系统运维与调优、网络故障解决、网站后端以及接口类PHP程序开发、Unix开源软件二次开发、服务器监控系统开发、系统运维与平台研发团队管理。 第1章 Nginx简介.pdf 第2章 Nginx服务器的安装与配置.pdf 第3章 Nginx的基本配置与优化.pdf 第4章 Nginx与PHP(FastCGI)的安装、配置与优化.pdf 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置.pdf 第6章 Nginx HTTP负载均衡和反向代理的配置与优化.pdf 第7章 Nginx的Rewrite规则与实例.pdf 第8章 Nginx模块开发.pdf 第9章 NginxWeb缓存服务与新浪网的开源NCACHE模块.pdf 第10章 Nginx在国内知名网站中的应用案例.pdf 第11章 Nginx的非典型应用实例.pdf 第12章 Nginx的核心模块.pdf 第13章 Nginx的标准HTTP模块.pdf 第14章 Nginx的其他HTTP模块.pdf 第15章 Nginx的邮件模块.pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值