域名访问----->nginx----->ip地址和端口

1、通过域名访问 还是通过ip进行访问。ip地址访问通,但是域名访问不同,说明端口没映射。

2、前端通过域名访问后端服务,在ngixn层域名映射成ip地址。

3、以后可以试试ip地址是否访问通? ip地址是否访问通?

 

Nginx集群:主从,防止单点故障。

Nginx的使用和配置文件

 

nginx.conf配置文件

Nginx配置文件主要分成四部分:main(全局配置)、server(主机配置)、upstream(上游服务器配置,主要为反向代理、负载均衡相关配置)和location(URL匹配特定位置后的配置),每部分包含若干个指令。

1) main部分设置的指令将影响其它所有部分的设置;

2) server部分的指令主要用于指定虚拟主机域名、IP和端口;

3) upstream的指令用于设置一系列的后端服务器,设置反向代理及后端服务器的负载均衡;

4) location部分用于匹配网页位置(比如,根目录“/”,“/images”,等等)。他们之间的关系式:server继承main,location继承server;upstream既不会继承指令也不会被继承。它有自己的特殊指令,不需要在其他地方的应用。

 

公司项目网络请求通过Nginx的访问顺序:

1)Nginx启动后,默认监听80端口;

2)根据正则表达式拦截项目里的所有网络请求(Location匹配)。 

3)通过proxy_pass找到要访问的上游服务器地址进行访问(upstream配置)。

 

upstream配置(上游服务器配置)

Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用。

upstream节点

1. 在http节点下,添加upstream节点。

upstream linuxidc {

      server 10.0.6.108:7080;

      server 10.0.0.85:8980;

}

2. 将server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即“http://linuxidc”.

location / {

            root  html;

            index  index.html index.htm;

            proxy_pass http://linuxidc;

}

upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除(对应的服务器)。虽然这种方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。适用于图片服务器集群和纯静态页面服务器集群。

upstream还有其它的分配策略:

1) weight(权重) 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如下所示,10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。

upstream linuxidc{

      server 10.0.0.77 weight=5;

      server 10.0.0.88 weight=10;

}

2) ip_hash(访问ip)

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream favresin{

      ip_hash;

      server 10.0.0.10:8080;

      server 10.0.0.11:8080;

}

3) fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。

upstream favresin{      

      server 10.0.0.10:8080;

      server 10.0.0.11:8080;

      fair;

}

 

 

Nginx的基本配置

1、Nginx配置文件

Nginx服务器自带的配置文件:conf文件夹------>nginx.conf

Nginx的安装目录:/usr/local/nginx-1.12.1/conf/进去查看配置文件。

进入conf文件夹:cd conf(查看自带的配置文件的内容)

/usr:这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下。

编辑文件,使用vi nginx.config

配置文件的基本格式:

worker_processes  1;

events {

    worker_connections  1024;

}

http{

//http里面可以有多个server的配置。

server{}

server{ }

}

 

2、Nginx虚拟主机的配置

为了是每个服务器可以共更多用户访问,可以将一个服务器分为很多虚拟的子服务器,每个子服务器是相互独立的;这些子服务器是根据虚拟化技术分离出来的,这样一台服务器就可以虚拟成很多子服务器,我们把子服务器叫做虚拟主机。我们搭建好Nginx服务器之后,此时只要一台Nginx服务器,这时如果我们对这台服务器进行虚拟主机配置,就可以将一个Nginx服务器分割成多台对的子服务器。

1)配置虚拟主机需要哪些步骤

Nginx中配置虚拟主机有两步:配置IP地址;绑定ip地址与虚拟主机。

2)IP地址的配置

ifconfig是linux中用于显示或配置网络设备(网络接口卡)的命令,可以看到当前主机的ip地址。

SU:( Switch user切换用户),可让一个普通用户切换为超级用户或其他用户,并可临时拥有所切换用户的权限,切换时需输入欲切换用户的密码;进入root模式。

访问ip地址的时候,自动转向虚拟主机;让ip地址与虚拟主机进行绑定。

加载配置文件:在别的配置文件中进行配置,然后加载。

如何创建新的空白文件touch xnzj.conf

vi xnzj.conf :编辑虚拟主机这个文件

访问IP地址的时候,进行跳转到默认的目录。监听某个ip地址。

这台虚拟主机的日子文件放在哪里。

3)Nginx虚拟主机的配置

 

3、Nginx日志文件配置

1)Nginx日志文件格式的配置

