Nginx与Tomcat安装、配置及优化

Nginx的安装使用

  • rpm(或pkg)安装,类似于windows安装程序,是预编译好的程序
  • yum(或apt -get)安装
  • 编译安装
    1. 检查和安装依赖项
      yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
    2. configure
    3. make && make install

Nginx的配置

   #顶层配置信息管理服务器级别行为
   worker_processes  1; 
   #event指令与事件模型有关,配置处理连接有关信息
   events {
      worker_connections  1024;
   }
   #http指令处理http请求
   http {
      #mime type映射
      include       mime.types;
      default_type  application/octet-stream;

      sendfile        on;
      #tcp_nopush     on;

      #keepalive_timeout  0;
      keepalive_timeout  65;

      #gzip  on;
      #Server 表示一个虚拟主机,一台服务器可配置多个虚拟主机
      server {
         #监听端口
         listen       80;
         #识别的域名
         server_name  localhost;

         #字符集 与url参数乱码问题有关
         charset utf-8;

         #access_log  logs/host.access.log  main;
        
        #location表达式
        #syntax: location [=|~|~*|^~] /uri/ { … }
        #分为两种匹配模式..普通字符串匹配正则匹配
        #无开头引导字符或以=开头表示普通字符串匹配
        #以~或~*开头表示正则匹配,~*表示不区分大小写
        #多个location时匹配规则
        #总体是先普通后正则原则,只识别URI部分,例如请求为/test/1/abc. do?arg=xxx
        #1.先查找是否有=开头的精确匹配即location = /test/1/abc.do {...}
        #2.再查找普通匹配。以最大前缀为规则。如有以下两个location
        # location /test/ {...}
        # location /test/1/ {...}
        # 则匹配后一项,
        #3.匹配到一个普通格式后,搜索并未结束,而是暂存当前结果,并继续再搜索正则模式
        #4.在所有正则模式location中找到第-个匹配项后,以此匹配项为最终结果
        #所以正则匹配项匹配规则受定义前后顺序影响,但普通匹配不会
        #5.如果未找到正则匹配项,则以3中缓存的结果为最终结果
        #6.如果一个匹配都没有,返回404

        #location =/ {...} 与location / {...} 的差别       #location表达式
        #前一个是精确匹配,只响应/请求。所有/xxx类请求不会以前缀匹配形式匹配到它        
        #而后一个正相反。.所有请求必然都是以/开头,所以没有其它匹配结果时一定会执行到它      
        #location ^~ / {...} ^~意思是非正则。表示匹配到此模式后不再继继正则搜索
        #所有如果这样配置,相当于关闭了正则匹配功能                         
        #因为一个请求在普通匹配规则下没得到其它普通匹配结果时,..最终匹配到这里          
        #而这个^~指令又相当于不允许正则。相当于匹配到此为止/test/abc.jsp       

        location / {
           root html;
           index index.html index.htm;
           # deny all; 拒绝请求,返回403
           # allow all; 允许请求
        }

        location ^~ /test/ {
           deny all; 
        }

        location ~ /test/.+\.jsp$ {
           proxy_pass http://192.168.1.31:8080;
        }

        location ~ \.jsp$ {
           proxy_pass http://192.168.1.32:8080;
        }
        
        #定义各类错误页面
         error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # @类似于变量定义
        #error_page  403 http://www.test.com这种定义不允许,所以利用@实现
        error_page  403 @page403;
        location @page403 {
            proxy_pass   http://www.test.com;
        }
      }

       # another virtual host using mix of IP-, name-, and port-based configuration
       #
       #server {
       #    listen       8000;
       #    listen       somename:8080;
       #    server_name  somename  alias  another.alias;
       
       #    location / {
       #        root   html;
       #        index  index.html index.htm;
       #    }
       #}
   }

