nginx学习(二):初识配置文件

nginx的配置文件默认在nginx安装目录中的conf子目录中,主配置文件为nginx.conf,

[email protected] conf]# pwd
/usr/local/nginx/conf
一、配置文件

[[email protected] conf]# vi nginx.conf 

1
      2 #user  nobody;         #指定运行的用户和组;
      3 worker_processes  1;               #工作进程数,一般与CPU核数相同或是2倍;
      4#指定全局错误日志的路径,错误日志可选项 有[debug|info|notice|warn|error|crit]
      5 #error_log  logs/error.log;
      6 #error_log  logs/error.log  notice;
      7 #error_log  logs/error.log  info;
      8
   
   9 #pid        logs/nginx.pid;    #指定pid文件存放的路径
     10
     11
     12 events {

              use epoll;使用的网络I/O模式,LINUX下使用epoll模型;freebsd使用kqueue模型;在events 这里,默认的是不是没有设置使用的模型;如果要使用epoll 模型要在安装时带上--with-poll_module=epoll;
     13     worker_connections  1024;   #允许的连接数;
     14 }
     15
     16#设定http服务器,利用它的反向代理功能提供负载均衡支持;
     17 http {
       
     18     include       mime.types;      #设定mime类型;
     19     default_type  application/octet-stream;
     20#设置日志格式
     21     #log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
     22     #                  ‘$status $body_bytes_sent "$http_referer" ‘
     23     #                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;
     24
     25     #access_log  logs/access.log  main;
     26
    
 27     sendfile        on;   #默认开启sendfile,sendfile能有效提高web传输文件的效率,nginx会自动使用
     28     #tcp_nopush     on;      #允许或禁止使用socket的tcp_nopush(on freebsd)或tcp_cork(on linux)选项,这个选项仅仅使用sendfile的时候可以用。

 tcp_nodelay     on;

转帖自:http://blog.phpwap.net/?p=14对TCP_NODELAY 和 TCP_CORK的解释,
这两个选项都对网络连接的行为具有重要的作用。许多UNIX系统都实现了 TCP_NODELAY选项,但是,TCP_CORK则是Linux系统所独有的 而且相对较新;它首先在内核版本2.4上得以实现。此外,其他UNIX系统版本也有功能类似的选项,值得注意的是,在某种由BSD派生的系统上的 TCP_NOPUSH选项其实就是TCP_CORK的一部分具体实现。
TCP_NODELAY和TCP_CORK基本上控制了包的“Nagle 化”,Nagle化在这里的含义是采用Nagle算法把较小的包组装为更大的帧。 John Nagle是Nagle算法的发明人,后者就是用他的名字来命名的,他在1984年首次用这种方法来尝试解决福特汽车公司的网络拥塞问题(欲了解详情请参 看IETF RFC 896)。他解决的问题就是所谓的silly window syndrome ,中文称“愚蠢窗口症候群”,具体含义是,因为普遍终端应用程序每产生一次击键操作就会发送一个包,而典型情况下一个包会拥有一个字节的数据载荷以及40 个字节长的包头,于是产生4000%的过载,很轻易地就能令网络发生拥塞,。 Nagle化后来成了一种标准并且立即在因特网上得以实现。它现在已经成为缺省配置了,但在我们看来,有些场合下把这一选项关掉也是合乎需要的。
现在让我们假设某个应用程序发出了一个请求,希望发送小块数据。我们可以选择立即发送数据或者等待产生更多的数据然后再一次发送两种策略。如果我们马上发 送数据,那么交互性的以及客户/服务器型的应用程序将极大地受益。例如,当我们正在发送一个较短的请求并且等候较大的响应时,相关过载与传输的数据总量相 比就会比较低,而且,如果请求立即发出那么响应时间也会快一些。以上操作可以通过设置套接字的TCP_NODELAY选项来完成,这样就禁用了Nagle 算法。
另外一种情况则需要我们等到数据量达到最大时才通过网络一次发送全部数据,这种数据传输方式有益于大量数据的通信性能,典型的应用就是文件服务器。应用 Nagle算法在这种情况下就会产生问题。但是,如果你正在发送大量数据,你可以设置TCP_CORK选项禁用Nagle化,其方式正好同 TCP_NODELAY相反(TCP_CORK 和 TCP_NODELAY 是互相排斥的)。下面就让我们仔细分析下其工作原理。
假设应用程序使用sendfile()函数来转移大量数据。应用协议通常要求发送某些信息来预先解释数据,这些信息其实就是报头内容。典型情况下报头很 小,而且套接字上设置了TCP_NODELAY。有报头的包将被立即传输,在某些情况下(取决于内部的包计数器),因为这个包成功地被对方收到后需要请求 对方确认。这样,大量数据的传输就会被推迟而且产生了不必要的网络流量交换。
但是,如果我们在套接字上设置了TCP_CORK(可以比喻为在管道上插入“塞子”)选项,具有报头的包就会填补大量的数据,所有的数据都根据大小自动地 通过包传输出去。当数据传输完成时,最好取消TCP_CORK 选项设置给连接“拔去塞子”以便任一部分的帧都能发送出去。这同“塞住”网络连接同等重要。
总而言之,如果你肯定能一起发送多个数据集合(例如HTTP响应的头和正文),那么我们建议你设置TCP_CORK选项,这样在这些数据之间不存在延迟。能极大地有益于WWW、FTP以及文件服务器的性能,同时也简化了你的工作。示例代码如下:

intfd, on = 1;

/* 此处是创建套接字等操作,出于篇幅的考虑省略*/

setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* cork */
write (fd, …);
fprintf (fd, …);
sendfile (fd, …);
write (fd, …);
sendfile (fd, …);

on = 0;
setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* 拔去塞子 */

不幸的是,许多常用的程序并没有考虑到以上问题。例如,Eric Allman编写的sendmail就没有对其套接字设置任何选项。
Apache HTTPD是因特网上最流行的Web服务器,它的所有套接字就都设置了TCP_NODELAY选项,而且其性能也深受大多数用户的满意。这是为什么呢?答 案就在于实现的差别之上。由BSD衍生的TCP/IP协议栈(值得注意的是FreeBSD)在这种状况下的操作就不同。当在TCP_NODELAY 模式下提交大量小数据块传输时,大量信息将按照一次write()函数调用发送一块数据的方式发送出去。然而,因为负责请求交付确认的记数器是面向字节而 非面向包(在Linux上)的,所以引入延迟的概率就降低了很多。结果仅仅和全部数据的大小有关系。而 Linux 在第一包到达之后就要求确认,FreeBSD则在进行如此操作之前会等待好几百个包。

在Linux系统上,TCP_NODELAY的效果同习惯于BSD TCP/IP协议栈的开发者所期望的效果有很大不同,而且在Linux上的Apache性能表现也会更差些。其他在Linux上频繁采用TCP_NODELAY的应用程序也有同样的问题。

#设定请求缓冲;

 client_header_buffer_size      1k;

    large_client_header_size       50k;

   #设定客户端能够上传文件的大小

    client_max_body_size            8m;

     29
     30     #keepalive_timeout  0;
     31     keepalive_timeout  65;
     32
     33     #gzip  on;    #是否开启gzip压缩模块
     34#设定虚拟主机
     35     server {
     36         listen       80;   #监听端口
     37         server_name  localhost;#主机名称

    38
     39         #charset koi8-r;#设置使用字符集
     40
     41         #access_log  logs/host.access.log  main;#访问日志文件存放路径
     42
     43         location / {
     44             root   html;#网页存放的目录,也可是绝对路径
     45             index  index.html index.htm;#默认首页顺序
     46         }
     47
     48         error_page  404              /404.html;
     49
     50         # redirect server error pages to the static page /50x.html
     51         #
     52         error_page   500 502 503 504  /50x.html;
     53         location = /50x.html {
     54             root   html;
     55         }
     56
     57         # proxy the PHP scripts to Apache listening on 127.0.0.1:80
     58         #
     59         #location ~ \.php$ {
     60         #    proxy_pass   http://127.0.0.1;
     61         #}
     62
     63         # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
     64         #
     65         #location ~ \.php$ {
     66         #    root           html;
     67         #    fastcgi_pass   127.0.0.1:9000;
     68         #    fastcgi_index  index.php;
     69         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
     70         #    include        fastcgi_params;
     71         #}
     72
     73         # deny access to .htaccess files, if Apache‘s document root
     74         # concurs with nginx‘s one
    75         #
     76         #location ~ /\.ht {
     77         #    deny  all;
     78         #}
     79     }
     80
     81
     82     # another virtual host using mix of IP-, name-, and port-based configuration
     83     #
     84     #server {
     85     #    listen       8000;
     86     #    listen       somename:8080;
     87     #    server_name  somename  alias  another.alias;
     88
     89     #    location / {
     90     #        root   html;
     91     #        index  index.html index.htm;
     92     #    }
     93     #}
     94
     95
     96     # HTTPS server
     97     #
     98     #server {
     99     #    listen       443;
    100     #    server_name  localhost;
    101
    102     #    ssl                  on;
    103     #    ssl_certificate      cert.pem;
    104     #    ssl_certificate_key  cert.key;
    105
    106     #    ssl_session_timeout  5m;
    107
    108     #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    109     #    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    110     #    ssl_prefer_server_ciphers   on;
     111
    112     #    location / {
    113     #        root   html;
    114     #        index  index.html index.htm;
    115     #    }
    116     #}
    117
    118 }
  =========================================================

