nginx

0.网站页面访问:
a.网站页面访问流程:
01.客户端 浏览器输入网址信息点击回车
02.客户端 完成域名的解析过程(DNS)、
03.客户端 直接访问相应网站服务器 建立TCP三次握手过程
04.客户端 访问网站服务器 发送HTTP请求报文
05.服务端 响应客户端请求 回复HTTP响应报文
06.客户端 浏览器看到网站页面
07.客户端 结束访问网站过程 完成TCP四次挥手过程
b.HTTP协议请求和响应过程
01.HTTP请求报文
1) 请求行
请求方法: get --读/看 --获取/拿过来
post --写/提交
请求信息: index.html(首页文件)
请求协议: http1.1 1.0短连接 1.1长连接 2.0 长TCP连接
2)请求头:
请求主机信息
3)空行
4)请求主体
使用get方法时,没有请求主体信息
使用POST方法时,具有请求主体内容
02.HTTP响应报文
1)起始行
***** 状态码信息 访问请求是成功响应/失败响应
1XX:信息状态码
状态码 含义 描述
100 继续 初始的请求已经接受,请客户端继续发送剩余部分
101 切换协议 请求这要求服务器切换协议,服务器已确定切换
2XX:成功状态码
状态码 含义 描述
200 成功 服务器已成功处理了请求
201 已创建 请求成功并且服务器创建了新的资源
202 已接受 服务器已接受请求,但尚未处理
203 非授权信息 服务器已成功处理请求,但返回的信息可能来自另一个来源
204 无内容 服务器成功处理了请求,但没有返回任何内容
205 重置内容 服务器处理成功,用户终端应重置文档视图
206 部分内容 服务器成功处理了部分GET请求
3XX:重定向状态码
状态码 含义 描述
300 多种选择 针对请求,服务器可执行多种操作
****301 永久移动 请求的页面已永久跳转到新的url
****302 临时移动 服务器目前从不同位置的网页响应请求,但请求仍继续使用原有位置来进行以后的请求
303 查看其他位置 请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码
304 未修改 自从上次请求后,请求的网页未修改过
305 使用代理 请求者只能使用代理访问请求的网页
307 临时重定向 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
4XX:客户端错误状态码
状态码 含义 描述
400 错误请求 服务器不理解请求的语法
****401 未授权 请求要求用户的身份演验证
****403 禁止 服务器拒绝请求
****404 未找到 服务器找不到请求的页面
405 方法禁用 禁用请求中指定的方法
406 不接受 无法使用请求的内容特性响应请求的页面
407 需要代理授权 请求需要代理的身份认证
408 请求超时 服务器等候请求时发生超时
409 冲突 服务器在完成请求时发生冲突
410 已删除 客户端请求的资源已经不存在
411 需要有效长度 服务器不接受不含有效长度表头字段的请求
412 未满足前提条件 服务器未满足请求者在请求中设置的其中一个前提条件
413 请求实体过大 由于请求实体过大,服务器无法处理,因此拒绝请求
414 请求url过长 请求的url过长,服务器无法处理
415 不支持格式 服务器无法处理请求中附带媒体格式
416 范围无效 客户端请求的范围无效
417 未满足期望 服务器无法满足请求表头字段要求
5XX:服务端错误状态码
状态码 含义 描述
500 服务器错误 服务器内部错误,无法完成请求
501 尚未实施 服务器不具备完成请求的功能
****502 错误网关 服务器作为网关或代理出现错误
503 服务不可用 服务器目前无法使用
504 网关超时 网关或代理服务器,未及时获取请求
505 不支持版本 服务器不支持请求中使用的HTTP协议版本
2)响应头部
3)空行
4)响应主体
03.HTTP协议资源信息:
a.URL:uniform resource location 统一资源定位
URI:uniform resource Identifier 统一资源标识符
docs.ansible.com / ansible/latest/user_guide/playbooks.html
URL URI
b.网站页面静态资源: 要什么给什么
特点: 01.网页内容固定不变的,容易被搜索引擎搜索到
02.网页没有数据库支持,所以在网站制作和维护方面工作量大
当网站信息量大时,完全依靠静态网页比较困难
03.网页的交互性较差,在程序的功能实现方面有较大的限制
04.当客户端向服务端请求数据时,服务器直接从磁盘文件系统上返回数据(不做任何解析)
c.网站页面动态资源: 要什么信息,需要进行查询数据库进行解析后发送给客户端
特点: 01.采用动态网页技术的网站可以实现更多的功能,如用户注册,登录,在线调查,投票,用户管理,订单处理,发博文等
02.动态资源页面会出现“?” “&”不便于被搜索引擎收录
03.接收到用户请求,需要让动态服务和数据库服务进行处理
d.伪静态资源:
特点: 1.可以便于搜索引擎进行收录
2.有数据库服务支持,实现网页交互功能
04.网站好坏指标:
a. IP:根据用户IP地址数量进行统计 300-400万 一个星期
局域网多个用户访问: 网站服务器只记录一个IP访问,NAT技术
b. PV:页面访问量 700-800万 一个星期
c. UV: 记录独立访客数量
cookie: 标识用户身份信息,会保存在用户客户端本地 内存中
session: 记录用户的一些会话操作, eg: 记录用户登录信息 记录在服务端 内存中
d.网站的并发: 网站服务器在单位时间内能够处理的最大连接数

1.nginx服务软件的特点:

