nginx

Nginx是什么?

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx是一款轻量级的WEB服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。

Nginx重要特性

支持高并发:能支持几万并发连接(特别是静态小文件业务环境) 资源消耗少。
可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS的功能。
具备Squid等专业缓存软件等的缓存功能。 支持异步网络I/O事件模型epoll(linux2.6+)。

反向代理

Nginx,不仅可以做反向代理,实现负载均衡。还能用作正向代理来进行上网等功能。正向代理:如果把局域网外的Intermet想象成一个巨大的资源库,则局域网中的客户端要访问lnternet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。

正向代理:如果把局域网外的Intemet想象成一个巨大的资源库,则局域网中的客户端要访问lnternet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。 正向代理:如果把局域网外的Intemet想象成一个巨大的资源库,则局域网中的客户端要访问Interternet,则需要通过代理服务器来访问,这种代理服务就称为正向代理.

 

反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。~ 反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址.

 

 

 负载均衡

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

 

 

动静分离

 

 

nginx 安装

//一键安装上面四个依赖

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

安装 Nginx

cd /usr/local/src/

wget http://nginx.org/download/nginx-1.6.2.tar.gz

tar zxvf nginx-1.6.2.tar.gz

cd nginx-1.6.2

1.编译安装

./configure

make && make install

2. 运行nginx

cd /usr/local/niginx/sbin

./niginx

查看nginx版本

./nginx -v

停止nginx

./nginx -s stop 

重新加载nginx

./nginx -s reload

查看nginx端口

ps -ef |grep nginx

 

 如果浏览器访问不了nginx

firewall-cmd --zone=public --add-port=80/tcp --permanent
systemctl restart firewalld.service

查看开放的端口 

firewall-cmd --list-all

Nginx主配置文件nginx.conf

主要分成三部分:
1.全局块

从配置文件开始到 events 块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令,主要包括配置运行 Nginx服务器的用户(组)、允许生成的 worker process 数,进程PID存放路径、日志存放路径和类型以及配置文件的引入等。

2.events块

events 块涉及的指令主要影响Nginx服务器与用户的网络连接,常用的设置包括是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个wordprocess可以同时支持的最大连接数等。v

3.http块

 http 块也可以包括http全局块、server块。

  • http全局块

          http全局块配置的指令包括文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等。

  • server块

         最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。·

         

[root@chensiqi conf]# egrep -v "#|^$" nginx.conf #去掉包含#号和空行的内容
worker_processes  1; #worker进程的数量
error_log  logs/error.log;  #错误日志(默认没开)
pid        logs/nginx.pid;  #进程号(默认没开)
events {    #事件区块开始
    worker_connections  1024;   #每个worker进程支持的最大连接数
}           #事件区块结束
http {      #http区块开始
    include       mime.types;   #Nginx支持的媒体类型库文件包含
    default_type  application/octet-stream; #默认的媒体类型
    sendfile        on;     #开启高效传输模式
    keepalive_timeout  65;  #连接超时。
    server {      #网站配置区域(第一个server第一个虚拟主机站点)
        listen       80;    #提供服务的端口,默认80
        server_name  www.chensiqi.org; #提供服务的域名主机名
        location / {    #第一个Location区块开始
            root   html;  #站点的根目录(相对于nginx安装路径)
            index  index.html index.htm; #默认的首页文件,多个用空格分开
        }
        error_page 500 502 503 504  /50x.html;  #出现对应的http状态码时,使用50x.html回应客户
        location = /50x.html {  #Location区块开始,访问50x.html
            root   html;     #指定对应的站点目录为html
        }
    }
    server {      #网站配置区域(第二个server第二个虚拟主机站点)
        listen       80;    #提供服务的端口,默认80
        server_name  bbs.chensiqi.org; #提供服务的域名主机名
        location / {    #服务区块
            root   html;  #相对路径(nginx安装路径)
            index  index.html index.htm;
        }
        location = /50x.html { #发生错误访问的页面
            root   html;
        }
    }
}

常用命令

前提:命令的执行需要在nginx.exe的跟目录中运行.

1.nginx -s stop   关闭

2.start nginx      开启

3.nginx -s reload 重启

 

反向代理

Nginx反向代理相关指令介绍

 ①、listen

一、配置监听的IP地址

