Nginx 学习总结1

1.什么是Nginx

Nginx是一款轻量级的Web服务器,也是一款轻量级的反向代理服务器

2.Nginx最常做的事情

1.作为http反向代理服务器

  1. 现实生活中的代理
            反向代理:客户要买某品牌的东西,去了某平牌的专卖店,此专卖为一个代理角色,这个品牌为被代理角色,这个客户为代理目标。
           
    正向代理:
               
            网络传输中的代理:
                     正向代理:某国网站设置防火墙官网不然访问其他国家的一些网站,这个时候有有人搞了一个代理服务器,可能设置国外,我们通过给这个代理服务器发送请求告诉他client要访问那个网站,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;
                        
            反向代理:一个大型网站,将业务进行了拆分把业务放在不同的机器上去,进行分布式部署。此时客户端来个请求,首先进入的是nginx,nginx按照不同的规则将请求转发到某一台服务器上进行处理。方向代理的主要特点是客户端明确请求,由nginx处理,nginx转发到哪一个服务器处理,客户端是不知道。方向代理隐藏了服务端处理的信息。
                    
            

2.作为负载均衡服务器

  1. 定义:将服务器接收到的请求按照规则分发的过程,称为负载均衡。
  2. .nginx 下几个负载均衡机制:
    1.weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。  
    2.ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
    注意:请注意:这个方法本质还是轮询,而且由于客户端的ip可能是不断变化的,比如动态ip,代理,翻墙等等,因此ip_hash并不能完全保证同一个客户端总是由同一
    个服务器来处理。因此不能测地结局session共享的问题。
  3. 第三方解决方案
    1.fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。需安装upstream_fair模块。
    2.url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,需要安装nginx的hash软件包。

3.特点

        稳定、高性能、资源占用少、功能强悍、模块结构化、支持热部署。
 

3.Ngxin基本安装配置 及各项配置说明。

1.安装

            1. wget http://nginx.org/download/nginx-1.10.3.tar.gz
            2.tar zxvf nginx-1.10.3.tar.gz 
            3.cd nginx-1.10.3/
            4. ./configure
                可以看见默认安装完成的模块
                ./configure --help 可以看见其配置选项
            

                各项配置说明如下:

--prefix=<path> - 安装路径,如果没有指定,默认为/usr/local/nginx。
--sbin-path=<path> - nginx可执行命令的文件,如果没有指定,默认为<prefix>/sbin/nginx。
--conf-path=<path> - 在没有使用-c参数指定的情况下nginx.conf的默认位置,如果没有指定,默认
为<prefix>/conf/nginx.conf。
--pid-path=<path> - nginx.pid的路径,如果没有在nginx.conf中通过“pid”指令指定,默认为
<prefix>/logs/nginx.pid。
--lock-path=<path> - nginx.lock文件路径,如果没有指定,默认为<prefix>/logs/nginx.lock。
--error-log-path=<path> - 当没有在nginx.conf中使用“error_log”指令指定时的错误日志位置,
如果没有指定,默认为<prefix>/logs/error.log。
--http-log-path=<path> - 当没有在nginx.conf中使用“access_log”指令指定时的访问日志位置,
如果没有指定,默认为<prefix>/logs/access.log。
--user=<user> - 当没有在nginx.conf中使用“user”指令指定时nginx运行的用户,如果没有指定,
默认为“nobody”。
--group=<group> - 当没有在nginx.conf中使用“user”指令指定时nginx运行的组,如果没有指定,
默认为“nobody”。
--builddir=DIR - 设置构建目录。
--with-rtsig_module - 启用rtsig模块。
--with-select_module –without-select_module - 如果在configure的时候没有发现kqueue, epoll,
rtsig或/dev/poll其中之一,select模块始终为启用状态。
--with-poll_module –without-poll_module - 如果在configure的时候没有发现kqueue, epoll,
rtsig或/dev/poll其中之一,poll模块始终为启用状态。
--with-http_ssl_module - 启用ngx_http_ssl_module,启用SSL支持并且能够处理HTTPS请求。需要
OpenSSL,在Debian系统中,对应的包为libssl-dev。
--with-http_realip_module - 启用ngx_http_realip_module
--with-http_addition_module - 启用ngx_http_addition_module
--with-http_sub_module - 启用ngx_http_sub_module
--with-http_dav_module - 启用ngx_http_dav_module
--with-http_flv_module - 启用ngx_http_flv_module
--with-http_stub_status_module - 启用”server status”(服务状态)页
--without-http_charset_module - 禁用ngx_http_charset_module
--without-http_gzip_module - 禁用ngx_http_gzip_module,如果启用,需要zlib包。
--without-http_ssi_module - 禁用ngx_http_ssi_module
--without-http_userid_module - 禁用ngx_http_userid_module
--without-http_access_module - 禁用ngx_http_access_module
--without-http_auth_basic_module - 禁用ngx_http_auth_basic_module
--without-http_autoindex_module - 禁用ngx_http_autoindex_module
--without-http_geo_module - 禁用ngx_http_geo_module
--without-http_map_module - 禁用ngx_http_map_module
--without-http_referer_module - 禁用ngx_http_referer_module
--without-http_rewrite_module - 禁用ngx_http_rewrite_module。如果启用,需要PCRE包。
--without-http_proxy_module - 禁用ngx_http_proxy_module
--without-http_fastcgi_module - 禁用ngx_http_fastcgi_module
--without-http_memcached_module - 禁用ngx_http_memcached_module
--without-http_limit_zone_module - 禁用ngx_http_limit_zone_module
--without-http_empty_gif_module - 禁用ngx_http_empty_gif_module
--without-http_browser_module - 禁用ngx_http_browser_module
--without-http_upstream_ip_hash_module - 禁用ngx_http_upstream_ip_hash_module
--with-http_perl_module - 启用ngx_http_perl_module
--with-perl_modules_path=PATH - 为perl模块设置路径
--with-perl=PATH - 为perl库设置路径
--http-client-body-temp-path=PATH - 为http连接的请求实体临时文件设置路径,如果没有指定,默
认为<prefix>/client_body_temp
--http-proxy-temp-path=PATH - 为http代理临时文件设置路径,如果没有指定,默认为
<prefix>/proxy_temp
--http-fastcgi-temp-path=PATH - 为http fastcgi临时文件设置路径,如果没有指定,默认为
<prefix>/fastcgi_temp
--without-http - 禁用HTTP服务
--with-mail - 启用IMAP4/POP3/SMTP代理模块
--with-mail_ssl_module - 启用ngx_mail_ssl_module
--with-cc=PATH - 设置C编译器路径
--with-cpp=PATH - 设置C预处理器路径
--with-cc-opt=OPTIONS - 变量CFLAGS中附加的参数,用于FreeBSD中的PCRE库,同样需要指定–with-
cc-opt=”-I /usr/local/include”,如果我们使用select()函数则需要同时增加文件描述符数量,可
以通过–with-cc-opt=”-D FD_SETSIZE=2048”指定。
--with-ld-opt=OPTIONS - 通过连接器的附加参数,用于FreeBSD中的PCRE库,同样需要指定–with-
ld-opt=”-L /usr/local/lib”。
--with-cpu-opt=CPU - 指定编译的CPU,可用的值为: pentium, pentiumpro, pentium3, pentium4,
athlon, opteron, amd64, sparc32, sparc64, ppc64
--without-pcre - 禁用PCRE库文件,同时将禁用HTTP rewrite 模块,如果要在”location”指令中使
用正则表达式,同样需要PCRE库。


            5.make&&make install