a.支持高并发,消耗内存资源少
b.具有多种功能:
01.网站web服务功能 --- apache
02.网站负载均衡功能 --- LVS
03.网站缓存服务 --- squid
c.在多种系统平台都可以进行部署
d.nginx实现网络通讯时使用的是异步网络IO模型: epoll模型(apache --select
01.epoll模型:
宿舍管理员: 找人,查看人员登记信息
幼儿园阿姨: 小朋友上WC,都站在教室的某个位置
性能:随着连接数的增加,性能基本上不会下降,连接数无限制
02.select模型:
宿舍管理员:找人,一个一个屋子去问,--线性轮询
幼儿园阿姨:小朋友上WC,一个一个小朋友去询问
性能:随着连接数的增加急剧下降,处理成千上成并发连接数,性能很差,连接数不超过1024
2.nginx的安装(两种安装方式)
01.yum安装软件:
a.使用官方yum源安装, 安装的是最新版本,软件目录结构比较标准(推荐)
b.使用非官方yum源进行安装 安装的不是最新版 目录结构会发生变化
02.编译安装软件
a.wget http://nginx.org/download/nginx-1.16.0.tar.gz
PS:解决软件的依赖 openssl-devel pcre-devel
b.解压下载好的软件,并进入到软件目录中
c.编译安装三步曲
01. ./configure --prefix= --user=USER
--prefix=PATH --set installation prefix 指定程序安装路径
--user=USER --set non-priivleged user for worker processes 设置一个虚拟用户管理worker进程(安全)
--group=GROUP --set non-priivleged group for worker processes 设置一个虚拟用户组管理worker进程(安全)
02.进行软件的编译过程:
make 编译
03.编译安装过程
make install
03.YUM官方源安装方法:
a.更新nginx官方源
vim /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
b. yum安装nginx软件
yum install -y nginx
c.启动nginx服务,检查服务是否安装正确
systemctl start nginx
systemctl enable nginx
04.nginx软件目录结构
a./etc/logrotate.d/nginx --用于日志轮询切割
root@nginx logrotate.d]# vim /etc/logrotate.conf

rotate log files weekly

weekly ---定义默认日志切割的周期

keep 4 weeks worth of backlogs

rotate 4 ---定义只保留几个切割后的文件

create new (empty) log files after rotating old ones

create ---创建出一个相同的源文件

use date as a suffix of the rotated file

dateext 时间扩展名称 ---定义角标(扩展名称信息)

uncomment this if you want your log files compressed

compress ---是否对切割后的文件进行压缩处理

RPM packages drop log rotation information into this directory

include /etc/logrotate.d ---加载包含/etc/logrotate.d/目录中的文件配置

no packages own wtmp and btmp -- we'll rotate them here

/var/log/wtmp { ---单独对某个文件进行切割配置
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}

system-specific logs may be also be configured here.

    b./etc/nginx/nginx.conf                 --nginx主配置文件
      /etc/nginx/conf.d/default.conf 
      /etc/nginx/conf.d/
    c./etc/nginx/mime.types                 --http协议的content-type与扩展名
    d./etc/nginx/fastcgi_params             --cgi,fastcgi,uwcgi配置文件
      /etc/nginx/scgi_params
      /etc/nginx/uwsgi_params
    e./etc/nginx/koi-utf                    --nginx编码转换映射文件
      /etc/nginx/koi-win
      /etc/nginx/win-utf
    f./etc/sysconfig/nginx                  --nginx服务守护进程管理文件
      /etc/sysconfig/nginx-debug
    g./etc/nginx/modules
      /usr/lib64/nginx
      /user/lib64/nginx/modules             --nginx模块目录
    h./usr/share/nginx                      --nginx默认站点目录
    i./var/log/nginx                        --nginx日志目录信息 

