天天看点

Nginx指南和配置详解

Nginx指南

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。更多的请见官方wiki: http://wiki.nginx.org/Main 。

其优点:

Nginx做为HTTP服务器,有以下几项基本特性:

处理静态文件,索引文件以及自动索引;打开文件描述符缓冲.

无缓存的反向代理加速,简单的负载均衡和容错.

一、依赖的程序

gzip module requires zlib library

rewrite module requires pcre library

ssl support requires openssl library

二、安装

$./configure
$make
$make install      

默认安装的路径是/usr/local/nginx 

更多的安装配置

$./configure --prefix=/usr/local/nginx
                 --with-openssl=/usr/include (启用ssl)
                 --with-pcre=/usr/include/pcre/ (启用正规表达式)
                 --with-http_stub_status_module (安装可以查看nginx状态的程序)
                 --with-http_memcached_module (启用memcache缓存)
                 --with-http_rewrite_module (启用支持url重写)      

三、nginx命令

-?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/nginx/)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file      
启动:nginx

重启:nginx -s reload

退出:nginx -s quit

测试配置文件:nginx -t      

Nginx配置详解

在进行Nginx配置的时候会出现很多不明白的地方,其实有些时候只要换一个思维的方式就能找多你要解决问题的方法。官方配置样例:http://wiki.nginx.org/NginxFullExample

#运行用户   
   user nobody nobody;   
   #启动进程   
   worker_processes 4;   
   #全局错误日志及PID文档  [ debug | info | notice | warn | error | crit ] 
   error_log logs/error.log notice;   
   pid logs/Nginx.pid;   
   #工作模式及连接数上限   
   events { 
        #工作模式有:# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ] ;  
        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;   #指令激活或停用的sendfile()的用法。
       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 utf8;   
              #设定本虚拟主机的访问日志   
              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;   
            }   
            # error_page 404 /404.html;  
 
            # location /404.html {  
                 # root /spool/www;  
                 # charset on;  
                 # source_charset koi8-r;  
            # }  
            # location /old_stuff/ {  
                 # rewrite ^/old_stuff/(.*)$ /new_stuff/$1 permanent;  
            # }  
            #location /download/ {  
                 # valid_referers none blocked server_names *.example.com;  
                 # if ($invalid_referer) {  
                       # #rewrite ^/ http://www.example.com/;  
                       # return 403;  
                  # }  
                  # rewrite_log on;  
                  # # rewrite /download/*/mp3/*.any_ext to /download/*/mp3/*.mp3  
                  # rewrite ^/(download/.*)/mp3/(.*)\..*$ /$1/mp3/$2.mp3 break;  
                  # root /spool/www;  
                  # # autoindex on;  
                  # access_log /var/log/nginx-download.access_log download;  
             # }  
             # location ~* ^.+\.(jpg|jpeg|gif)$ {  
                   # root /spool/www;  
                   # access_log off;  
                   # expires 30d;  
             #}
       }   
}      

备注:conf/htpasswd 文档的内容用 apache 提供的 htpasswd 工具来产生即可.

查看 Nginx 运行状态 输入地址http://192.168.8.1/NginxStatus/ 。输入验证帐号密码,即可看到类似如下内容:

Active connections: 328   
       server accepts handled requests   
       9309 8982 28890   
       Reading: 1 Writing: 3 Waiting: 324      

第一行表示现在活跃的连接数,第三行的第三个数字表示Nginx运行着。

继续阅读