Nginx的优化

    # nginx不同于apache服务器,当进行了太量优化设置后会魔术般的明显性能提升效果
    # nginx在安装完成后太部分参数就已经是最优化了,我们需要管理的东西并不多

    #user nobody; 

    #阻塞和非阻塞网络模型:
    #同步阻塞模型,一请求一进(线)程,当进(线)程增加到一定程度后
    #更多CPU时间浪费到切换进(线)程,性能急剧下降,所以负载率不高
    #Nginx基于事件的非阻塞多路复用(epoll或kquene)模型
    #一个进程在短时间内可以响应大量的请求
    #建议值<= cpu核心数量,一般高于cpu数量不会带好处,也许还有进程切换开销的负面影响
    worker_processes 4;

    #将worker_ processes绑定到特定cpu上,避免进程在cpu间切换的开销
    worker_cpu_affinity 0001 0010 0100 1000 
    #8内核4进程时的设置方法worker_ cpu_ affinity 00000001 00000010 00000100 10000000

    #每进程最大可打开文件描述符数量(linux上文件描述符比较广义,网络端口、设备、磁盘文件都是)
    #文件描述符用完了,新的连接会被拒绝,产生502类错误
    # linux最太可打开文件数可通过ulimit -n FILECNT或 /etc/security/limits. conf配置
    #理论值 系统最大数量/进程数。但进程间工作量并不是平均分配的,所以可以设置的太一些
    worker_rlimit_nofile 655350

    #error_log logs/error.log;
    #error_log logs/error.log notice;
    #error_log logs/error.log info;
    #pid logs/nginx.pid; 

    events {
        #并发响应能力的关键配置值
        #每个进程允许的最大同时连接数,work_connectins * worker_processes = maxConnection;
        #要注意maxConnections不等同于可响应的用户数量,
        #因为一般一个浏览器会同时开两条连接,如果反向代理,nginx到后端服务器的连接也要占用连接数
        #所以做静态服务器时,一般maxClient = work_connectins * worker_processes / 2
        #做反向代理服务器时maxClient = work_connectins * worker_processes / 4
        
        #这个值理论上越大越好,但最多可承受多少请求与配件和网络相关,也可最大可打开文件,最大可用sockets数量
        work_connectins 500;
        
        #指明使用epoll 或 kquene (*BSD)
        use epoll
        
        #备注:要达到超高负载下最妊的网络响应能力还有必要优化与网络相关的1inux内核参数
    }

    http{
       include       mime.types;
       default_type  application/octet-stream;

        #关闭此项可减少I0开销,但也无法记录访问信息,不利用业务分析,一般运维情况不建议使用
        access_log off
        #只记录更为严重的错误日志,可减少I0压力
        error_log logs/error.log crit;
        #access_log logs/access.log main
        
        #启用内核复制模式,应该保持开启达到最快I0效率
        sendfile on;
        
        #简单说,启动如下两项配置,会在数据包达到一定大小后再发送数据
        #这样会减少网络通信次数,隆低阻塞概率,但也会影响响应及时性
        #比较适合王文件下载这类的太数据包通信场景
        #tcp_nopush on; 
        #tcp_nodelay on|off; on禁用Nagle算法

         #keepalive_timeout  0;

        # HTTP1.1支持持久连接alive                         
        #降低每个连接的alive时间可在一定程度上提高可响应连接数量,所以一般可适当隆低此值  
        keepalive_timeout  30s;

        #启动内容压缩,有效降低网络流量
        gzip on;
        #过短的内容压缩效果不佳,压缩过程还
        gzip_min_length 10
        #可选值1~9,压缩级别越高压缩率越
        gzip_comp_level 4;
        #压缩的内容类别          
        gzip_types text/pl
                          
        #静态文件缓存                      
        #最大缓存数量,文件未使用存活期             
        open_file_cache max=655350 inactive=20s;
        #验证缓存有效期时间间隔                 
        open_file_cache_valid 30s;   
        #有效期内文件最少使用次数                
        open_file_cache_min_uses 2;   

       server {
          listen       80;
          server_name  localhost;

          location / {
             root html;
             index index.html index.htm;
          }
       }

    }

Tomcat的安装使用

到http://tomcat.apache.org下载,解压

tomcat的安装目录介绍:

  • bin:可以执行文件
  • conf:tomcat服务器的配置文件
  • lib:tomcat启动后需要依赖的jar包
  • logs:tomcat工作之后的日志文件
  • webapps:是tomcat布暑工程的目录。
  • work:jsp文件在被翻译之后,保存在当前这个目录下,session对象被序列化之后保存的位置

Tomcat的配置与优化

  • 内存使用配置
    bin目录下catalina.bat(win)/catalina.sh(linux)
    通过内存设置充分利用服务器内存
    -server模式启动应用慢,但可以极大程度提高运行性能
    java8开始,PermSize被MetaspaceSize代替,MetaspaceSize共享heap,不会再有java.lang.OutOfMemoryError: PermGen space,可以不设置
    headless=true适用于linux系统,与图形操作有关,如生成验证码,含义是当前使用的是无显示器服务器,应用中如果获取系统显示有关参数会抛异常
    可通过jmap -heap proccess_id查看设置是否成功

windows下设置方法
set JAVA_OPTS=-server -Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -Djava.awt.headless=true
linux下设置方法
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m -Djava.awt.headless=true"

  • 最大连接数配置
    conf目录下server.xml
    <!-- protocol启用nio模式,(tomcat8默认使用的是nio)(apr模式利用系统级异步io) -->
    <!-- minSpareThreads最小空闲连接线程数 --> 
    <!-- maxThreads最大连接线程数 -->
    <!-- acceptCount允许的最大连接数,应大于等于maxProcessors -->
    <!-- enableLookups 如果为true , requst.getRemoteHost会执行DNS查找,反向解析ip对应域名或主机名 -->
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
    		connectionTimeout="20000"
    		redirectPort="8443"
    		maxThreads="500"
    		minSpareThreads="100"
    		maxSpareThreads="200"
    		acceptCount="200" 
    		enableLookups="false"
    />
上一篇:UVA-540 团体队列 题解答案代码 算法竞赛入门经典第二版


下一篇:C++字符串拼接