Nginx服务器在运行的时候,会有各种操作;这些关键的操作信息会记录到文件中,这些文件叫做日志文件。日志文件的记录是有格式的,我们可以按照系统默认的格式去记录,也可以按照我们自定义的格式去记录。我们可以使用log_format指令来设置Nginx服务器的日志文件的记录格式。日志文件的信息是如何排列的。

2)Nginx日志文件存储路径的配置

日志文件在记录的时候,需要存储到磁盘上,存储的路径是可以配置的。我们通过

access_log指令来配置Nginx的日志文件的存储路径。

Nginx的安装目录

access_log logs/access.log main;

不记录access_log方法:access_log off

3)Nginx日志文件的切割(定期对Nginx文件进行切割,按照天对日志文件进行切割)

为了使Nginx的日志文件存储更合理、有序、我们需要将日志文件进行分开存储;比如我们可以按照时间来分开,今天的日志文件存储到一个文件中,明天的日志文件存储到一个另一个新的文件夹中,这时候就用到日志文件的切割操作。

 

4、Nginx缓存配置

1)当我们在浏览器中浏览某网页时,我们会把该网页上的一些信息存储到本地,当我们第二次浏览该网页的时候,这个网页上的某些信息就可以从本地加载,这样速度就会快很多。存储到本地的这些信息,我们称为缓存;但是缓存文件过多的时候,缓存文件会非常大,影响我们正常的上网活动,故而缓存需要定期清理。

用户访问的只是某一个虚拟主机。

2)压缩功能配置:通过gzip压缩技术,可以使原来的网页内容大小压缩成原来的30%,这样用户在访问网页的时候,由于传输的内容比原来内容小,所以访问速度就会快很多。

 

服务器软件与服务器硬件配合,才能形成一个完整的服务器,而Nginx就是一个服务器软件。

服务器硬件---->操作系统---->服务器软件---->应用程序。

将应用程序放在Nginx服务器上,然后发布应用,让其他人进行访问。

Nginx一个高性能的跨平台服务器,支持高并发;Apache服务器并不支持高并发。Nginx支持多种操作系统.

 

Nginx的功能:

Nginx时一个高性能的HTTP和反向代理服务器,同时也是一个邮件代理服务器(发布应用程序,实现负载均衡,作为邮件服务器实现邮件收发)。

负载均衡:有海量用户访问服务器时,为了减少服务器压力,需要将用户引入各服务器,分担服务器的压力。好处是:加快响应速度;降低服务器崩溃的几率。

反向代理服务器(负载均衡服务器)---->应用服务器集群

Nginx服务器并不处理用户的请求,只是进行请求分发,将请求分发到应用服务器中进行处理。

Nginx的优点:实现高并发;内存消耗少;部署简单;成本低。

 

location是Nginx配置中的一个指令,用于URL匹配.在这个location中,所配置的每个指令将会启动不同的上游服务器去完成相应的工作.

 

负载均衡模块用于从”upstream”指令定义的后端主机列表中选取一台主机。nginx先使用负载均衡模块找到一台主机,再使用upstream模块实现与这台主机的交互.

 

Nginx的默认端口为80,可以不写,http://localhost/  直接通过localhost进行访问,进入index.html(Nginx的欢迎页面)。

 

双击启动Nginx服务器,直接在浏览器中进行访问:http://localhost/

适合Nginx的操作系统是Linux。

修改Nginx配置文件后,要重新启动Nginx才行。

 

在 Linux 系统下搭建Nginx服务器,使用免安装版的软件。

Tomcat的默认端口为8080。

 

Nginx使用总结

1、启动:nginx解压目录下,输入命令 nginx.exe;

2、检查nginx是否启动成功;直接在浏览器地址栏输入网址 http://localhost:80,回车,出现欢迎页面说明启动成功;

3、nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可;

4、使用nginx代理服务器做负载均衡。

可以修改nginx的配置文件nginx.conf达到访问nginx代理服务器时跳转到指定服务器的目的,即通过proxy_pass 配置请求转发地址,即当我们依然输入http://localhost:80 时,请求会跳转到我们配置的服务器。同理,我们可以配置多个目标服务器,当一台服务器出现故障时,nginx能将请求自动转向另一台服务器。可以配置多种负载策略。

upstream标签的使用

5、Nginx配置静态资源;

