配置文件讲解:

#user  nobody;
#开启进程数 <= CPU数
worker_processes  1;

#错误日志保存位置
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

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

#等待事件
events {
	#使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。  
    #use epoll; 

	#每个进程最大连接数(最大连接 = 连接数*进程数)
    worker_connections  1024;
}


http {
	#文件扩展名与文件类型映射表
    include       mime.types;
	
	#默认文件类型
    default_type  application/octet-stream;

	#日志文件输出格式 (这个位置相当于全局设置)
    #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  logs/access.log  main;

	#打开发送文件
    sendfile        on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
    #tcp_nopush     on;
	tcp_nodelay     on;
	
	#禁止出错时泄露服务器的版本
	server_tokens off;
	

	#连接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65; #长连接超时时间,单位是秒
	client_header_timeout  3m;
	client_body_timeout   3m;
	send_timeout          3m;

	#打开gzip压缩
    #gzip  on;
	
	#设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。 默认值是0,不管页面多大都压缩。 建议设置成大于1k的字节数,小于1k可能会越压越大。
	gzip_min_length 1024;
	
	#设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。例如 4 4k 代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。
	gzip_buffers 4 8K;
	
	#配置需要压缩的请求的Content-Type类型,对符合指定类型的请求启用gzip压缩。
	gzip_types text/plain application/javascript text/xml text/css text/html application/xml;
	
	#设定请求缓冲  
	client_header_buffer_size 1k;  
	large_client_header_buffers 4 4k;

	#设定负载均衡的服务器集群  (myproject为代理的名称)
	upstream myproject {
		#ip_hash;
	
		#weigth参数表示权值,权值越高被分配到的几率越大  
		#max_fails当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查  
		#fail_timeout在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
		#这里指定多个源服务器,ip:端口,80端口的话可写可不写   
		server 192.168.1.78:8080 weight=5 max_fails=2 fail_timeout=600s;  
		#server 192.168.1.222:8080 weight=3 max_fails=2 fail_timeout=600s;   
	}
	
	#虚拟主机
    server {
		#监听ip端口
        listen       80;
		
		#虚拟主机名
        server_name  localhost; 
	
		#设置字符集
        #charset koi8-r;

		#本虚拟server的访问日志 相当于局部变量
        #access_log  logs/host.access.log  main;

		#匹配请求路径
        location / {
            root   html; #定义服务器的默认网站根目录位置
            index  index.html index.htm; #定义首页索引文件的名称
			
			proxy_connect_timeout   3;    
            proxy_send_timeout      30;    
			proxy_read_timeout      30;
			
			#代理路径 相当于转发,不指向nginx静态文件
			proxy_pass http://myproject; #请求转向myproject定义的服务器列表
			
			
			#以下是一些反向代理的配置可删除.  
			# proxy_redirect off;
			
			#保留客户端请求的域名信息
			# proxy_set_header Host $host;
			
			#保留客户端请求的真实IP地址,用于某些访问统计
			# proxy_set_header X-Real-IP $remote_addr;
			
			#带上客户原始请求IP等请求信息
			# 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; #nginx跟后端服务器连接超时时间(代理连接超时)
			
			# proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
			
			# proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
			
			# proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
			
			# proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
			
			# proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
			
			# proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
						
        }
		
		location /upload {   
			alias e:/upload;   
		}
		
		#设定查看Nginx状态的地址   
		location /NginxStatus {
			stub_status on;   
			access_log off;   
			#allow 192.168.0.3;  
			#deny all;  
			#auth_basic "NginxStatus";   
			#auth_basic_user_file conf/htpasswd;   
		}
		

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}



Windows下Nginx操作指令


-- 启动 start nginx


-- 关闭 nginx -s stop


-- 退出 nginx -s quit


-- 重启 nginx -s reload


-- 检查配置 nginx -t



让nginx进行转发,即所谓的反向代理。但实际上我们的需求不会是这样的,我们需要分文件类型来进行过滤,比如jsp直接给tomcat处理,因为nginx并不是servlet容器,没办法处理JSP,而html,js,css这些不需要处理的,直接给nginx进行缓存。
下面我们来进行一下配置,让JSP页面直接给tomcat,而html,png等一些图片和JS等直接给nginx进行缓存。
这时最主要用的还是location这个元素,并且涉及到一部分正则,但不难:


location ~ \.jsp$ {
        proxy_pass http://localhost:8080;
}
		
location ~ \.(html|js|css|png|gif)$ {
	root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;
}



去掉之前配的location /,避免全部请求被拦截。



负载均衡


upstream local_tomcat {
	server localhost:8080;
}

server{
        location / {
           proxy_pass http://local_tomcat;
        }
        #......其他省略
}



在server外添加了一个upstream,而直接在proxy_pass里面直接用http://+upstream的名称。



Nginx负载均衡策略

1.轮询(默认)
每个web请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2.最少链接
web请求会被转发到连接数最少的服务器上。
2.weight权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,weight默认是1。
3.ip_hash
每个请求按访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一服务器进行处理,可以解决session的问题。当后台服务器宕机时,会自动跳转到其它服务器。
基于weight的负载均衡和基于ip_hash的负载均衡可以组合在一起使用。


配置静态文件超时时间

location ~/wcm/*\.(jpg|css|html|htm|js|gif|txt) { 
    root /home/trs/wchg/wwwhome/; 
    expires 24h;
}



具体的语法:expires [time|epoch|max|pff]


默认值:off


time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。


time值还控制"Cache-Control"的值:


负数表示no-cache


正数或零表示max-age=time



应用实例:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


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

    #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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
	
	upstream local_tomcat {  
		server 127.0.0.1:8080;  
	}

    server {
        listen       80;
        server_name  localhost; 

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		location ~ (\.htm)$ {
			proxy_pass http://local_tomcat;
			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;
		}

        location / {
            root   html/pro_haopin;
            index  index.html index.htm;
			#proxy_pass http://local_tomcat;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}



注:代理配置的参数须注意