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

 

 

原文地址:https://www.cnblogs.com/jentary/p/13716827.html