http配置块

http配置块包括http-全局块、http-server块、upstream 块儿。可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。

http-全局块

mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等

http {
      #设定mime类型,类型由mime.type文件定义
      include    mime.types;
      #默认文件类型
      default_type application/octet-stream; 

      #设定日志格式(自定义)
      log_format ownformat '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"';
      access_log  /home/nginx/log/http_access.log ownformat;
                   
      #对于普通应用,设为on可以减少文件拷贝次数,如果图片显示不正常把这个改成off。
      sendfile     on;	      #off模式拷贝路径:硬盘—>内核fs缓冲区—>用户空间—>内核socket缓冲区—>协议引擎
			      # on模式拷贝路径1: 硬盘—>内核fs缓冲区—>内核socket缓冲区—>协议引擎
			      # on模式拷贝路径2: 硬盘—>内核fs缓冲区—>协议引擎
						
      tcp_nopush on	      #在linux/Unix系统中优化tcp数据传输,仅在sendfile开启时有效
      #tcp_nodelay on;	      #TCP_NODELAY选项来禁用Nagle的缓冲算法,并在数据可用时立即发送与tcp_nopush互斥

	
      keepalive_timeout 120; 		#长连接超时时间,单位是秒
      send_timeout 30;			#指定客户端的响应超时时间
	
	
      gzip on;			      #开启gzip压缩输出
      gzip_http_version 1.0; 	      #压缩版本
      gzip_comp_level 2;	      #压缩级别,1-10,数字越大压缩的越好
      gzip_min_length 1k;	      #设置允许压缩的页面最小字节数
      gzip_types text/plain application/x-javascript text/css application/xml;  #压缩类型
      gzip_disable "MSIE [1-6].";      #IE6及以下禁止压缩
}

#日志格式(自定义)
        #$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
        #$remote_user:用来记录客户端用户名称;
        #$time_local: 用来记录访问时间与时区;
        #$request: 用来记录请求的url与http协议;
        #$status: 用来记录请求状态;成功是200,
        #$body_bytes_sent :记录发送给客户端文件主体内容大小;
        #$http_referer:用来记录从那个页面链接访问过来的;
        #$http_user_agent:记录客户浏览器的相关信息;
 #通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
  

http-server块

配置虚拟主机的相关参数,包含server全局块和location块

server全局块

server {
        listen 80;			#描述虚拟主机接受连接的地址和端口
        server_name localhost;          #内网:主机名,外网:域名 可以是多个域名,用空格隔开
        access_log   /home/nginx/log/server_localhost_access.log ownformat;
        index index.html index.htm index.jsp;         #默认访问主页
	root /nginx/www/webapps; 	              #主目录
}
	

server {
    listen      192.168.1.101:8080;		# 监听具体IP和具体端口上的连接
    ...
}

server {
    listen      80;						
    server_name example.com www.example.com;	#基于域名的虚拟主机(server_name)
}

server {
    listen      80;						
    server_name example.com www.example.com;	#基于域名的虚拟主机(server_name)
}

server {
    listen      192.168.1.1:80;
    server_name example.net www.example.net;	#基于域名和IP混合的虚拟主机
}

#nginx支持三种类型的虚拟主机配置
#- 基于ip的虚拟主机(一块物理服务器绑定多个ip地址)
#- 基于域名的虚拟主机(server_name)
#- 基于端口的虚拟主机(listen不写ip,端口模式)

location块

为具体的请求URI配置请求路由,可以实现默认主页、错误提示页面、静态文件处理、反向代理等功能

location = / {			#注意URL最好为具体路径。 uri严格匹配指定的路径,不包括子路径
    [ configuration A ]
}

location / {			#对当前路径及子路径下的所有对象都生效;
    [ configuration B ]
}

location ~ URI {} {		#~区分字符大小写
    [ configuration C ]
}

location ^~ /images/ {	#禁用正则表达式
    [ configuration D ]
}

location ~* \.(gif|jpg|jpeg)$ {	#~*不区分字符大小写
    [ configuration E ]
}

#默认请求
location / {
#定义首页索引文件的名称
index index.php index.html index.htm;   
}

# 定义错误提示页面
error_page   500 502 503 504 /50x.html;
  location = /50x.html {
}
error_page   400 402 403 404 /40x.html;
  location = /40x.html {
}

#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
    #过期30天,静态文件不怎么更新,过期可以设大一点,
    expires 30d;
}

#所有jsp的页面均交由tomcat或weblogic处理
location ~ .(jsp|jspx|do)?$ {
	#指向weblogic服务器
 	proxy_pass http://127.0.0.1:700;
    #将主机跟真实IP写入HTTP头中
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

upstream 块儿

#upstream可以实现负载均衡
upstream httpds {
    server 127.0.0.1:8050       weight=10 down;
    server 127.0.0.1:8060       weight=1;
    server 127.0.0.1:8060       weight=1 backup;
}
#- down:表示当前的server暂时不参与负载 
#- weight:默认为1.weight越大,负载的权重就越大。 
#- backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。

#负载均衡算法:
#1、轮询(默认)
#每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

#2、weight
#指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

#3、ip_hash
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

#4、fair(第三方)
#按后端服务器的响应时间来分配请求,响应时间短的优先分配。

#5、url_hash(第三方)
#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

参考

Nginx sendfile原理详解

TCP_NODELAY 和 TCP_NOPUSH的解释