nginx反向代理、nginx配置说明

nginx反向代理、nginx配置说明
1.nginx为反向代理服务器,接收用户请求,并把请求转发到应用服务器,接收就应用服务器发送回来的结果,把结果发送回请求的用户。
2.nginx 由master进程和多上worker进程来完成工作。
3.master进程主要,充当整个进程组与用户的交互接口(即接收客户端的请求),同时对进程进行监护(将活儿合理的分配给多个worker)。
4.worker进程,接受master进程发出的命令,并完成命令的任务并告知(实际的回调)master进程完成后面的工作(回请用户请求)。



反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器(内容服务器)。

1.作内容服务器的替身
(1).用于需要保护应用服务器内容时,保证应用服务器内容不会被外网直接访问到,应用服务器位于防火墙里面只能被代理服务器访问。
(2).代理服务器位于防火墙外面,能够被外网用户访问。用户访问应用服务器的内容必须要通过代理服务器才可以得到内容。
(3).这样做有利于保护应用服务器的内容,防止外网对应用服务项服器的攻击,因为只有代理服务器才有访问应用服务器的权限。

2.作为内容服务器的负载均衡器
(1).用户将请求发送到代理服务器,代理服务器将请求按照一定的算法转发到后面其中的一个服务器(后面有多个处理同一业务的服务器(运行代码是一样的))去处理这个请求。
(2).应用服务器处理完后将结晨果返回给代理服务器,代理服务器再返回给用户。
(3).代理服务器通过一定的算法是知道后边的应用服务器的运行请况的,通过这些情况去决定将请求发给谁到处理,从面达到负载均衡的目的。


Nginx配置文件
Nginx配置文件主要分成四部分:
1.main(全局设置)、
2.server(主机设置)、
3.upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)和
4.location(URL匹配特定位置后的设置),


nginx配置说明

nginx.conf的配置文件说明

#//----------------------------------------------------------------------------
#//全局设置
#//1.确定运行多少个进程
#//2.错误日志输出目录
#//3.进程ID保存目录
#//4.数据交换模式(一般选用epoll以提高性能)
#//5.每个工作进程最多运行多少个线程(最大并发量)
#//----------------------------------------------------------------------------
#//1.运行用户
user www-data;

#//1.启动进程,通常设置成和cpu的数量相等,每个CPU运行一个进程,减少进程切换,从而提高性能。
worker_processes  1;

#//1.全局错误日志存放位置设置,只存错误级别的日志
error_log  logs/error.log;

#//1.PID文件存放位置设置,里面存放的是nginx的进程ID,在关闭时你不用知道进程号了,可用kill –QUIT `cat /data/logs/nginx.pid`
pid        logs/nginx.pid;

#//1.更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。
#//2.“ulimit -a”查看这个值的大小
#//worker_rlimit_nofile 100000;

#//工作模式(数据交换模式)及连接数上限(每个工作进程最大并发量)
events {
	#//1.epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
	use   epoll;

	#//1.单个后台worker process进程的最大并发链接数,控制线程的数量。理论上每台nginx服务器的最大连接数为worker_processes*worker_connections
	#//2.最大客户数也由系统的可用socket连接数限制(64K),所以设置不切实际的高没什么好处。
	#//3.1024为linux一个进程打开的最大文件数,所以设置为1024
	#//4.当然也可以更改这个限制,如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。
	worker_connections  1024;

	#//1.默认是on。设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态。
	#//2.设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续又回到休眠。
	#//3.当你的服务器连接数不多时,开启这个参数会让负载有一定程度的降低。但是当服务器的吞吐量很大时,为了效率,请关闭这个参数。
	#//4.就是一个连接过来要不要唤醒所有worker进程,还是只唤醒其中一个进程的问题
    	# multi_accept on;

	#//1.为打开文件指定缓存,默认是没有启用的,max指定缓存最大数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存
	#//2.打开文件最大数量为我们再main配置的worker_rlimit_nofile参数
	#//3.缓存的是文件的修改时间和大小的文件元数据信息,在客户端进行文件请求时会发送客户端本地文件的修改时间到nginx,nginx再进行修改时间的对比
	#//来决定客户端本地的这个文件是否要更新.
	# open_file_cache max=2000 inactive=60s;
	#//1.这个是指定多长时间检查一次缓存的有效信息。就是检查nginx的这个文件是否已经在服务器中发生过变化了,发生过变化就更新文件元信息到缓存中
	# open_file_cache_valid 60s;
	#//1.如果文件缓存数据在open_file_cache_valid时间内没有被访问次数达到这个值就会被清出缓存中
	# open_file_cache_min_uses 1;

}

