nginx

开始搭建Nginx——Nginx基本配置

2016-05-11  本文已影响149人  程序员点点

众所周知,Nginx是一个轻量级及高性能的web服务器,反向代理服务器以及邮件代理服务器,特点是占用内存少,并发能力强,其拥有如此高的性能是与其架构是分不开的,有关Nginx框架我们后续文章再做介绍,首先我们先将Nginx服务器搭建起来,以激发学习的乐趣。

在这里我选择windows的平台和Nginx稳定版来搭建——

我们只需要根据需要下载Nginx压缩包,然后解压到相关目录,比如我的目录就是[F:\nginx\nginx-1.10.0](目录中不带中文和空格之类的字符是个好习惯),打开命令行,切换到Nginx的安装目录后输入start nginx即可启动Nginx,此时在浏览器中输入http://localhost就可以看到Nginx的欢迎页

Nginx欢迎页
当然,我会告诉你这个欢迎页是怎么出来的,这也是接下来的要点——Nginx的配置:
Nginx的配置文件nginx.conf在Nginx安装目录下的conf文件夹下,用文本编辑器打开它,我们一一对照:
首先是全局配置:

接下来是最为主要的HTTP配置:

 #运行用户
  user www-data;
 #启动进程,通常设置成和cpu的数量相等
  worker_processes  1;
 #全局错误日志及PID文件
  error_log  /var/log/nginx/error.log;
  pid        /var/run/nginx.pid;
 #工作模式及连接数上限
   events {
      use   epoll;             #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能    
      worker_connections  1024;#单个后台worker process进程的最大并发链接数    
      # multi_accept on; 
    }
#设定http服务器,利用它的反向代理功能提供负载均衡支持
  http {
       #设定mime类型,类型由mime.type文件定义   
       include       /etc/nginx/mime.types;    
       default_type  application/octet-stream;   
       #设定日志格式    
       access_log    /var/log/nginx/access.log;
       #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,    
       #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
       sendfile        on;    #tcp_nopush     on;
       #连接超时时间    
       #keepalive_timeout  0;   
       keepalive_timeout  65;    
       tcp_nodelay        on;        
       #开启gzip压缩    gzip  on;    
       gzip_disable "MSIE [1-6]\.(?!.*SV1)";
       #设定请求缓冲    
       client_header_buffer_size    1k;    
       large_client_header_buffers  4 4k;
       include /etc/nginx/conf.d/*.conf;    
       include /etc/nginx/sites-enabled/*;
       #设定负载均衡的服务器列表     
       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 {    
        #侦听80端口       
        listen       80;        
        #定义使用[www.xx.com](http://www.xx.com/)访
        server_name  www.xx.com;
        #设定本虚拟主机的访问日志        
        access_log  logs/www.xx.com.access.log  main;
        #默认请求    
        location / {          
            root   /root;      #定义服务器的默认网站根目录位置         
            index index.php index.html index.htm;   #定义首页索引文件的名称
            fastcgi_pass  www.xx.com;         
            fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;          
            include /etc/nginx/fastcgi_params;        }
            # 定义错误提示页面    
            error_page   500 502 503 504 /50x.html;          
            location = /50x.html {       
               root   /root;    
             }
            #静态文件,nginx自己处理   
            location ~ ^/(images|javascript|js|css|flash|media|static)/ {        
              root /var/www/virtual/htdocs;        
              #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。        
              expires 30d;    
             }    
             #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.    
             location ~ \.php$ {
                root /root;        
                fastcgi_pass 127.0.0.1:9000;        
                fastcgi_index index.php;        
                fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;        
                include fastcgi_params;    
              }    
              #设定查看Nginx状态的地址    
              location /NginxStatus {
                  stub_status            on;       
                  access_log              on;        
                  auth_basic              "NginxStatus";       
                  auth_basic_user_file  conf/htpasswd;    
               }    
              #禁止访问 .htxxx 文件    
              location ~ /\.ht {
                deny all;    
              } 
     }
}

以上是一些基本的配置,注释来源于网络
Nginx最重要的莫过于负载均衡配置了:
upstream是Nginx的HTTP Upstream模块,这个模块通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
在上面的设定中,通过upstream指令指定了一个负载均衡器的名称mysvr 。这个名称可以任意指定,在后面需要的地方直接调用即可。
Nginx的负载均衡模块目前支持4种调度算法,下面进行分别介绍,其中后两项属于第三方的调度方法。
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
Weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:
down:表示当前的server暂时不参与负载均衡;
backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;
max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
注意,当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup。

参考文章:
Nginx安装及配置文件nginx.conf详解
Nginx配置文件详细说明

上一篇下一篇

猜你喜欢

热点阅读