二、配置文件格式:上面的是nginx.conf的配置示例,有些是添加上去的,主要构成可以简化为:

......

events

{

......

}

http{

......

server{

......

       }

server{

.......      

       }

.......

}

实际上这么分开我们就能一目了然的看到nginx.conf配置文件的结构,不是很难;

三、nginx的代理文件注释

proxy_redirect                                  off;

#proxy_set_header 指令用于在反向代理的后端web服务器发起请求时添加指定的header头信息;
proxy_set_header           Host   $host;
proxy_set_header           X-Real-IP $remote_addr;

#允许客户端请求的最大单个文件字节数;
client-max_body_size      10m;
#缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户;
client_body_buffer_size   128;
#跟后端服务器连接超时时间,发起握手等候响应超时时间;
poxy_connect_timeout      5;
#连接成功后,等候后端服务器响应时间,其实已经进入后端的排队之中等候处理;
proxy_read_timeout        60;
#后端服务器数据回传时间,就是规定时间内后端服务器必须传完所有的数据;
proxy_send_timeout         5;
#代理请求缓存区,这个缓存区见会保护用户的头信息以提供nginx进行校对规则,一般只要能保存下头
#信息即可
proxy_buffer_size        16k;
#同上 ,告诉nginx保存单个用的几个buffer最大用多大空间
proxy_buffers         4   64k;
#如果系统很忙的时候可以申请更大的proxy_buffers官方推荐×2
proxy_busy_buffers_size 128k;
#proxy缓存临时文件的大小;
proxy_temp_file_write_size 128k;