将静态资源(如jpg|png|css|js等)放在如下配置的f:/nginx-1.12.2/static目录下,然后在nginx配置文件中做如下配置(注意:静态资源配置只能放在 location / 中),浏览器中访问  http://localhost:80/1.png 即可访问到 f:/nginx-1.12.2/static目录下的 1.png图片.

nginx 配置详解 域名 nginx和域名配置_nginx 配置详解 域名

监听端口,站点域名或者ip地址。

6、Nginx日志主要分为两种:访问日志和错误日志。日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的。如果访问报错,记得查看nginx日志。

 

nginx配置tomcat反向代理出现 java.lang.IllegalArgumentException: The character [_] is never valid in a domain

在nginx配置文件中配置upstream时用了“_”字符,如上用的tomcat_server,直接报错了。改成tomcatserver,即不使用“_”字符就好了。主要还是版本原因。

 

Nginx+keepalived主从模式

如何保证Nginx的高可用,使用keepalived。

 

Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是主机的冗余和接管。

HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能,比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

Keepalived与HeartBeat的对比,都是linux下的高可用解决方案。

 

Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。用Nginx+keepalived保障集群的高可用。

 

Keepalived软件起初是专门为LVS负载均衡软件设计的用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写.VRRP出现的目的就是为了解决静态路由单点故障问题的。

 

VRRP原理(争抢机制,主路由)

1.master在工作状态会不断群发一个广播包(内涵优先参数)

2.其他路由收到收到广播后会和自己的优先参数作对比,如果优先参数小于自己则什么都不执行,如果优先参数大于自己则开启争抢机制

3.如果启动了争抢机制,他就会群发自己的优先参数,最终优先参数最小的称为master路由。

 

keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp。

core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。

check负责健康检查,包括常见的各种检查方式。

vrrp模块是来实现VRRP协议的。

 

当NginX停止服务的时候能够自动切换。

安装一个keepalived还是两个?一个nginx对应一台keepalived,并进行主备设置。

 

如何理解 LVS(Linux Virtual Server)即Linux虚拟服务器?

还是要好好看一下linux命令的。

VIP是指虚拟ip。

反向代理层。

 

nginx 配置详解 域名 nginx和域名配置_nginx_02

nginx 配置详解 域名 nginx和域名配置_nginx_03

 

#低权限的用户,可以大大提高系统的安全性。
#user  nobody;  
#工作衍生进程数 代表cpu的核数是1个 cpu的核数和硬件有关系。
worker_processes  1;
 
#设置错误文件存放的路径;nginx服务器出现了错误,会记录到日志文件中。
#可以取消注释,错误信息,注意信息
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#设置pid存放的路径:pid是系统控制中重要的文件(主要用于对nginx服务器进行控制)。
#nginx的控制文件;去掉井号,代码就会生效。
pid    logs/nginx.pid;
 
#设置最大连接数,支持1024个连接数
events {
  use epoll;
  worker_connections 2048;
}
 
#http协议,和网页相关的内容,http里面包含多个server。
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;
  #tcp_nopush   on;
 
  keepalive_timeout 65;
 
  #gzip压缩功能设置
  #开启gzip压缩,对用户访问的网页,是否进行压缩处理。文件缩小,传输速度快。
  gzip on;
  gzip_min_length 1k;
  gzip_buffers  4 16k;
  gzip_http_version 1.0;
  gzip_comp_level 6;
  gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
  gzip_vary on;
  
  #http_proxy 设置
  client_max_body_size  10m;
  client_body_buffer_size  128k;
  proxy_connect_timeout  75;
  proxy_send_timeout  75;
  proxy_read_timeout  75;
  proxy_buffer_size  4k;
  proxy_buffers  4 32k;
  proxy_busy_buffers_size  64k;
  proxy_temp_file_write_size 64k;
  proxy_temp_path  /usr/local/nginx/proxy_temp 1 2;
 
 # 设定负载均衡后台服务器列表 
  upstream backend { 
       #ip_hash; 
       server  192.168.10.100:8080 max_fails=2 fail_timeout=30s ; 
       server  192.168.10.101:8080 max_fails=2 fail_timeout=30s ; 
  }
 
 #很重要的虚拟主机配置
  server {
	#对某个端口进行监听
    listen    80;
    server_name itoatest.example.com;
    root  /apps/oaapp;
 
    charset utf-8;
    access_log logs/host.access.log main;
 
    #对 / 所有做负载均衡+反向代理
    location / {
      root  /apps/oaapp;
      index index.jsp index.html index.htm;
 
      proxy_pass    http://backend; 
      proxy_redirect off;
      # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
       
    }
 
    #静态文件,nginx自己处理,不去backend请求tomcat
    location ~* /download/ { 
      root /apps/oa/fs; 
       
    }
    location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$  
    {  
      root /apps/oaapp;  
      expires   7d; 
    }
    location /nginx_status {
      stub_status on;
      access_log off;
      allow 192.168.10.0/24;
      deny all;
    }
 
    location ~ ^/(WEB-INF)/ {  
      deny all;  
    }
    #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;
    }
  }
 ## 其它虚拟主机,server 指令开始
}

 