05.nginx服务配置文件
/etc/nginx/nginx.conf ---主配置文件
/etc/nginx/nginx.d/default ---扩展配置(虚拟主机配置文件)
[root@mysql ~]# vim /etc/nginx/nginx.conf
第一部分:配置文件主区域配置
user nginx; ---定义worker进程管理的用户
PS: master process: 主进程 ---管理服务是否能够正常运行 BOSS
worker process: 工作进程 ---处理用户的访问请求 员工
worker_processes 1; ---定义有几个worker进程的 ==cpu核数 最多cpu核数2倍
error_log /var/log/nginx/error.log warn; ---定义错误日志
pid /var/run/nginx.pid; ---定义pid文件路径
第二部分:配置文件事件区域
events {
worker_connections 1024; ---一个worker进程可以同时接收1024个请求(可调整)
}
第三部分:配置http区域
http {
include /etc/nginx/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  /var/log/nginx/access.log  main;    ---指定日志路径

sendfile        on;
#tcp_nopush     on;
keepalive_timeout  65;                          ---超时时间
#gzip  on;
include /etc/nginx/conf.d/*.conf;               ---加载一个配置文件

}
第四部分:
[root@mysql conf.d]# cat default.conf
server {
listen 80; ---指定监听的端口
server_name localhost; ---指定网站域名
location / {
root /usr/share/nginx/html; ---定义站点目录的位置
index index.html index.htm; ---定义首页文件
}
error_page 500 502 503 504 /50x.html; ---优雅显示页面
location = /50x.html {
root /usr/share/nginx/html;
}

}
3.nginx服务的企业应用
01.利用nginx服务搭建一个网站(www)
1)编写虚拟主机配置文件
cd /etc/nginx/conf.d/
[root@mysql conf.d]# vim www.conf

            server {
               listen        80;
               server_name   www.lin.com;
               location      /lin {
                  root     /usr/share/nginx/html;
                 index     lin.html;
                 }
            }
       2)需要开发编写的网站代码

<html>
<meta charset="utf-8">
<head>
<title>你是最牛的</title>
</head>
<body>
我们是最强的,我们是最努力的
<table border=1>
<tr> <td>01</td> <td> </td> </tr>
<tr> <td>02</td> <td> </td> </tr>
<tr> <td>03</td> <td> </td> </tr>
</table>
<a href="http://www.baicu.com">
<img src="lin.jpg" />
</a>
</body>
</html>
3)重启nignx服务(平滑重启) ---两种方法,不要混合用,用一种,混合容易出问题
a.systemctl reload nginx
b.nginx -s reload
c.nginx命令参数 -t 检查测试配置文件语法
4)编写DNS配置信息
真实域名: 在阿里云上进行DNS解析记录配置
模拟域名: 在windows主机的hosts文件中进行配置就行 C:\Windows\System32\drivers\etc\hosts
5)进行测试访问: www.lin.com
6)部署搭建网站常见错误:
1)网站服务配置文件编写不正确
404 错误
解决方法-:修改nginx配置文件--- location
解决方法二: 在站点目录中创建相应目录或文件数据信息
403 错误
解决方法一: 不要禁止访问
解决方法二: 因为没有首页文件
2)DNS信息配置不正确
3)nginx配置文件修改一定要重启服务;
站点目录中代码文件信息调整,不需要重启服务
02.利用nignx服务搭建一个多网站(www bbs blog)
第一个历程:创建多个虚拟主机配置文件
[root@mysql conf.d]# cat www.conf bbs.conf blog.conf
server {
listen 80;
server_name www.lin.com;
location / {
root /html/www;
index index.html;
}
}
server {
listen 80;
server_name bbs.lin.com;
location / {
root /html/bbs;
index index.html;
}
}
server {
listen 80;
server_name blog.lin.com;
location / {
root /html/blog;
index index.html;
}
}
第二个历程:创建站点目录和目录中首页文件
[root@mysql conf.d]# for name in {www,bbs,blog};do echo "192.168.3.18 name.lin.com" >/html/name/index.html ; done
[root@mysql conf.d]# for name in {www,bbs,blog};do cat /html/$name/index.html; done
重启服务 systemctl reload nginx
第三个历程:编写hosts解析文件
192.168.3.18 www.lin.com bbs.lin.com blog.lin.com
第四个历程:进行测试访问
curl www.lin.com
curl bbs.lin.com
curl blog.lin.com
03.企业中虚拟主机访问方式
a.基于域名的方式进行访问
b.基于地址的方式进行访问:(只能用指定地址访问)
原因:当一个主机多个IP时,要绑定一个IP,不然多个IP都能访问
方法: 在listen绑定监听IP,一定要restart不能用reload重启
server {
listen 192.168.3.18:80; --在监听地址这绑定IP地址
server_name www.lin.com;
location / {
root /html/www;
index index.html;
}
}
[root@mysql nginx]# netstat -tlnup|grep 80
tcp 0 0 192.168.3.18:80 0.0.0.0:* LISTEN 20431/nginx: master
一个主机有多个网站时(比如BBS,www,BLOG)在conf配置文件要配置上
include /etc/nginx/conf.d/www.conf; --按第一个顺序,如果输入192.168.3.18就显示的是www.lin.com
include /etc/nginx/conf.d/*.conf; --如果没写上一个,只有这个,就会是BBS.lin.com按的是字母的顺序
PS:服务配置文件中涉及到地址修改,必须重启nginx服务restart,不能平滑重启reload不行

    c.基于端口的方式进行访问(多个占用80比如zabbix要用到apache80)
       server {

listen 8080;
server_name www.lin.com;
location / {
root /html/www;
index index.html;
}
}
d.网站页面访问原理
01.将域名进行解析 www.lin.com
02.建立TCP的连接(四层协议)
192.168.3.18 目标端口 80
03.根据应用层HTTP协议发出请求
请求报文:hosts: www.lin.com
04.没有相同域名的server主机,会找满足端口要求的第一个主机
www 8080 bbs 80 blog 80
www.lin.com --显示的是bbs.lin.com 因为解析成192.168.3.18 www端口不对,就找BBS
bbs.lin.com:8080 --显示的是www.lin.com 也是先解析,端口8080要找www
4.企业中网站的安全访问配置
a.根据用户访问的地址进行控制
192.168.3.18 www.lin.com/video/ 可以访问 内网
10.0.0.18 www.lin.com/video/ 不可访问 外网
nginx访问模块: ngx_http_access_module
举例配置:
location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}
指令用法:
Syntax: allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
第一个历程:编写配置文件
server {
listen 192.168.3.18:80;
server_name www.lin.com;
location / {
root /html/www;
index index.html;
}
location /video { --每个loaction都是一个局部配置,所以要写上站点目录,不然是默认的
root /html/www;
index index.html;
deny 192.168.3.20;
allow 192.168.3.12;
}
}
PS: location外面的信息,全局配置信息
location里面的信息,局部配置信息
b.根据用户访问进行认证
nginx认证模块Module ngx_http_auth_basic_module
举例配置:
location / {
auth_basic "closed site"; --开启认证功能 "closed site"引号内容可自己写,就是个说明
auth_basic_user_file conf/htpasswd; ---加载用户密码文件
}
第一个历程:编写虚拟主机配置文件
[root@mysql www]# vim /etc/nginx/conf.d/www.conf

                server {
                   listen       192.168.3.18:80;
                   server_name   www.lin.com;
                   location      / {
                      root     /html/www;
                     index     index.html;
                     auth_basic           "请输入密码:";
                     auth_basic_user_file conf/htpasswd;
                     }
                   location     /video {
                      root     /html/www;
                     index     index.html;
                      deny 192.168.3.20;
                      allow 192.168.3.12;
                }
                }
        第二个历程:创建密码文件(文件中密码信息必须是密文的)
            htpasswd 创建一个有密文信息的密码文件
                [root@mysql www]# rpm -qf `which htpasswd`
                 httpd-tools-2.4.6-89.el7.centos.x86_64
           htpasswd命令参数说明
             -c  Create a new file. *****
                 创建一个密码文件
             -n  Don't update file; display results on stdout.  
                 不会更新文件,显示文件内容信息
             -b  Use the password from the command line rather than prompting for it.*****
                   免交互方式输入用户密码信息
             -i  Read password from stdin without verification (for script usage).
                 读取密码采用标准输入方式,并不做检查
             -m  Force MD5 encryption of the password (default).
             -B  Force bcrypt encryption of the password (very secure).
             -C  Set the computing time used for the bcrypt algorithm
                 (higher is more secure but slower, default: 5, valid: 4 to 31).
             -d  Force CRYPT encryption of the password (8 chars max, insecure).
             -s  Force SHA encryption of the password (insecure).
             -p  Do not encrypt the password (plaintext, insecure).
             -D  Delete the specified user.
             -v  Verify password for the specified user.
         修改密码文件权限:
         [root@mysql password]# chmod 600 htpasswd 
         [root@mysql password]# chown nginx.nginx htpasswd
         500 internal server error
         01.内部程序代码编写有问题
         02.程序服务中文件权限不正确
5.nginx的企业实践应用
      1)利用nginx服务搭建网站文件共享服务器
        第一个步骤:编写配置文件(www.conf)
        nginx模块功能: ngx_http_autoindex_module
        nginx语法:Syntax: autoindex on | off;
                     Default:   autoindex off;    ---默认是关的,要用on来打开
                     Context:   http, server, location
        配置文件设置:server {
                       listen       192.168.3.18:80;
                       server_name   www.lin.com;
                         location     /video {
                          root     /html/www;
                         index     index.html;
                          deny 192.168.3.20;
                          allow 192.168.3.12;
                         auth_basic           "请输入密码:";
                         auth_basic_user_file password/htpasswd;
                         autoindex on;       ---主要把这个设置打开,开启nginx站点目录索引功能
                    }
                    }
         PS:1.要把首页文件进行删除,或改个名字,不然是首先加载首页文件。
            2.mime媒体资源类型文件作用:
              [root@mysql nginx]# vim /etc/nginx/mime.types 
                types {
                text/html                                        html htm shtml;
                text/css                                         css;
                text/xml                
              a.文件中有的扩展名信息资源,进行访问时直接看到数据
              b.文件中没有的扩展名信息资源,进行访问时会直接下载资源
            3.重启服务
            4.浏览器访问时的样子:
            Index of /video/

../
centos6.9/ 17-Feb-2020 11:26 -
centos7.0/ 17-Feb-2020 11:26 -
centos7.5/ 17-Feb-2020 11:26 -
lin.html 17-Feb-2020 07:01 26

          5.网站页面目录数据,中文出现乱码,解决方法:
             nginx模块功能:ngx_http_charset_module
             nginx语法:Syntax:    charset charset | off;
                        Default:    charset off;
                        Context:    http, server, location, if in location
             配置文件修改:server {

listen 192.168.3.18:80;
server_name www.lin.com;
location /video {
root /html/www;
index index.html;
deny 192.168.3.20;
allow 192.168.3.12;
auth_basic "请输入密码:";
auth_basic_user_file password/htpasswd;
charset utf-8; ---主要是增加这个charset,修改目录结构中的中文乱码问题
autoindex on;
}
}
6.利用nginx服务搭建配置文件别名功能
第一个历程:编写配置文件
server_name www.lin.com l.com;
第二个历程:配置好解析信息
作用: 01.编写网站访问测试
02.定位要访问的网站服务器
PS:定位是因为多个nginx时,都是同样的网址不好定位,用别名好定位
7.利用nginx状态模块功能对网站进行监控
状态模块:ngx_http_stub_status_module
nginx语法:Syntax: stub_status;
Default: —
Context: server, location
1. 配置文件修改(重新编写一个配置,用另一个server_name不然冲突了)
[root@mysql conf.d]# vim state.conf
server {
listen 80;
server_name state.lin.com;
stub_status;
}
2.重启nginx服务,并且编写解析文件
systemctl reload nginx
192.168.3.18 state.lin.com www.lin.com l.com
3.在浏览器中输入state.lin.com
Active connections: 5 ---激活的连接数
server accepts handled requests
18 18 14
accepts:接收的连接数汇总(综合)
handled:处理的连接数汇总(综合)一般都是与accepts相同,除非资源上限了,处理不过来
requests:总计的请求数量 HTTP协议请求,一个连接可有多个请求数量,因为是长连接
PS:在主配置文件nginx.conf中keepalive_timeout 0;设为0时就是短连接了,一个连接数就是一个请求数
Reading: 0 Writing: 1 Waiting: 4
Reading: nginx服务读取请求报文的数量 100人点餐
Writing: nginx服务响应报文信息数量 100人响应
Waiting: nginx的队列机制,要处理(读取或响应保存进行保存) 20人排队
8.网站日志功能配置
1)错误日志:/var/log/nginx/error.log -- core functionality
Syntax: error_log file [level];
Default: error_log logs/error.log error;
Context: main, http, mail, stream, server, location
举例配置:error_log /var/log/nginx/error.log warn;
错误级别:
debug :调试级别,服务运行的状态信息和错误信息详细显示 信息最多
info :信息级别,只显示重要的运行信息和错误信息
notice :通知级别,更加重要的信息进行通知说明
warn :警告级别,可能出现了一些错误信息,但不影响服务运行
error :错误级别,服务运行已经出现了错误,需要进行纠正 推荐这个级别
crit :严重级别,必须进行修改调整
alert :严重警告级别:即警告,而且必须进行错误修改
emerg :灾难级别,服务已经不能正常运行 信息最少
2)访问日志:/var/log/nginx/access.log -- ngx_http_log_module
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default: access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
log_format main 'remote_addr -remote_user [time_local] "request" '
'statusbody_bytes_sent "http_referer" ' '"http_user_agent" "http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; PS:这个访问日志可放在location中,所有有多个网站,如bbs,www,blog可在location中设置,这样www,bbs,blog就有多个访问日志 举例配置:server_name www.lin.com; location / { root /html/www; index index.html; access_log /var/log/nginx/www_access.log main; } 日志格式说明:remote_addr 显示用户访问源IP地址信息
remote_user 显示认证的用户信息(网站无认证时会用-显示) [time_local] 显示访问网站时间
"request" 请求报文的请求行信息status 用户访问网站的状态码信息
body_bytes_sent 显示响应的数据大小信息 "http_referer" 记录调用网站资源的连接地址(防止用户盗链)
"http_user_agent" 记录用户使用什么客户端软件进行网页访问(谷歌,IE,火狐,安卓,IPHONE) "http_x_forwarded_for"' 负载均衡
PS:日志文件信息需要做切割处理
3)nginx服务location作用说明
模块说明:ngx_http_core_module
location进行匹配(uri)
错误页面优雅显示
location /lin {
root /html/www;
error_page 404 /wen.jpg
}
Location详细配置
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
location = / { --- 精确匹配 优先级最高 01
[ configuration A ]
}

          location / {                        ---默认匹配     优先级04 最低级
            [ configuration B ]
        }

          location /documents/ {              ---按照目录进行匹配   优先级03
            [ configuration C ]
        }

          location ^~ /images/ {              ---优先匹配/不识别URI信息中符号信息     优先级02
            [ configuration D ]               ---比如下面的.要用到\来转义
        }

          location ~* \.(gif|jpg|jpeg)$ {     ---不区分大小写进行匹配   优先级03
            [ configuration E ]
        }
    4)利用nginx实现页面跳转功能
       利用rewrite模块的跳转功能  http_rewrite_module
       Syntax:  rewrite regex replacement [flag]; rewrite匹配的正则信息,替换成什么信息
       Default: —         
       Context: server, location, if
       PS:flag --- permanent redirect --改写URL   breat last --这两个是改写URI
       语法: rewrite ^/(.*)http://www.lin.com/$1 permanent; 重写规则配置
       PS:$1就是.*
       跳转方式:
       永久跳转: permanent   301 会将跳转信息进项缓存
       临时跳转: redirect    302 不会缓存跳转信息
       出现无限跳转解决方法:
         原因: lin.com会跳转到www.lin.com  但是www.lin.com也是匹配rewrite的^/(.*)中的^
         第一种方法:利用不同server区块配置打破循环
             server {
               listen       80;
               server_name   lin.com;
               rewrite ^/(.*) http://www.lin.com/$1 permanent;
            }
            server {
               listen       80;
               server_name   www.lin.com;
               location      / {
          第二种方法:利用if判断实现打破循环
          server {
           listen       80;
           server_name   www.lin.com lin.com;
           if ($host ~* "^lin.com$") {
           rewrite ^/(.*) http://www.lin.com/$1 permanent;
           }
7.网站的LNMP架构
   L   ---linux系统  selinux和防火墙关闭  /tmp 1777 
   N   ---nginx服务  作用:处理用户的静态请求  html jpg txt mp4/avi
   P   ---php服务    作用:处理动态页面请求,负责和数据库建立关系
   M   ---mysql服务部署  作用:存储用户的字符串数据信息
  02.网站的LNMP架构部署
     a. nginx服务    ---ansible一键化部署,修改yum源
     b. mysql服务部署:
         1)安装数据库软件
         yum install mysql   
         PS:数据库初始化过程 mysql_install_db
         --basedir=path
         --datadir=path
         --user=mysql   700
         
         2)启动数据库服务
         systemctl start mysql
         3)给数据库服务设置密码
         mysqladmin -u root password 'lin.1214'
  03.PHP服务部署流程
     第一个历程:更新yum源/卸载系统自带的PHP软件
     yum remove php-mysql php php-fpm php-common
     rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
     rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
     第二个历程:安装php软件(不要安装最新 ,安装稳定版本)
     yum install -y php71w php71w-cli php71w-common php71w-devel php71w-fpm php71w-opcache php71w-gd php71w-mysqlnd php71w-mbstring php71w-pecl-redis php71w-pecl-memcached php71w-devel php71w-embedded php71w-mcrypt php71w-pdo php71w-xml php71w-pecl-mongodb
     第三个历程:编写配置文件
     vim /etc/php-fpm.d/www.conf
     user = nginx
     group = nginx
     PS:保证nginx进程的管理用户和php服务进程的管理用户保持一致
     第四个历程:启动php服务
     systemctl start php-fpm
     systemctl enable php-fpm
 04.LNMP架构的原理
    nginx(fastcgi_pass) --FastCGI(不同程序之间要通过这种接口)-->(php-fpm -- wrapper) php(php解析器,翻译成sql语句用)-->mysql(读取或写入)
 05.实现lnmp之间建立关系
    1.实现nginx+php建立关系
       第一个历程:编写nginx文件
       编写nginx配置文件: [root@mysql blog]# cd /etc/nginx/conf.d/
            [root@mysql conf.d]# vim blog.conf 
            server {
               listen        80;
               server_name   blog.lin.com;
               location      / {
                  root     /html/blog;
                 index     index.html;
                 }
              location ~ \.php$ {
                root /html/blog;
                fastcgi_index index.php;         URL           URI
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_pass 127.0.0.1:9000;
                include fastcgi_params;    ---变量配置文件
        重启nginx服务,并且编写解析文件
        第二个历程:编写动态资源文件
        vim /html/blog/test.php
         <?php
         phpinfo();
         ?>
        第三个历程:进行访问测试
         lin.blog.com/test.php
    2.实现php+mysql建立关系            
       编写php代码文件
       [root@mysql blog]# vim /html/blog/mysql.php
        <?php
          $servername = "localhost";
          $username = "root";
          $password = "lin.1214";
          //$link_id=mysql_connect('主机名','用户','密码');
          //mysql -u用户 -p密码 -h主机
          $conn = mysqli_connect($servername, $username, $password);
          if ($conn) {
                 echo "mysql successful by root !\n";
              }else{
                 die("Connection failed: ".mysqli_connect_error());
             }
        ?>
06.部署搭建网站页面(代码上线)
   第一个历程:获取代码信息(git) --使用开源的网站代码
   www网站页面:http://www.dedecms.com/
   bbs网站页面: https://www.discuz.net
   blog网站页面:https://cn.wordpress.org/
   wecenter网站页面:http://www.wecenter.com/
   第二个历程:将代码解压,将解压后信息放入到站点目录中
      tar xf wordpress-5.3.2-zh_CN.tar.gz -C /html/blog/
       mv wordpress/* /html/blog/
   第三个历程:修改站点目录权限
      chown -R nginx.nginx /html/blog
   第四个历程:进行网站页面初始化操作
      lin.blog.com/index.php
      输入一些信息: 比如用户: linwen 密码lin.1214
      全输入成功后,网页显示403这个是缺少首页文件,在blog.conf加入index.php
      [root@mysql blog]# vim /etc/nginx/conf.d/blog.conf 
                server {
                   listen        80;
                   server_name   blog.lin.com;
                   location      / {
                      root     /html/blog;
                     index   index.php  index.html;
                     }

   第五个历程:对数据库服务进行配置
      创建数据库:create database wordpress;
      创建数据库管理用户: mysql> grant all privileges on wordpress.* to 'wordpress'@'localhost' identified by 'LinWen.1214';
   第六个历程:利用blog网站发布博文
07.错误解析
  1)上传wordpress主题,报413错误,如何解决
    第一个历程:修改nignx配置文件 vim blog.conf
     server{
       client_max_body_size 50m;  --指定用户上传数据的大小限制默认1M)
       }
    第二个历程:修改php.ini配置文件
     upload_max_filesize= 50M  --使php接收用户上传的更大的数据(默认2M)
  2)如何让LNMP架构和存储服务器建立关系
    第一个历程:找出图片存储的目录
      01.第一种方法:根据图片链接地址获取图片存储位置
        http://blog.lin.com/wp-content/uploads/2020/01/lin.jpg
      02.第二种方法:定位数据存放在站点目录中
        find /html/blog -tpe f -mmin -5 ---五分钟以内的 mmin就是分钟
        inotifywait -mrq /html/blog
    第二个历程:使web服务器和存储服务器建立关系
        检查存储服务是否正常
        编写存储服务配置文件
        mkdir /data/{bbs,blog,www}
        将web服务器blog存储的数据进行迁移
        mv /tmp/2020 /html/blog/wp-content/uploads/
 3)默认存储服务器无法存储数据:
    管理用户无法存储:root_squash  ---nfsnobody
    普通用户无法存储: no_all_squash
    解决:第一个历程:修改NFS配置文件,定义映射用户为nginx(或www)
    useradd nginx -u 1002
    chown -R www /data
    第二个历程:使root用户可以上传数据
    sed -ri .bak 's#(sync)#\1,anonuid=1002,anongid=1002#g' /etc/exports
 4)如何让LNMP架构和数据库服务器建立关系?
    第一个历程:将web服务器本地数据库数据进行备份
    mysqldump -uroot -plin.1214 --all-database >/tmp/web.sql
    第二个历程:将备份数据进行迁移
    scp -rp /tmp/web.sql 192.168.3.12:/tmp
    第三个历程:恢复数据信息
     mysql -uroot -plin.1214 </tmp/web.sql
    第四个历程:修改数据库服务器中的用户信息
    select  user,host from mysql.user
    优化:删除无用的用户信息(就是空用户的)
    delete from mysql.user where user="" and host="localhost";
    添加:添加新的用户信息
    grant all privileges on wordpress.* to 'wordpress'@'192.168.3.%' identified by 'LinWen.1214';
    flush privileges;
    第五个历程:修改web服务器代码文件信息
    vim wp-config.php  --因为帐号密码和之前的一样,就是把主机改下就OK
    /** WordPress数据库的名称 */
        define( 'DB_NAME', 'wordpress' );

        /** MySQL数据库用户名 */
        define( 'DB_USER', 'wordpress' );

        /** MySQL数据库密码 */
        define( 'DB_PASSWORD', 'LinWen.1214' );

        /** MySQL主机 */
        define( 'DB_HOST', 'localhost' );  -->define( 'DB_HOST','192.168.3.12');

        /** 创建数据表时默认的文字编码 */
        define( 'DB_CHARSET', 'utf8mb4' );

        /** 数据库整理类型。如不确定请勿更改 */
        define( 'DB_COLLATE', '' );
     第六个历程:停止web服务器上数据库服务
        systemctl stop mysqld
        systemctl disable mysqld
     问题1:数据库服务没启动报错:Error esttablishing a database connection
     问题2:php没有启动报错:502 bad gateway
     问题3:web01代码信息迁移到web02服务器,并且修改了网站域名无法正确访问
     方法-:修改wordpress后台设置信息,将后台中老的域名改为新的域名
     方法二:修改数据库中的一个表,在表中修改一个和域名有关的条目信息 update
  1. (反向代理)负载均衡
      01.(反向代理)负载均衡的概念
     集群:完成相同任务或工作的一组服务器(web01 web02 web03 --web集群)
    负载均衡:
       1)实现用户访问请求进行调度分配
       2)实现用户访问压力分担
      反向代理:外网 --->(eth0外网) 代理服务器(eth1内网) ---> 公司网站服务器web(内网)
    外网用户(客户端) ---代理服务器(服务端)
    正向代理: 内网(局域网主机) -- (内网)代理服务器(外网) ---互联网 ---web(服务器)
    02.集群服务器部署  
      PS:集群中每个服务器的配置一模一样
    企业中: 01.先部署好一台LNMP服务器,上传代码信息
    02.进行访问测试
    03.批量部署多台web服务器
    04.将nginx配置文件进行分发
    05.将站点目录分发给所有主机
    利用手动方式实现负载均衡:
      修改hosts主机地址和域名映射文件
    03.负载均衡服务器部署:
    第一个历程:安装部署nginx软件
      yum install -y nginx
    第二个历程:编写nginx负载服务配置文件
    ngx_http_upstream_module --- upstream 负载均衡
    ngx_http_proxy_module --- proxy_pass 反向代理
    [root@nginx conf.d]# vim lb.conf
    upstream lin {
    server 192.168.3.18:80;
    server 192.168.3.20:80;
    }
    server {
    listen 80;
    server_name www.lin.com;
    location / {
    proxy_pass http://lin;
    }
    }
    }
    第三个历程:实现负载功能测试
    搭建集群测试环境:
    for name in {bbs,www,blog}; do echo "name 192.168.3.18">/html/name/lin.html;done
    for name in {bbs,www,blog}; do echo "name 192.168.3.20">/html/name/lin.html;done
    04.负载均衡访问网站异常排错思路:
         第一步:负载均衡 测试后端web节点服务器是否能够正常访问
            [root@nginx conf.d]# curl -H host:www.lin.com 192.168.3.18/lin.html
      www 192.168.3.18
    [root@nginx conf.d]# curl -H host:www.lin.com 192.168.3.20/lin.html
      www 192.168.3.20
         第二步: 负载均衡 利用curl命令访问负载均衡服务器
    查看两个配置文件
     第三步: 打开一个XSHELL连接, ping www.lin.com
    第四步:配置文件编写不正确
    05.负载均衡配置模块详细说明
    a.nginx_http_upstream_module --- upstream
    实现不同调度功能
    1.轮询分配请求(平均)
    2.权重分配请求(能力越强责任越重)
    upstream lin {
    server 192.168.3.18:80 weight=3;
    server 192.168.3.20:80 weight=2;
    server 192.168.3.21:80 weight=1;
    }
    3.实现热备功能(备胎功能)
    upstream lin {
    server 192.168.3.18:80 weight=2;
    server 192.168.3.20:80 weight=1 max_fail=5 fail_timeout=10s;
    server 192.168.3.21:80 backup;
    4.定义最大失败次数
    max_fails=5
    5.定义失败之后重发的间隔时间
    fail_timeout=10s 会给失败的服务器一次机会,再等10S后再一次机会
    实现不同调度算法 (放在upstream模块中)
    1.rr   轮询调度算法
           2.wrr   权重调度算法
    3.ip_hash 算法 ---根据ip来分配,(出现反复登录的时候用)这样可以避免在登录验证时出问题,因为验证在后端的18服务器时成功,可再发请求有可能是在20服务器,这样又要重新验证,除非用了缓存服务器
    4.least_conn 根据服务器连接数分配资源
    b.ngx_http_proxy_module --- proxy_pass
    *****01.访问不同的网站地址,不能显示不同的网站页面(bbs,blog,www)
    server {
    listen 80;
    server_name www.lin.com;
    location / {
    proxy_pass http://lin;
    proxy_set_header Host Host;  加上这个 proxy_set_header X-Forwarded-Forremote_addr;
    proxy_next_upstream error timeout http_404 http_403 http_502;
    }
    }
    server {
    listen 80;
    server_name bbs.lin.com;
    location / {
    proxy_pass http://lin;
    proxy_set_header Host Host; proxy_set_header X-Forwarded-Forremote_addr;
    proxy_next_upstream error timeout http_404 http_403 http_502;
    }
    }
    server {
    listen 80;
    server_name blog.lin.com;
    location / {
    proxy_pass http://lin;
    proxy_set_header Host Host; proxy_set_header X-Forwarded-Forremote_addr;
    proxy_next_upstream error timeout http_404 http_403 http_502;
    }
    *****02.访问网站用户地址信息无法进行分析统计  
       proxy_set_header X-Forwarded-For remote_addr; 获取真实IP 03.访问负载均衡会出现错误页面,影响用户体验(用下面的模块跳过有问题的)  Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...; Default: proxy_next_upstream error timeout; Context: http, server, location proxy_next_upstream error timeout http_404 http_403 http_502; 06.负载均衡企业实践应用 1)根据用户访问的URI信息进行负载均衡        第一个历程:架构环境规划 /upload 集群-192.168.3.18:80 /html/www/upload /static 集群-192.168.3.18:80 /html/www/static / 集群-192.168.3.20:80 /html/www 在三个web服务上进行环境部署 web01: mkdir /html/www/upload echo "upload_web集群_192.168.3.18"> /html/www/upload/lin.html web02: mkdir /html/www/static echo "static_web集群_192.168.3.20"> /html/www/static/lin.html web03: mkdir /html/www/ echo "default_web集群_192.168.3.12"> /html/www/lin.html 第二个历程:编写负载均衡配置文件: [root@nginx conf.d]# vim lb.conf upstream upload { server 192.168.3.18:80; } upstream static { server 192.168.3.20:80; } upstream default { server 192.168.3.12:80; } server { listen 80; server_name www.lin.com; location / { proxy_pass http://default; proxy_set_header HostHost;
    proxy_set_header X-Forwarded-For remote_addr; proxy_next_upstream error timeout http_404 http_403 http_502; } location /upload { proxy_pass http://upload; proxy_set_header HostHost;
    proxy_set_header X-Forwarded-For remote_addr; proxy_next_upstream error timeout http_404 http_403 http_502; } location /static { proxy_pass http://static; proxy_set_header HostHost;
    proxy_set_header X-Forwarded-For remote_addr; proxy_next_upstream error timeout http_404 http_403 http_502; } } 总结:实现网站集群动静分离 01.提高网站服务安全性        02.管理操作工作简化 03.可以划分不同人员管理不同集群服务器 2)根据用户访问的终端信息显示不同页面 第一个历程:准备架构环境   iphone www.lin.com ---iphone_access 192.168.3.18:80 谷歌 www.lin.com ---google_access 192.168.3.20:80 IE 360 www.lin.com ---default_access 192.168.3.12:80 echo "iphone_access 192.168.3.18" >/html/www/lin.html echo "google_access 192.168.3.20" >/html/www/lin.html echo "default_access 192.168.3.12" >/html/www/lin.html 第二个历程:编写负载均衡配置文件 [root@nginx conf.d]# vim lb.conf upstream mobile { server 192.168.3.18:80; } upstream web { server 192.168.3.20:80; } upstream default { server 192.168.3.12:80; } server { listen 80; server_name www.lin.com; location / { if (http_user_agent ~* iphone) {
    proxy_pass http://mobile;
    }
    if (http_user_agent ~* Chrome) { proxy_pass http://web; } proxy_pass http://default; proxy_set_header HostHost;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_next_upstream error timeout http_404 http_403 http_502;
    }
    }
    4.高可用服务keepalive
    01.用途: 避免负载均衡服务出现单点问题
    02.原理: keepalived高可用之间是通过VRRP通信的,先说下VRRP
    VRRP: a.全称Virtual Router Redundancy Protocol 虚拟路由冗余协议 VRRP的出现是为了解决 静态路由的单点故障
    b.VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器
    c.VRRP用IP多播的方式(默认多播地址224.0.0.18)实现高可用之间通信
    d.工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包时,就启动
     接管程序接管主节点的资源。PS:备节点可以多个,通过优先级竞选,一般keepalive在运维中是一对
    e.VRRP使用了加密协议加密数据,但keepalive廴还是推荐使用明文方式
    keepalive工作原理:keepalived高可用之间是通过VRRP进行通信的,VRRP是通过竞选机制来
    确定主备的,主的优先级高于备,因此,工作时主会优先获得所有资源,备节点处于等待状态,
    当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
    在keepalive服务之间,作为主的服务器一直发送VRRP组播包,告诉备它还活着,当主不可用
    ,即备监听不到主发送的组播包时,就会启动相关服务接管资源,保证业务的连续性,接管速度最快可以小于1秒
    03.实现部署高可用服务 
      利用keepalived软件实现(高可用服务软件好多,这只是其中一种)
      作用: 1.为lVS服务诞生出来的。2.实现高可用服务功能
    04.高可用keepalived服务部署流程
    第一个历程:准备高可用服务架构
    第二个历程:安装部署keepalived软件  yum install -y keepalived高可用之间是通过VRRP进行通信的,VRRP是通过竞选机制来
    第三个历程:编写keepalived配置文件
    vim /etc/keepalived/keepalived.conf
    GLOBAL CONFIGURATION ---全局配置部分
    VRRPD CONFIGURATION ---VRRP协议配置部分
    LVS CONFIGURATION ---LVS服务管理配置部分(这部分可删除,LVS时才有用)
    [root@nginx ~]# vim /etc/keepalived/keepalived.conf
    global_defs { ---全局配置部分
    notification_email { ---设置发送邮件信息
    failover@firewall.loc
    sysadmin@firewall.loc
    }
    notification_email_from Alexandre.Cassen@firewall.loc --设置连接的邮件服务器信息
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL --- 高可用集群主机身份标识(集群中班机身份标识不能重复)
    vrrp_skip_check_adv_addr
    vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0
    }vrrp_instance lin { ---Vrrp相关配置(vrrp实例配置--一个服务可以启动多个主进程) vrrp协议家族,lin
    state MASTER ---标识所在家族中身份(master/backsup)
    interface eth0 ---指定虚拟IP地址出现在什么网卡上
    virtual_router_id 51 ---标识家族身份信息 多台高可用服务器配置要一致
    priority 100 ---设定优先级 优先级越高,就越有可能成为主
    advert_int 1 ---定义组播包发送的间隔时间(秒),主与备配置一样
    authentication { ---实现通讯需要有认证过程
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress { ---配置虚拟IP地址信息
    192.168.200.16
    192.168.200.17
    192.168.200.18
    }
    }
    02. lb01配置信息:
    global_defs {
    router_id lb01
    }
    vrrp_instance lin {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    192.168.3.88
    }
    }
    03.lb02配置信息
    global_defs {
    router_id lb02
    }

             vrrp_instance lib {
                 state BACKUP
                 interface eth0
                 virtual_router_id 51
                 priority 100
                 advert_int 1
                 authentication {
                     auth_type PASS
                     auth_pass 1111
                 }
                 virtual_ipaddress {
                     192.168.3.88
                 }
             }
    

    第四个历程:启动keepalived服务
       systemctl start keepalived
    systemctl enable keepalived
    global中的vrrp_strict一定要关掉,不然ping不了vip
    05.高可用服务企业应用
        1.高可用服务常见异常问题---脑裂问题
        2.出现原因:高可用备服务器接收不到主服务器发送的组播包,备服务器上自动生成vip地址
    物理原因:高可用集群之间通讯线路出现问题,网络波动,线路出问题等
    逻辑原因:有安全策略阻止
    3.解决方法:
    01.进行监控,发出告警
    备服务器出现VIP的原因:
             a.主服务器出现故障 
             b.出现脑裂问题 
    c.不管以上两种什么情况都要报警,在备服务器上编写监控脚本
    [root@nginx scripts]# vim keepalived_alert.sh
    #!/bin/bash
    ip a s eth0|grep "192.168.3.88" >/dev/null
    if [ ? -ne 0 ] then echo "keepalived服务出现异常,请进行检查"|mail -s 异常告警-keepalived 271119314@qq.com fi 02.直接关闭一台服务器的keepalived服务    4.如何实现keepalived服务自动释放VIP资源(比如nginx停了,这时LB没了,就要转VIP给备了) nginx+keepalived:nginx服务停止,keepalived也必须停止 第一个历程:编写监控nginx服务的脚本(脚本名最好不要加nginx,当用PS命令来弄脚本时,其实最好用netstat的命令来写) a. vim check_web.sh #!/bin/bash num=`ps -ef|grep -c nginx` if [num -lt 3 ]
    then
    systemctl stop keepalived
    fi
    b.vim check_web.sh 推荐这种
    #!/bin/bash
    netstat -tlnup|grep ":80" >/dev/null
    if [ $? -ne 0 ]
    then
    systemctl stop keepalived
    fi

         第二个历程:测试编写脚本
    