#//设定http服务器,利用它的反向代理功能提供负载均衡支持
#//对http请求的配置参数
http {
	#//1.设定mime类型,类型由mime.type文件定义,就是请求支持的数据类型
	#//2.服务器跟据文件名的后缀名选择不同的网页数据类型返回给客户端,由客户端按照相应的类型解析数据
	include       /etc/nginx/mime.types;
	#//1.代表任意的二进制数据传输。
	default_type  application/octet-stream;

	#//设定日志格式
	access_log    /var/log/nginx/access.log;

	#//1.开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,
	#//2.如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
	sendfile        on;

	#//1.on 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。
	#//2.sendfile为on时这里也应该设为on,数据包会累积一下再一起传输,可以提高一些传输效率。
 	#tcp_nopush     on;

	#//1.on 不缓存数据。
	#//2.在这之前,我们先说说nagle缓存算法,有些应用程序在网络通讯的时候会发送很少的字节,比如说一个字节,
	#//那么再加TCP协议本身,实际上发的要41个字节,这样的效率是很低的。这时候nagle算法就应运而生了,它将
	#//要发送的数据存放在缓存里,当积累到一定量或一定时间,再将它们发送出去。
	#//3.看上去是和tcp_nopush相反的功能,但是两边都为on时nginx也可以平衡这两个功能的使用。
 	#tcp_nodelay	 on;

	#//1.如果设置时间过长,用户又多,长时间保持连接会占用大量资源。
    	#//2.HTTP连接的持续时间。设的太长会使无用的线程变的太多。
    	#//3.服务器在完成一个http响应后还是保持与客户端的连接,以减少再次建立连接的时间,但保持连接时间过长可能影响性能(连接数多)
    	#//keepalive_timeout  0;
    	keepalive_timeout  65;

	#//1.设置读取客户端请求头超时时间,nginx在这个时间内不能收完这个请求头,Nginx会返回408 (Request Time-out) ,Nginx将会关闭连接。
    	#client_header_tomeout 60;

    	#//1.设置读取客户端请求body的超时时间,nginx在接收请求body之间的最长时限,Nginx会返回408 (Request Time-out) ,Nginx将会关闭连接。
    	#client_body_timeout 60;

    	#//1.用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有收到数据(就是没有应答),Nginx将会关闭连接。
    	#send_timeout 60;

    	#//1.开启gzip压缩
    	gzip  on;
    	#//1.IE1-6对Gzip不怎么友好,不给它Gzip了
	gzip_disable "MSIE [1-6]\.(?!.*SV1)";

    	#//1.设定请求缓冲,客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,
    	#//2.常见系统分页大小一般为4k
    	client_header_buffer_size    1k;
    	#//1.nginx默认会用client_header_buffer_size这个buffer来读取(存放)header值,如果header过大,它会使用large_client_header_buffers来读取(存放)
    	#//2.最多4个4K,还不够大nginx会直接返回400错误
    	large_client_header_buffers  4 4k;

    	#//1.同上面的client_header_buffer_size  不过处理的是消息体 body
    	client_body_buffer_size 512k;
    	#//1.同上面的large_client_header_buffers  如果你的应用请求body过大 如大文件上传 如果这里设置不够 将会出现 nginx 413 request entity too large
    	#//2.允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值
    	client_max_body_size 300m;

	#//1.nginx默认配置文件,include可以引入外部配置文件进行相关的配置,不局限于在一个配置文件内完成
	#//2.包含其他配置信息进来
	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*///;

	#//1.负载均衡服务器组的设置
	#//2.定义后端应用服务器的IP组和这组应用服务器的负载均衡方式定义
	#//3.nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
	#//4.对HTTP请求的进行负载均衡配置
	#//5.mysvr,为负载均衡器的名字,在location中可用"proxy_pass  http://myServer;"将请求指向myServer
	#//6.没有后面的参数时,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
	#//7.weight(权重),指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
	#//8.ip_hash(单独一行),每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
	#//9.fair(单独一行),按后端服务器的响应时间来分配请求,响应时间短的优先分配。
	#//10.url_hash,
	upstream mysvr {
		#//1.weigth参数表示权值,权值越高被分配到的几率越大
		server 192.168.8.1:3128 weight=5;
		server 192.168.8.2:80  weight=1;
		server 192.168.8.3:80  weight=6;
		#//1.max_fails,默认为1。某台Server允许请求失败的次数,超过最大次数后,在fail_timeout时间内,
		#//nginx会认为这台Server暂时不可用,不会将请求分配给它
		#//2.fail_timeout,
		#//server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15;
		#//1.backup,备份机,所有服务器挂了之后才会生效
		#//2.down,标识某一台server不可用。
		#//3.max_conns,限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。
		#//server 192.168.0.102:8080 backup/down/max_conns=1000;

	}

	#//1.配置虚拟机(就是Nginx服务器相关参数),可以有多个server,就是一个侦听某个端口的进程,server里面定义了location进行相关访问地址的处理方式的定义
	#//2.一般只开一个以提高性能
	#//3.就是建立一个这个Nginx服务器的访问地址,和侦听端口,和如何对URI不同进行分配到不同的upstream(后端服务器)的配置,或进行不同的处理
	#//4.http服务上支持若干虚拟主机。每个虚拟主机对应一个server配置项,配置项里面包含该虚拟主机相关的配置。
	#//5.每个server通过监听地址或端口来区分。
	server {
		#//1.侦听80端口
		listen       80;

		#//1.定义使用www.xx.com访问,配置访问域名
		#//2.服务器名,如localhost、www.example.com,可以通过正则匹配。
		#//3.可以多个写在一起
		#//4.server_name配置还可以过滤有人恶意将某些域名指向你的主机服务器。
		server_name  www.xx.com;

 		#//1.设定本虚拟主机的日志目录
 		#//2.main,默认的配置文件中的一种log_format(日志格式)
 		#//3.如果不想启用日志,则使用:access_log off ;
 		#//4.就是这个虚拟机(server)的log配置
		access_log  logs/www.xx.com.access.log  main;

		#//1.location,对URI进行匹配到不同的upstream(后端服务器),或进行不同的处理
		#//2.location模块,用来做模式匹配
		#//3.语法规则: location [=|~|~*|^~] /uri/ { … }
		#//(1).= 开头表示精确匹配
		#//(2).^~ 开头表示uri以某个常规字符串开头,理解为匹配url路径即可。
		#//nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。
		#//(3).~ 开头表示区分大小写的正则匹配
		#//(4).~*开头表示不区分大小写的正则匹配
		#//(5)./ 通用匹配,任何请求都会匹配到。
		#//(6).首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。
		#//(7).空匹配,“location /poechant”
		#//(8).(location =) > (location 完整路径 >) >(location ^~ 路径) >(location ~* 正则) >(location 路径)
		#//只要匹配到,其它的都会忽略,然后返回到改匹配。
		#//当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
		#//4.Nginx收到这个HTTP请求之后并转发给后面的应用服务器URL中去进行处理,并得到应用服务器返回的结果。再返回客户端的请求
		location / {
			#//1.定义服务器的默认网站根目录位置,就是符合这种匹配模式的根目录设置
			#//2.root,“root /var/www/image;”,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件,
			#//3.alias,"alias /var/www/image/;",ningx会自动去/var/www/image/目录找文件。alias后面必须要用“/”结束,root则可有可无
			root   /root;

			#//1.定义首页索引文件的名称
			#//2.定义路径下默认访问的文件名
			#//3.就是访问这个URL时,返那个页面的内容给客户端
			index index.php index.html index.htm;

			#//1.用于将请求通过FashCGI交给FashCGI服务器进行处理
			#//fastcgi_pass  www.xx.com;
			#//fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
			#//include /etc/nginx/fastcgi_params;

			#//1.反向代理的地址,backend为upstream(负载均衡服务器组)的名字
			#//2.后面不要有“/”,有就是到你的根目录找了,如:访问url = http://server/test/test.jsp,(location为"/test/ "),不带“/”为访问
			#//"http://backend/test/test.jsp",带上为访问"http://backend/test.jsp",
			#//3.用于将请求通过proxy_pass交给应用服务器进行处理
			#//proxy_pass http://backend;

			#//1.设置主机头和客户端真实地址,以便服务器获取客户端真实IP
			#//2.X-Forwarded-For,字段表示该条http请求是由谁发起的
			#//3.proxy_set_header,就是往请求头加入属性,使下一级可以知道上一级的相关信息
             		#//proxy_set_header Host $host;
             		#//proxy_set_header X-Real-IP $remote_addr;
			#//proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

             		#//1.proxy_buffering,禁用接收后端服务器的缓存
             		#//2.proxy_buffer_size,用来接受后端服务器 response 的第一部分,小的response header 通常位于这部分响应内容里边。
             		#//无论proxy_buffering 是否开启,proxy_buffer_size 都起作用。
             		#//3.如果 proxy_buffers 关闭,Nginx不会尝试获取到后端服务器所有响应数据之后才返回给客户端,Nginx 会尽快把数据传给客户端,
             		#//在数据传完之前,Nginx 接收到的最大缓存大小不能超过 proxy_buffer_size 。
             		#//4.如果 proxy_buffers 打开,Nginx将会尽可能的读取后端服务器的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或
             		#//者数据被读取完(EOF),此时Nginx开始向客户端传输数据,会同时传输这一整串buffer们。如果数据很大的话,Nginx会接收并把他
             		#//们写入到temp_file里去,大小由proxy_max_temp_file_size 控制。
             		#//5.proxy_busy_buffers_size,数据写入到数据被传输到客户端前,这个buffers是会被锁定的,直接到数据传输完成才释放
			#//proxy_buffering off;
			#//proxy_buffer_size 4k;
			#//proxy_buffers 4 4k;
			#//proxy_busy_buffers_size 8k;
			#//proxy_max_temp_file_size 1024m;
		}

    		#//1.定义出现相关错误时如何处理,error_page code ... [=[response]] uri;
    		#//2.error_page 500 502 503 504 /50x.html;返回/50x.html的内容到客户端,客户端URL不变。nginx内部重定向
    		#//3.error_page  404 =200 /404.html;返回/404.html的内容到客户端,客户端URL不变。nginx内部重定向,返回前端的状态码由404变为200
    		#//4.error_page  404 = /404.html;返回/404.html的内容到客户端,客户端URL不变。nginx内部重定向,返回前端的状态码等于访问/404.html的返回码
    		#//5.error_page 404 https://www.baidu.com/;叫客户端重定向到https://www.baidu.com/,客户端URL改就。(实际是返返回302叫客户端重定向到新的URL)
		error_page 500 502 503 504 /50x.html;


		#//1.下例因直接到文件,所以是到/root/找文件
		#//2.到/root/下找50x.html文件
		location = /50x.html {
			root   /root;
		}

    		#//1.静态文件,nginx自己处理(“()”是包括多个,“|”表示是或),^/(images|javascript|js|css|flash|media|static)/表正则表达式
    		location ~ ^/(images|javascript|js|css|flash|media|static)/ {
			root /var/www/virtual/htdocs;

			#//1.可以在服务器中设置expires过期时间,控制浏览器缓存,达到有效减小带宽流量,降低服务器压力的目的。
			#//2.expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。
			expires 30d;
		}

		#//PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
		#//#所有php后缀的,都通过fastcgi发送到9000端口上
		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;
    		}

		#//1.设定查看Nginx状态的地址
		location /NginxStatus {
			stub_status	on;
			access_log	on;
			auth_basic	"NginxStatus";
			auth_basic_user_file	conf/htpasswd;
		}

		#//1.禁止访问 .htxxx 文件
		#//2.deny all表示拒绝所有请求
		location ~ /\.ht {
			deny all;
		}
	}
}




