一、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 模式
  • 高可扩展性、高度模块化
  • 非阻塞
  • 事件驱动
  • 低内存消耗
  • 热部署 

 

nginxd 是指向的哪里_服务器

 

 

四、支持不停服务升级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_modulemake && 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:\Windows\System32\drivers\etc\hosts中加入域名解析

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

 

nginxd 是指向的哪里_服务器_02