第三个历程:实时监控nginx服务状态---keepalived配置文件
01.设置脚本(放在globle 和Vrrp_instance之间)
vrrp_script check_web{
script "/server/scripts/check_web.sh"
interval 2
weight 2
}
02.调用脚本(放在vrrp_instance里面)
track_script {
check_web
}
5.高可用集群双主配置
第一个历程:编写lb01的配置文件,就是多写一个实例
global_defs {
router_id lb01
}
vrrp_instance lin {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.88/24
}
}
vrrp_instance wen {
state MASTER
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.89/24
}
}
第二个历程:编写lb02的配置文件(与lb01相反)
第三个历程:编写域名和IP地址解析信息
6.高可用服务安全访问配置(负载均衡服务)
  第一个历程:修改nginx负载均衡文件 vim /etc/ngixn/conf.d/lb.conf
server {
listen 192.168.3.88:80;
server_name www.lin.com;
location / {
proxy_pass http://web;
proxy_set_header Host Host; proxy_set_header X-Forwarded-Forremote_addr;
proxy_next_upstream error timeout http_404 http_403 http_502;
}
}
server {
listen 192.168.3.89:80;
server_name bbs.lin.com;
location / {
proxy_pass http://web;
proxy_set_header Host Host; proxy_set_header X-Forwarded-Forremote_addr;
proxy_next_upstream error timeout http_404 http_403 http_502;
}
}
第二个历程:修改内核文件(主要是双主的keepalive的配置)
异常问题:如何监控网卡上没有的IP地址,就是双VIP,监听不在本地的IP地址
解决方法:1.echo 'net.ipv4.ip_nonlocal_bind=1' >>/etc/sysctl.conf
2.sysctl -p 加载这个文件
3.[root@nginx conf.d]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1
第三个历程:重启nginx负载均衡服务
systemctl restart nginx

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351