参考原文(参数配置): http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html
参考原文(参数配置): http://www.chinaz.com/web/2015/0424/401323.shtml
参考原文(参数配置): http://blog.csdn.net/tjcyjd/article/details/50695922
参考原文(参数配置): http://www.ha97.com/5194.html
参考原文(参数配置): http://www.nginx.cn/76.html
参考原文(参数配置): http://blog.csdn.net/fbfsber008/article/details/7411547
参考原文(参数配置): http://blog.csdn.net/xifeijian/article/details/20956605
参考原文(参数配置): http://www.cnblogs.com/justbio/p/5535466.html
参考原文(http模块): http://blog.csdn.net/zhangsheng_1992/article/details/51697947
参考原文(upstream模块): http://blog.csdn.net/zhangsheng_1992/article/details/51726873
参考原文(location模块): http://blog.csdn.net/zhangsheng_1992/article/details/51727155
参考原文(nginx access.log ): http://blog.sina.com.cn/s/blog_9bd573450101iqdc.html
参考原文(Nginx的server_name): http://onlyzq.blog.51cto.com/1228/535279
参考原文(参数配置): https://segmentfault.com/a/1190000002797601
参考原文(参数配置(英文)): http://nginx.org/en/docs/http/ngx_http_core_module.html#open_file_cache
参考原文(Nginx基本功能极速入门): http://xxgblog.com/2015/05/17/nginx-start/
参考原文(proxy_buffering): http://www.ttlsa.com/nginx/nginx-proxy-buffer-explain/
参考原文(proxy_buffering): http://blog.csdn.net/ikmb/article/details/7098080
参考原文(proxy_set_header): http://blog.csdn.net/bao19901210/article/details/52537279
参考原文(正向/反向代理): http://blog.csdn.net/wave_1102/article/details/44479175
参考原文(nginx常用的超时配置说明): http://blog.csdn.net/liujiyong7/article/details/18228915

猜你喜欢

转载自huangyongxing310.iteye.com/blog/2332507
今日推荐