nginx web+反向代理 的配置详细介绍说明


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定向到同一个后端服务器,后端服务器为缓存时候比较有效

 





      本文转自crazy_charles 51CTO博客,原文链接http://blog.51cto.com/douya/1541615:,如需转载请自行联系原作者

上一篇:Linux下Nginx服务器配置Modsecurity实现Web应用防护系统


下一篇:Linux中的15个‘echo’ 命令实例