• nginx--知识点


    一、Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位符(Uniform Resources Locator)URL作为沟通依据,通过HTTP协议提供各种网络服务。

    • Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
    • 高度的模块化和自由软件许可证是的第三方模块层出不穷(这是个开源的时代啊~)
    • Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
    • 这些优秀的设计带来的极大的稳定性

    Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。

     02年开源

    并发30000

    二 正向代理

    正向代理类似一个跳板机,代理访问外部资源

    比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了

    三 反向代理

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

    反向代理的作用:

    (1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网

    (2)负载均衡,通过反向代理服务器来优化网站的负载

    正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.


    反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端

    Nginx 源码结构(代码量大约 11 万行 C 代码):

    • 源代码目录结构 Core(主干和基础设置)
    • Event(事件驱动模型和不同的 IO 复用模块)
    • HTTP(HTTP 服务器和模块)
    • Mail(邮件代理服务器和模块)
    • OS(操作系统相关的实现)
    • Misc(杂项)

    Nginx 特点如下:

    • 反向代理,负载均衡器
    • 高可靠性、单 Master 多 Worker 模式
    • 高可扩展性、高度模块化
    • 非阻塞
    • 事件驱动
    • 低内存消耗
    • 热部署
       

     

    四、支持不停服务升级nginx

    10000个keep-alive 非活动连接占2.5m内存

    五、apache 和nginx区别

    这得益于Nginx使用了最新的epoll(Linux 2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。

      处理大量的连接的读写,Apache所采用的select网络I/O模型非常低效。下面用一个比喻来解析Apache采用的select模型和Nginx采用的epoll模型进行之间的区别:

      假设你在大学读书,住的宿舍楼有很多间房间,你的朋友要来找你。select版宿管大妈就会带着你的朋友挨个房间去找,直到找到你为止。而epoll版宿管大妈会先记下每位同学的房间号,你的朋友来时,只需告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满大楼找人。如果来了10000个人,都要找自己住这栋楼的同学时,select版和epoll版宿管大妈,谁的效率更高,不言自明。同理,在高并发服务器中,轮询I/O是最耗时间的操作之一,select和epoll的性能谁的性能更高,同样十分明了。

    六、程序架构

    master/worker   进程结构

    master负责加载和分析配置文件,管理worker进程,平滑升级

    一个或多个worker进程处理并相应用户多个并发请求

    七、模块

     核心模块  core module

     标准模块  http

                     mail

                     stream    tcp代理

      第三方模块

    八、nginx的功能

    lvs是请求转发

    静态web资源服务器

    http/https协议的反向代理

    imap4/pop3协议的反向代理

    tcp/udp协议的请求转发(反向代理)

    九、nginx安装

    centos7

    gcc -v

    没有的安装gcc

    yum -y install gcc

     

    pcre、pcre-devel安装

    pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

    安装命令:

    yum install -y pcre pcre-devel

     

    zlib安装

    zlib库提供了很多种压缩和解压缩方式nginx使用zlib对http包的内容进行gzip,所以需要安装

    安装命令:

    yum install -y zlib zlib-devel

     

    安装openssl

    openssl是web安全通信的基石,没有openssl,可以说我们的信息都是在裸奔。。。。。。

    安装命令:

    yum install -y openssl openssl-devel

    解压下载的文件

    tar -zxvf nginx-1.18.0.tar.gz

    解压到usr/local/java

    tar -zxvf japan.tar.gz -C /tmp/

    切换到cd nginx-1.18.0/下面

    执行三个命令:

    ./configure

    make

    make install

    安装之后会在usr/local/     下创建一个nginx文件夹

    常用模块

    ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_image_filter_module=dynamic --with-http_ssl_module make && make install

    配置nginx的配置文件nginx.conf文件,主要也就是端口

    启动nginx服务

    切换目录到/nginx/sbin下面

    启动nginx命令:

    ./nginx

    查看nginx服务是否启动成功

    ps -ef | grep nginx

     关闭防火墙

    关闭防火墙命令:systemctl stop firewalld.service

     ngnix  相关配置

    启动nginx命令:

    ./nginx
    ./nginx -t
    ./nginx -s stop
    ./nginx -s quit
    ./nginx -s reload

    查看nginx服务是否启动成功

    ps -ef | grep nginx

     

    tomcat优化

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
           connectionTimeout="20000"
           redirectPort="8443"
           executor="tomcatThreadPool"
           enableLookups="false"
           acceptCount="100"
           maxPostSize="10485760"
           compression="on"
           disableUploadTimeout="true"
           compressionMinSize="2048"
           noCompressionUserAgents="gozilla, traviata"
           acceptorThreadCount="2"
           compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
           URIEncoding="utf-8"/>

    ngin模块配置说明

    • 第一部分 全局块 主要设置一些影响 nginx 服务器整体运行的配置指令。 比如: worker_processes 1; , worker_processes 值越大,可以支持的并发处理量就越多。

    • 第二部分 events块 events 块涉及的指令主要影响Nginx服务器与用户的网络连接。 比如: worker_connections 1024; ,支持的最大连接数。

    • 第三部分 http块 http 块又包括 http 全局块和 server 块,是服务器配置中最频繁的部分,包括配置代理、缓存、日志定义等绝大多数功能。

      • server块:配置虚拟主机的相关参数。

      • location块:配置请求路由,以及各种页面的处理情况。

    ########### 每个指令必须有分号结束。#################
    #user administrator administrators; #配置用户或者组,默认为nobody nobody。
    #worker_processes 2; #允许生成的进程数,默认为1
    #pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
    error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
    events {
      accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
      multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
       #use epoll;     #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
      worker_connections  1024;    #最大连接数,默认为512
    }
    http {
      include       mime.types;   #文件扩展名与文件类型映射表
      default_type application/octet-stream; #默认文件类型,默认为text/plain
       #access_log off; #取消服务日志    
      log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
      access_log log/access.log myFormat;  #combined为日志格式的默认值
      sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
      sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
      keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

      upstream mysvr {  
        server 127.0.0.1:7878 weight=10;
        server 192.168.10.121:3333 backup;  #热备
      }
      error_page 404 https://www.baidu.com; #错误页
      server {
          keepalive_requests 120; #单连接请求上限次数。
          listen       80;   #监听端口
          server_name  127.0.0.1;   #监听地址      
          location ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
              #root path; #根目录
              #index vv.txt; #设置默认页
              proxy_pass http://mysvr;  #请求转向mysvr 定义的服务器列表
              deny 127.0.0.1;  #拒绝的ip
              allow 172.18.5.54; #允许的ip          
          }
      }
    }
    server {
          listen       9000;  
          server_name  192.168.4.32;   #监听地址      
           
          location ~ /example1/ {  
              proxy_pass http://127.0.0.1:5000;        
          }

          location ~ /example2/ {  
              proxy_pass http://127.0.0.1:8080;        
          }
      }

    反向代理tomcat

    # cd /etc/nginx/conf.d/   //切换到主机配置目录
    # vi zrlog.wangzb.cc.conf   //编辑配置文件,输入一下内容

    server {

    server_name zrlog.wangzb.cc;

    location /
    {
      proxy_pass   http://127.0.0.1:8080;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    #所有js,css相关的静态资源文件的请求由Nginx处理
    location ~.*.(js|css)$ {
      root   /opt/static-resources; #指定文件路径
      expires     12h; #过期时间为12小时
    }
    #所有图片等多媒体相关静态资源文件的请求由Nginx处理
    location ~.*.(html|jpg|jpeg|png|bmp|gif|ico|mp3|mid|wma|mp4|swf|flv|rar|zip|txt|doc|ppt|xls|pdf)$ {
      root   /opt/static-resources; #指定文件路径
      expires     7d; #过期时间为7天
    }
    #不允许直接访问WEB-INF
    location ~ ^/(WEB-INF)/ {#这个很重要,不然用户就可以访问了
              deny all;  
          }



    }
    # nginx -t
    # nginx -s reload
    upstream tomcats {
        ip_hash;
        server 192.168.0.251:8080;
        server 192.168.0.251:8081;
        server 192.168.0.251:8082;
    }
    location里

    proxy_pass http://tomcats; #与tomcats.conf里配置的upstream同名
    user  nginx;
    #nginx进程数,建议设置为等于CPU总核心数。
    #worker_processes 4;
    #定义工作进程的调度优先级
    worker_priority -10;
    #所有worker同时打开的文件数
    worker_rlimit_nofile 65535
    worker_processes auto;#根据CUP核心数几核就是几线程
    #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
    error_log log/error.log debug; #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:#debug|info|notice|warn|error|crit|alert|emerg
    pid       logs/nginx.pid;
    events {
      #worker单个进程最大连接数(最大连接数=连接数*进程数)默认512
      worker_connections 65535;
    }
    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;
      #keepalive_timeout 65;
      keepalive_timeout 120; #长连接超时时间,单位是秒
       
      #gzip压缩功能设置
      gzip on; #开启gzip压缩输出
      gzip_min_length 1k; #最小压缩文件大小
      gzip_buffers 4 16k; #压缩缓冲区
      gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
      gzip_comp_level 2; #压缩等级
      gzip_types text/plain application/x-javascript text/css application/xml;

       
      charset utf-8; #默认编码
      server_names_hash_bucket_size 128; #服务器名字的hash表大小
      client_header_buffer_size 32k; #上传文件大小限制
      large_client_header_buffers 4 64k; #设定请求缓
      client_max_body_size 8m; #设定请求缓
       
      upstream mysvr {
        ip_hash;
        server 192.168.0.251:8080 weight=3;
        server 192.168.0.251:8081;
        server 192.168.0.251:8082;
        }
       
      server {
          listen       80;
          server_name www.test.com;#域名可以有多个,用空格隔开
          location / {
              #jsp网站程序根目录,一般nginx与tomcat在同一个目录
              #root /usr/local/tomcat/webapps/ROOT;
              #index index.html index.jsp index.html;
              proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
              #deny 127.0.0.1; #拒绝的ip
              #allow 172.18.5.54; #允许的ip    
          }
          location ~ .*.jsp$ {
          index index.jsp;
          #proxy_pass http://127.0.0.1:8080;   #来自jsp请求交给tomcat处理
          proxy_redirect off;
          proxy_set_header Host $host;   #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
          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;   #nginx跟后端服务器连接超时时间(代理连接超时)
          proxy_read_timeout 90;     #连接成功后,后端服务器响应时间(代理接收超时)
          proxy_buffer_size 4k;       #设置代理服务器(nginx)保存用户头信息的缓冲区大小
          proxy_buffers 6 32k;       #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
          proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2)
          proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
          }
          location ~ .*.(html|jpg|jpeg|png|bmp|gif|ico|mp3|mid|wma|mp4|swf|flv|rar|zip|txt|doc|ppt|xls|pdf)$         #由nginx处理静态页面
          {
          expires 1h;   #使用expires缓存模块,缓存到客户端1天
          }
          location ~ .*.( jsp|js|css)?$
          {
          expires 1h;
          }
          error_page 404             /404.html;   #错误页面
          error_page   500 502 503 504 /50x.html;
          location = /50x.html {
              root   html;
          }
          #不允许直接访问WEB-INF
          location ~ ^/(WEB-INF)/ {#这个很重要,不然用户就可以访问了
              deny all;  
          }
           
           
      }

    (1)切换到源码包:

    cd /root/nginx-1.13.6

    (2)配置信息:

    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

    (3)配置完成后,运行make进行编译,千万不要进行make install,否则就是覆盖安装。

    make

    到Windows文件C:WindowsSystem32driversetchosts中加入域名解析

    192.168.1.34  zrlog.wangzb.cc

    nginx+tomcat集群

    https://www.jianshu.com/p/aa9f71d653af

    nginx+tomcat 配置https

    https://www.jb51.net/article/131766.htm

     

     

  • 相关阅读:
    java虚拟机字节码执行引擎
    java7 invokedynamic命令深入研究
    [转载]使用expect实现shell自动交互
    elasticsearch 聚合时 类型转换错误
    ES的关键端口
    CentOS6.5安装ganglia3.6
    Linux远程执行echo问题
    [转载]CentOS修改用户最大进程数
    elasticsearch新加入节点不能识别问题
    ssh免密码登录的注意事项
  • 原文地址:https://www.cnblogs.com/jentary/p/13716827.html
Copyright © 2020-2023  润新知