域名访问----->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图片.
监听端口,站点域名或者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。
反向代理层。
#低权限的用户,可以大大提高系统的安全性。
#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。