main全局配置

woker_processes 2

在配置文件的顶级main部分,worker角色的工作进程的个数,master进程是接收并分配请求给worker处理。这个数值简单一点可以设置为cpu的核数grep ^processor /proc/cpuinfo | wc -l,也是 auto 值,如果开启了ssl和gzip更应该设置成与逻辑CPU数量一样甚至为2倍,可以减少I/O操作。如果nginx服务器还有其它服务,可以考虑适当减少。

worker_cpu_affinity

也是写在main部分。在高并发情况下,通过设置cpu粘性来降低由于多CPU核切换造成的寄存器等现场重建带来的性能损耗。如worker_cpu_affinity 0001 0010 0100 1000; (四核)。

worker_connections 2048

写在events部分。每一个worker进程能并发处理(发起)的最大连接数(包含与客户端或后端被代理服务器间等所有连接数)。nginx作为反向代理服务器,计算公式 最大连接数 = worker_processes * worker_connections/4,所以这里客户端最大连接数是1024,这个可以增到到8192都没关系,看情况而定,但不能超过后面的worker_rlimit_nofile。当nginx作为http服务器时,计算公式里面是除以2。

use epoll

写在events部分。在Linux操作系统下,nginx默认使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。

 

http服务器

sendfile on开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。

keepalive_timeout 65 : 长连接超时时间,单位是秒,涉及浏览器的种类、后端服务器的超时设置、操作系统的设置等。长连接请求大量小文件的时候,可以减少重建连接的开销,但假如有大文件上传,65s内没上传完成会导致失败。如果设置时间过长,用户又多,长时间保持连接会占用大量资源(每个用户都要保持长连接)。

send_timeout : 用于指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。

 

代理模块

这个模块实现的是nginx作为反向代理服务器的功能

client_max_body_size 10m允许客户端请求的最大单文件字节数。如果有上传较大文件,请设置它的限制值.

proxy_connect_timeout 60 nginx跟后端服务器连接超时时间(代理连接超时)

proxy_read_timeout 60连接成功后,与后端服务器两个成功的响应操作之间超时时间(代理接收超时)

 

压缩模块 http_gzip

gzip on : 开启gzip压缩输出,减少网络传输。

gzip_min_length 1k:设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是20。建议设置成大于1k的字节数,小于1k可能会越压越大。

gzip_http_version 1.0 : 用于识别 http 协议的版本,早期的浏览器不支持 Gzip 压缩,用户就会看到乱码,所以为了支持前期版本加上了这个选项,如果你用了 Nginx 的反向代理并期望也启用 Gzip 压缩的话,由于末端通信是 http/1.0,故请设置为 1.0。

gzip_comp_level 6 : gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)

gzip_types :匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。

gzip_proxied any : Nginx作为反向代理的时候启用,决定开启或者关闭后端服务器返回的结果是否压缩,匹配的前提是后端服务器必须要返回包含”Via”的 header头。

 

server虚拟主机

http服务上支持若干虚拟主机。每个虚拟主机一个对应的server配置项,配置项里面包含该虚拟主机相关的配置。每个server通过监听地址或端口来区分。

1)listen监听端口,默认80,小于1024的要以root启动。可以为listen *:80、listen 127.0.0.1:80等形式。

2)server_name服务器名,如localhost、www.example.com,可以通过正则匹配(用于监听要访问的主机名)。

 

location

http服务中,某些特定的URL对应的一系列配置项。

root  /var/www/html 定义服务器的默认网站根目录位置。如果locationURL匹配的是子目录或文件,root没什么作用,一般放在server指令里面或/下。

index index.jsp index.html index.htm 定义路径下默认访问的文件名,一般跟着root放

proxy_pass http:/backend 请求转向名称为backend服务器列表,即反向代理,对应upstream负载均衡器。也可以proxy_pass http://ip:port。