时间: 2024-10-25 03:49:15

nginx学习(二):初识配置文件的相关文章

Nginx学习(二)基础知识

Nginx的内核模块 Nginx的内接模块用于控制Nginx服务器的基本功能 配置实例: user nobody nobody; worker_processes 4; error_log logs/error.log crit; pid logs/nginx.pid; worker_rlimit_nofile 65535; 指令名称:error_log 指令名称:pid Nginx的事件模块 事件模块(EventModules)用于控制Nginx如何处理连接.该模块的指令即指令的一些参数会对应

mybatis学习二 全局配置文件解释

全局配置文件的详细解析可以参考mybatis的中文参考文档 1.全局配置文件中内容1.1 <transactionManager/> type 属性可取值1.1.1 JDBC,事务管理使用 JDBC 原生事务管理方式1.1.2 MANAGED 把事务管理转交给其他容器.原生 JDBC 事务  setAutoCommit(false); 1.2 <dataSouce/>type 属性1.2.1 POOLED 使用数据库连接池1.2.2 UNPOOLED 不实用数据库连接池,和直接使用

SSH学习之二 OpenSSH配置文件解析

下面是对SSH配置文件的一些选项的分解说明,ssh_config是OpenSSH客户端的配置文件,sshd_config是OpenSSH服务器端的配置文件. ssh_config的内容如下: # This is the ssh client system-wide configuration file.  See ssh_config(5) for more information.  This file provides defaults for users, and the values c

capwap学习笔记&mdash;&mdash;初识capwap(二)

2.5.1 AC发现机制 WTP使用AC发现机制来得知哪些AC是可用的,决定最佳的AC来建立CAPWAP连接. WTP的发现过程是可选的.如果在WTP上静态配置了AC,那么WTP并不需要完成AC的发现过程. WTP首先发送一个 Discovery Request message给受限的广播地址,或者CAPWAP的多播地址(224.0.1.140),或者是预配置的AC的单播地址.在IPV6网络中,由于广播并不存在,因此使用"All ACs multicast address" (FF0X

Nginx学习指南之模块的应用

一.自述 Nginx模块功能也是相当的丰富,但对于Apache Web来说,两者之间还是有区别的,大家都知道Nginx模块是直接被编译进了nginx.conf配置文件,而Apache则是被编译成为.SO文件,有些是需要在httpd.conf配置文件中指定是否加载,这样才能激活模块功能.Nginx模块有三个角色,Handlers(处理一个HTTP请求,并产生输出):Filters(处理由一个handler生成的输出):load-balancers(负载均衡器,当后端服务器符合一个以上后,依据算法选

Nginx学习总结(1):Nginx简介

(最近,部门组织了好几个技术兴趣小组,对当前的热门技术进行研究.我加入了Nginx学习小组,与几个同事一道围绕Nginx来进行研究和学习.从今天起,我会陆陆续续发一系列有关Nginx的学习总结.本文是系列之一:Nginx简介.) 一.Nginx概况 1.Nginx是Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日.目前最新的版本是nginx-1.9.0(2015年4月28日发布). 2.Nginx是一款高性能的HTTP和

RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

 一,RTX51 Tiny简单介绍 RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的).嵌入式应用系统常常有这样的需求.RTOS能够提供调度.维护.同步等功能. 实时操作系统能灵活的调度系统资源,像CPU和存储器,而且提供任务间的通信.RTX51 Tiny是一个功能强大的RTOS,且易于使用,它用于8051系列的微控制器.该RTOS最多支持16个任务,基于RTX51 Tiny构建的应用程

Nginx学习指南之安装与配置

一.简介 Nginx [engine x]是Igor Sysoev编写的一个HTTP和反向代理服务器,另外它可以作为邮件代理服务器.Nginx已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括Yandex,Mail.Ru.VKontakte,以及Rambler,在国内使用Nginx作为Web Server,Cache Server,Proxy Server网站包括百度,新浪,腾讯,网易,机锋网等,根据Netcraft统计,在2012年8月份,世界上最繁忙的网站中有11.48使用Ngin

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];