listen address[:port] [default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [deferred]
    [accept_filter=filter] [bind] [ssl];

 

二、配置监听端口

listen port[default_server] [setfib=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] 
    [deferred] [bind] [ipv6only=on|off] [ssl];

 

三、配置 UNIX Domain Socket

listen unix:path [default_server]  [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] 
    [deferred] [bind] [ssl];

上面的配置看似比较复杂,其实使用起来是比较简单的:

1 listen *:80 | *:8080 #监听所有80端口和8080端口
2 listen  IP_address:port   #监听指定的地址和端口号
3 listen  IP_address     #监听指定ip地址所有端口
4 listen port     #监听该端口的所有IP连接

下面分别解释每个选项的具体含义:

  1、address:IP地址,如果是 IPV6地址,需要使用中括号[] 括起来,比如[fe80::1]等。

  2、port:端口号,如果只定义了IP地址,没有定义端口号,那么就使用80端口。

  3、path:socket文件路径,如 var/run/nginx.sock等。

  4、default_server:标识符,将此虚拟主机设置为 address:port 的默认主机。(在 nginx-0.8.21 之前使用的是 default 指令)

  5、 setfib=number:Nginx-0.8.44 中使用这个变量监听 socket 关联路由表,目前只对 FreeBSD 起作用,不常用。

  6、backlog=number:设置监听函数listen()最多允许多少网络连接同时处于挂起状态,在 FreeBSD 中默认为 -1,其他平台默认为511.

  7、rcvbuf=size:设置监听socket接收缓存区大小。

  8、sndbuf=size:设置监听socket发送缓存区大小。

  9、deferred:标识符,将accept()设置为Deferred模式。

  10、accept_filter=filter:设置监听端口对所有请求进行过滤,被过滤的内容不能被接收和处理,本指令只在 FreeBSD 和 NetBSD 5.0+ 平台下有效。filter 可以设置为 dataready 或 httpready 。

  11、bind:标识符,使用独立的bind() 处理此address:port,一般情况下,对于端口相同而IP地址不同的多个连接,Nginx 服务器将只使用一个监听指令,并使用 bind() 处理端口相同的所有连接。

  12、ssl:标识符,设置会话连接使用 SSL模式进行,此标识符和Nginx服务器提供的 HTTPS 服务有关。

②、server_name

  该指令用于虚拟主机的配置。通常分为以下两种:

1、基于名称的虚拟主机配置

  语法格式如下:

server_name   name ...;

一、对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开。而每个名字由两段或者三段组成,每段之间用“.”隔开。

server_name 123.com www.123.com

二、可以使用通配符“*”,但通配符只能用在由三段字符组成的首段或者尾端,或者由两端字符组成的尾端。

server_name *.123.com www.123.*

三、还可以使用正则表达式,用“~”作为正则表达式字符串的开始标记。

server_name ~^www\d+\.123\.com$;

该表达式“~”表示匹配正则表达式,以www开头(“^”表示开头),紧跟着一个0~9之间的数字,在紧跟“.123.co”,最后跟着“m”($表示结尾)

以上匹配的顺序优先级如下:

1 ①、准确匹配 server_name
2 ②、通配符在开始时匹配 server_name 成功
3 ③、通配符在结尾时匹配 server_name 成功
4 ④、正则表达式匹配 server_name 成功

2、基于 IP 地址的虚拟主机配置

语法结构和基于域名匹配一样,而且不需要考虑通配符和正则表达式的问题。
server_name 192.168.1.1

③、location

  该指令用于匹配 URL。

  语法如下:

location [ = | ~ | ~* | ^~ ] uri {
1. root:
2. proxy_pass:
 }

  或者   

location / { # 只有一个/后面没有路径,表示访问tomcat首页
1. root:
2. proxy_pass:
 }

 

 

       1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

  2、~:用于表示 uri 包含正则表达式,并且区分大小写。

  3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。

  4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

  

④、root

该指令用于设置被代理文件的地址

语法结构如下:

root URL;

  URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。

⑤、proxy_pass

  该指令用于设置被代理服务器的地址。可以是主机名称、IP地址加端口号的形式。

  语法结构如下:

proxy_pass URL;

  URL 为被代理服务器的地址,可以包含传输协议、主机名称或IP地址加端口号,URI等。

proxy_pass  http://www.123.com/uri;

、index

  该指令用于设置网站的默认首页。

  语法为:

index  filename ...;

  后面的文件名称可以有多个,中间用空格隔开。

index  index.html index.jsp;

  通常该指令有两个作用:第一个是用户在请求访问网站时,请求地址可以不写首页名称;第二个是可以对一个请求,根据请求内容而设置不同的首页。

负载均衡

 1)轮询:按照配置文件的顺序,依次访问服务器.
server{
         listen 80;
         server_name xxx;
         location /{
         #    proxy_pass http://localhost:8080;
                proxy_pass http://xxx
      }
     
    }
        #定义Tomcat集群
    upstream  xxx{
         server localhost:8081;
         server localhost:8082 ;
         server localhost:8083;
         
        }

 

 2)权重:为了让性能更好的服务器更多的承担访问压力.所以采用权重策略

server{
         listen 80;
         server_name xxx;
         location /{
         #    proxy_pass http://localhost:8080;
                proxy_pass http://xxx
      }
     
    }
        #定义Tomcat集群
    upstream  xxx{
         server localhost:8081 weight=6;
         server localhost:8082 weight=3;
         server localhost:8083 weight=2;
         
        }

 Nginx其它知识

1)down 属性 :如果在服务器中标识down属性之后,该服务器将不会再为用户提供服务

2)backup 属性:

如果需要在集群中设置备用机.则需要设置backup属性。设置为备用机之后,当主机遇忙/主机宕机时生效

  Nginsx负载均衡策略:当按照配置文件中指定的负载均衡方式进行访问时,如果后台服务器有宕机的显现,则在超时时间过后,会访问全新的服务器.保证用户访问正确.

Nginx 实现tomcat高可用配置

属性说明:

max_fails=1           定义最大失败次数

fail_timeout=60s     设定失败的时间周期.

当nginx访问后台服务器时,如果发现后台服务器连接不通.当失败次数达到了设定的最大次数时,则开启高可用的策略.规定用户在时间周期之内,不会再次访问故障机.

#搭建后台服务器.
    server {
        listen 80;
        server_name manage.jt.com;

        location / {
            #配置代理路径
            #proxy_pass http://localhost:8081;
            proxy_pass http://jtxxx;
            proxy_connect_timeout       2;
            proxy_read_timeout          2; 
            proxy_send_timeout          2; 
        }
    }

    #定义tomcat集群 1.轮循策略 2.权重策略 3.iphash策略
    upstream jtWindows {
        #ip_hash;
        server localhost:8081 weight=6  max_fails=1 fail_timeout=60s down;
        server localhost:8082 weight=3 max_fails=1 fail_timeout=60s;
        server localhost:8083 weight=1 max_fails=1 fail_timeout=60s backup;
    }

 

 

   

posted on 2019-11-06 09:06  棽犹  阅读(212)  评论(0编辑  收藏  举报

导航