2.启动

        /usr/local/nginx/sbin/nginx -t
        测试启动成功没有
                ps axu|grep nginx
        
        启动成功

3.nginx基础配置 

1.启动的时候制定配置:

    
                         默认启动Nginx时,使用的配置文件是: 安装路径/conf/nginx.conf 文件
可以在启动nginx的时候,通过-c来指定要读取的配置文件。

2.nginx 常用的配置文件:

                nginx.conf:应用程序的基本配置文件
                mime.types:MIME类型关联的扩展文件
                fastcgi.conf:与fastcgi相关的配置
                proxy.conf:与proxy相关的配置
                sites.conf:配置Nginx提供的网站,包括虚拟主机

3. Nginx的进程结构:


                    启动Nginx的时候,会启动一个Master进程,这个进程不处理任何客户端的
请求,主要用来产生worker进程,一个worker进程用来处理一个request。
                    

4.nginx 模块结构 

                        Nginx模块分为:核心模块、事件模块、标准Http模块、可选Http模块、邮件模
块、第三方模块和补丁等。    

5.核心模块指令   


            包括 error_log、include、pid、user、worker_cpu_affinity、worker_processes等。

            1.error_log   日志有6个级别,从低到高为:debug-》info-》notice-》warn-》error-》crit
        nginx可以为不同的虚拟主机提供一个单独的日志:
                

http{
        error_log logs/http_error.log error;
        server{
        server_name name1;
        access_log logs/name1_access.log;
        error_log logs/name1_error.log error;
        }
        server{
        server_name2;
        access_log logs/name2_access.log;
        error_log logs/name2_error.log error;
        }
        }

            2include       mime.types;文件的引入。
            3. worker_processes  1;#启动进程,通常设置成和cpu的数量相等
            4.user work work; 当前的用户和用户组
            5.worker_rlimit_nofile 204800; nginx打开文件最大数描述。
            6. worker_cpu_affinity 01 10;指定cpu  01表示启用第一个CPU内核,10表示启用第二个CPU内核(通常和worker_processes 配合使用 )
                       

6.事件模块指令

     最重要的两个:use和worker_connections

           use epoll;  #epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型    
           worker_connections  102400;#单个后台worker process进程的最大并发链接数  

7.http 模块的基本配置
              基本结构如下
        

http { // 这个是协议级别
        include mime.types;
        default_type application/octet-stream;
        keepalive_timeout 65;
        gzip on;
        server { // 这个是服务器级别
        listen 80;
        server_name localhost;
        location / { // 这个是请求级别
        root html;
        index index.html index.htm;
        }
        }
        }

参数说明网址:http://tengine.taobao.org/nginx_docs/cn/docs/http/ngx_http_core_module.html

     

8.反向代理 基本配置
        

upstream tomcat  {
    server ip:8080; #tomcat端口
    }

    ## Start  www.sumei.com ##
    server {
    listen 80;
    server_name  www.sumei.com;

    access_log  logs/sumei.access.log  main;
    error_log  logs/sumei.error.log;
    root   html;
    index  index.html index.htm index.php;

    ## send request back to apache ##
    location / {
    proxy_pass  http://tomcat;

    #Proxy Settings
    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;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_max_temp_file_size 0;
    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;
    }
    }

    

猜你喜欢

转载自my.oschina.net/u/2474435/blog/1648665