user www; #定义Nginx运行的用户和用户组
worker_processes 2; #nginx进程数,建议设置为等于CPU总核心数。
#error_log logs/error.log; 全局错误日志定义类型
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; 进程文件
events { 工作模式与连接数上限
worker_connections 2048; 每个进程的最大连接数(最大连接数=连接数*进程数)
use epoll;事件处理机制(epoll) :在系统内核2.6 以上,高性能网络I/O模型,并发数比较大,socket连接比较多的web服务器使用
epoll是最好的。如果跑在FreeBSD上面,就用kqueue模型。
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
}
#设定http服务器
http {
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
charset utf-8; #默认编码
sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出 文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay 能有效的提高数据的实时响应性
keepalive_timeout 120; #长连接超时时间,单位是秒
#自定义日志格式
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 /home/access.log main;
gzip on; #开启gzip压缩输出
经过gzip压缩后页面大小可以变为原来的30%甚至更小,这样,用户浏览页面的时候速度会块得多。gzip的压缩页面需要浏览器和服务器双方都支持,实际上就是服务器端压缩,传到浏览器后浏览器解压并解析。浏
gzip_min_length 1k; //设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。
gzip_buffers 16 64k; #压缩缓冲区-//设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 6; #压缩等级 ,1压缩比最小,传输速度最快,9压缩比做大,传输速度最慢,比较好CPU
gzip_types text/plain application/x-javascript text/css application/xml;压缩类型
gzip_vary on;/和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩
server {
# listen 80 default;
# server_name_;
# return 500;
underscores_in_headers on;
listen 80;
server_name node.convert.com;
access_log /home/host.access.log main;
location / {
root /var/www/html;
index index.html index.htm;
}
===========================================================================================
反向代理
user www;
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 2048;
}
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 /home/access.log main;
sendfile on;
charset utf-8;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
# tcp_nodely on;
gzip on;
gzip_min_length 1k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
client_max_body_size 100;/允许客户端请求的最大单个文件字节数,它出现在请求头部的Content-Length字段。(可以更改此参数达到限制用户上传文件大小的目的)
client_body_buffer_size 512k;\\缓冲区代理缓冲客户端请求的最大字节数,可以理解为先保存到本地再传给用户。 这个指令可以指定连接请求使用的缓冲区大小,默认值:8k/16k 。如果客户端请求一个文件大于128k,则Nginx会尝试在硬盘上创建临时文件。如果硬盘满了,则会报错
proxy_connect_timeout 600s; \\跟后端服务器连接的超时时间,发起握手等候响应超时时间
proxy_read_timeout 600s; \\连接成功 _等候后端服务器的响应时间_其实已经进入后端的排队中等候处理。默认值:
proxy_send_timeout 600s;\\后端服务器回传时间_就是在规定时间内后端服务器必须传完所有的数据。设置代理服务器转发请求的超时时间,同样指完成两次握手后的时间,如果超过这个时间代理服务器没有数据转发到后端服务器,nginx将关闭连接。
proxy_buffer_size 32k;\\代理请求缓存区_这个缓存区间会保存用户的头信息来提供Nginx进行规则处理。一般只要能保存下头信息即可。默认值:proxy_buffer_size 4k/8k 。设置从后端服务器读取的第一部分应答的缓 冲区大小,通常情况下这部分应答中包含一个小的应答头。
proxy_buffers 4 32k;\\设置用于读取应答(来自后端服务器)的缓冲区数目和大小,告诉Nginx保存单个用的几个 Buffer,最大用多大空间
proxy_busy_buffers_size 64k;\\如果系统很忙的时候可以申请更大的proxy_buffers,官方推荐*2
proxy_temp_file_write_size 64k; \\设置在写入proxy_temp_path时缓存临文件数据的大小,在预防一个工作进程在传递文件时阻塞太长
proxy_temp_path /dev/shm/proxy_temp; \\类似于http核心模块中的client_body_temp_path指令,指定一个目录来缓冲比较大的被代理请求。
反代的三种写法
写法一: include extra/upstream01.conf;
upstream01.conf;
server {
# underscores_in_headers on;
# listen 80;
# server_name node .convert.com;
# access_log /home/host2.access.log main;
#
# location / {
# proxy_pass http://www.51cto.com/;
# proxy_set_header Host $host;
# proxy_redirect off;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
# }
写法二:
upstream node1_convert_pool {
# server 192.168.1.210:80 ;
# }
# upstream node2_convert_pool {
# server 192.168.1.211:80 ;
# }
# server {
# underscores_in_headers on;
# listen 80;
# server_name node.convert.com;
# access_log /home/host1.access.log main;
#
# location / {
# proxy_pass http:// node1_convert_pool;
# proxy_set_header Host $host;
# proxy_redirect off;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
# }
#
# }
# server {
# underscores_in_headers on;
# listen 80;
# server_name node2.convert.com;
# access_log /home/host2.access.log main;
#
# location / {
# proxy_pass http://node2_convert_pool/;
# proxy_set_header Host $host;
# proxy_redirect off;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
# }
#
#
# }
}
写法三:
server {
# underscores_in_headers on;
# listen 80;
# server_name node .convert.com;
# access_log /home/host2.access.log main;
#
# location / {
# proxy_pass http://www.51cto.com/;
# proxy_set_header Host $host;
# proxy_redirect off;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
# }
#
==========================
nginx 负载均衡的5种方式:
Nginx的upstream目前支持5种方式的分配
ip_hash:
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
weight:
制定轮询几率,weight和访问比率成正比,用于后端服务器性能不均衡的情况
轮询:
每个请求按照时间顺序逐一分配到不同的后端服务器,如果后端某台宕机,将自动删除
fair(第三方):
按照后端服务器的响应时间来分配请求,响应时间短的优先分配
url_hash:
按访问URL的hash结果来分配请求,每个URL定向到同一个后端服务器,后端服务器为缓存时候比较有效