当安装虚拟机为最小化安装时,要使用tab键需要安装 bash-completion
安装网络相关的软件包net-tools(支持ifconfig、netstat..)
安装psmisc 支持killall等
安装vim
导入lnmp文件
下载源码包依赖,pcre-devel支持正则表达式,openssl-devel支持加密的软件包
解压
配置 --user=nginx指定Nginx启动时用该账户启动,默认nobody,增加服务器的安全,--with-http_ssl_module 安全网站模块能够使用加密软件包
编译安装
查看
conf:存放配置文件。html:网站页面。logs:日志。sbin:主程序
当运行该程序不是Nginx用户会报错
创建nginx用户,让其无法登录保障服务器的安全,此时就可以开启Nginx程序
关闭防火墙
在真实主机上访问
Nginx默认监听80端口
-s stop 关闭程序
-V 查看安装时配置的那些参数
测试页面
在Firefox上查看
测试Nginx
配置网站的认证功能(需要验证密码)
nginx.conf:主配置文件
auth_basic: 开启认证功能,后面参数为提示信息
auth_basic_user_file:需要认证的用户名和密码的存放位置
指令和参数之间要有空格,必须以分号结尾
重新加载配置文件(需要在服务开启的状态下)
创建/usr/local/nginx/pass文件,安装httpd-tools软件包
使用htpasswd工具生成加密的pass文件,里面创建用户lisi,-c创建
查看加密文件,此时密码已经被加密
此时查看192.168.99.5网站就需要登录用户
只有在创建加密文件的时候才使用-c选项,添加用户不需要使用
将配置文件恢复为默认
配置nginx的虚拟主机
在http中填写
http{
server{
}
}
重新加载程序
创建虚拟主机的目录,并写入信息
在/etc/hosts文件中添加ip和域名的映射关系
测试虚拟主机
在Windows主机访问虚拟主机,配置hosts文件
右键属性-->安全,选择users,编辑,选择完全控制
添加ip地址和域名
此时浏览器就能访问
搭建安全加密网站,需要使用加密算法。
1、对称算法:AES DES 单机数据加密,使用相同字符串加密和解密
2、非对称算法:RSA DSA 网络数据加密,使用公钥(锁加密),私钥(钥匙)解密
编辑主配置文件中默认的加密网站
将注释#去掉
创建加密网站根目录
使用openssl genrsa命令创建私钥(cert.key)
使用openssl req -x509(证书格式,证书包含公钥) -key conf/cert.key(根据私钥)创建公钥(cert.pem)
重新加载程序,因为没有在网络上进行信息的注册所以需要加-k 忽略网站的风险检测,使用https超文本安全传输协议
监听443端口
3、信息摘要,对数据的校验 md5 sha256
使用md5sum命令对文件进行计算得出值,然后发送该文件比较其md5sum的值
静态网站:在不同环境下,网站的内容不会变化
动态网站:在不同的环境下,内容有可能发生变化(如淘宝、抖音的推送)
nginx默认不支持动态网站,需要配合其他工具,搭建LNMP环境
L-Linux系统。N-Nginx网站服务。M-Mariadb(数据库)。P-php、perl、python 等编写动态网站的语言工具
1、重新安装nginx程序
最后编译make ,安装make install。查看
2、安装MariaDB数据库客户端和服务端
安装MariaDB的依赖mariadb-devel(编辑)
启动MariaDB数据库
3、安装PHP
安装php-mysql 让PHP与MariaDB数据库关联
安装php-fpm,可以帮助nginx解析PHP语言编写的动态网站服务,nginx识别不了以.php为结尾的文件,需要使用fpm服务器帮nginx解析翻译为nginx所能理解的文件
开启fpm服务
当执行netstat -ntulp | grep fpm 没有任何回显则端口没有开发,执行php-cgi -b 127.0.0.1:9000 &
编辑nginx配置文件,取消65,71的注释
location用来匹配用户访问的路径,~ :表示后面路径要用正则表达式。当用户访问动态页面时用下面的配置( ‘{}’ 大括号内的配置)给用户进行服务。root网站根目录,fastcgi_pass:当用户访问.php结尾的文件时,让nginx找后台的php-fpm(端口号9000),fastcgi_index:动态网站的默认页,fastcgi_param:老配置需要去掉,将fastcgi_params修改为fastcgi.conf。
fastCGI:快速公共(通用)网关接口,可以连接如nginx等网站程序到网站语言解释器(如PHP),php-fpm进程使用了fastCGI解析动态页面。
FastCGI工作原理:1.Web Server启动时载入FastCGi进程管理器,2.FastCGI进程管理器初始化,启动多个解释器进程(默认开启5个,不够使用会增加进程),3.当客户端请求达到Web Server时,FastCGI进程管理器选择并连接到一个解释器,4.FAstCGI子进程完成处理后返回结果,将标准输出和错误信息从同一连接返回Web Server。
查看/etc/php-fpm.d/www.conf,php-fpm配置文件,php-fpm服务监听9000端口,
最小进程 为5个,最大设置为50个进程,当开启的进程较多时消耗的CPU内存量也增加
查看进程树php-fpm默认开启的进程数量
当用户没有访问动态页面时,找不到其他location会访问默认的location
重新加载服务
将案例拷贝到网站的根目录
查看该页面
经过fpm服务解析后在浏览器上查看页面源代码就会显示该下面文件
测试mysql的PHP页面
查看浏览器
当在数据库中添加一个用户此时浏览器上的用户数据就会发生变化
地址重写:定义用户访问的路径可以看到实际的内容。获得一个来访的URL请求,然后改写成服务器可以处理的另一个URL的过程。可以缩短URL,隐藏实际路径提高安全性,易于用户记忆和搜索
rewrite 匹配路径 实际看到的页面 选项
恢复nginx为默认状态
修改配置,rewrite支持正则表达式
添加页面
没有重新加载服务时
重新加载服务就会让访问的内容发生改变
当用游览器访问a时也返回b的html
用户访问的路径包含a.html时就会访问跳转到b.html页面
需要加上正则表达式表示确切的字符串,防止前面和后面添加其他字符,将‘.’符号转义
重新加载服务浏览器
只有输入确切的路径才会跳出页面
对rewrite添加选项 redirect:重定向
当使用浏览器访问a.html时回车地址栏会自动变成b.html
当访问任意网站时自动跳转到指定网站
重新加载服务访问浏览器输入虚拟机地址就会自动跳转到百度
只针对任意域名,让访问的域名跳转到指定的域名网页,该访问域名下的页面能正常在指定域名下访问。当用户访问老网站下面的页面时,跳转到新网站下面的该页面。
重新加载,访问浏览器。192.168.99.5/a.html 会转到 https://www.baidu.com/a.html
因为百度下面没有a.html所以访问不到
根据浏览器返回不同的页面,例如当火狐浏览器访问192.168.99.5/abc.html时可以看到html/firefox/abc.html里的内容,而使用其他浏览器访问192.168.99.5/abc.html时可以看到html/abc.html里的内容。
查看nginx的浏览器访问日志
编辑nginx配置文件,$http_user_agent表示当前访问nginx的浏览器信息。~表示支持正则表达式,加*表示忽略大小写。”$http_user_agent ~* firefox”表示当用户的访问浏览器包含(是)Firefox时执行大括号内的指令
创建firefox浏览器和其他浏览器专用页面,重新加载程序
当使用火狐浏览器访问时
当其他浏览器访问时
rewrite 选项:1、redirect 临时重定向 地址栏改变 爬虫不更新URL ,状态码 302
2、permanent 永久重定向 地址栏改变 爬虫更新URL,状态码 301
3、last :不在读取其他的重写规则地址栏不变
当执行该地址重写访问a会跳转到c页面
使用last选项,此时访问a页面就会跳转到b页面不会跳转到c页面
访问b才会跳转c页面
4、break:当执行完该地址重写不会在执行其他重写规则和location。
当在location中last不会影响location,当访问a页面会跳转到b页面,然后location又接收到b页面根据地址重写跳转到c页面,last只会限制rewrite不会限制location。
使用break此时下面的location将不在执行
利用nginx的代理功能搭建集群(轮询分配):网站代理(网站业务)。nginx平均分配任务给集群中的服务器。七层代理(http应用层)。
给集群服务器搭建网站
配置页面、重启服务、关闭防火墙
还原proxy主机的nginx,配置编译安装
编辑nginx配置文件配置集群
upstream:创建集群 web:自己定义的集群名称,server:网站服务器
proxy_pass 调用集群
重新加载nginx服务
用浏览器访问该nginx代理主机,点击刷新会在web1和web2来回切换,nginx轮询分配任务
1、集群优化(调度算法):权重值越大轮询访问的比例就越大(称加权轮询)
weight:指定轮询几率(权重值),默认权重都为1,权重只能是正整数,权重不能太大悬殊。
此时访问代理主机访问页面就会出现web1一次web2两次
2、健康检查:查看集群服务器主机的状态。当客户访问页面,nginx代理默认发送询问次数为1,当集群主机长时间不回应,nginx代理默认该主机出现故障,会选择其他集群主机响应客户端。默认10秒会在询问该有可能出现故障的主机、
设置询问次数,减少误判。max_fails:允许请求失败的个数(默认为1)设置为2次。fail_timeout:max_fails次失败后,暂停提供服务的时间,设置为30秒。
重启服务,此时集群没有任何问题
当关闭web2的http服务,然后马上开启
此时该集群只有web1主机在工作,30秒以后web2才能重新提供服务,被nginx代理调度
3、相同客户机访问相同服务器,防止客户登录了一个集群主机后被nginx代理调度到另一台主机又需要重新登录。
ip_hash:根据客户端的ip(前三位)通过算法,分配固定的后端服务器。
重新加载服务,此时nginx代理会根据IP地址分配固定的集群主机
4、down:表示当前server暂时不参与集群的任务
此时web2不参与集群
四层(传输层,端口号)代理(其他业务),nginx默认不支持该功能需要安装模块。
重新下载nginx,--with-stream:四层代理模块,用来创建其他业务集群。
--with-http_stub_status_module:查看网站的后台数据,如查看网站此时在访问人流量。
编译安装,查看配置
可以直接安装模块不需要重新下载nginx,首先killall nginx:关闭nginx服务,然后再nginx出生目录下./configure --with-stream配置,然后编译,进入objs目录,把编译完后的nginx程序拷贝到/usr/local/nginx/sbin/nginx,此时安装模块就成功了。
编辑nginx配置文件,stream :创建新业务,在‘{}’内编写程序。upstream:创建集群。server:集群中的服务器ip地址和端口号。在http中的server是虚拟主机,而在stream中的server是为了调用集群。listen :监听端口,因为22端口已经被自己调用,访问集群主机的22端口就需要自己定义一个端口号,或者让nginx代理的远程登录换成其他端口,把22端口让出来。proxy_pass :调用集群,由于不是网站不需要写http,直接调用。
重新加载服务,远程登录192.168.99.5,-p:指定端口号
退出后,再次远程登录会出现错误,这是因为第一次访问的是web1的集群主机,而第二次登录192.168.99.5却访问的是web2主机不是同一位主机,会触发的客户端主机的安全机制发出报错
此时需要删除客户端的~/.ssh/know_hosts文件
此时会在web1和web2来回访问登录
ss :查看服务和端口和netstat一样
网站常见的状态码:200:一切正常。301 & 302:重定向。400:请求语法错误。401:访问被拒绝(账户或密码错误)。403:资源不可用,通常由于服务器上文件或目录的权限设置导致。403:禁止访问,客户端的IP地址被拒绝。404:无法找到指定位置的资源(Not Found)。414:请求URL头部太长。500:服务器内部错误。502:服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答(Bad Gateway)无法正常获取下一个服务器正常的应答。
在服务器的日志中查看状态码
修改当客户端访问错误时出现的状态码页面如404
从Windows上通过MobaXterm传递图片到虚拟机的根目录下然后拷贝到html下面
编辑nginx配置文件,
将error_page 404启用并修改路径为上传的该图片
重新启动服务,查看浏览器,此时在访问刚刚重新404状态码的页面就会显示上传的图片
--with-http_stub_status_module:查看网站的后台数据,如查看网站此时在访问人流量。
编辑nginx配置文件,当访问某一目录(自定义如/status)时推送后台访问数据页面。
stun_status on:显示后台数据。
重新加载查看浏览器。
Action connection:表示当前有多少用户访问该网站(当前活动的连接数量)。
Accepts:已经接收客户端的连接总数量(多少客户端访问过)。
Handled:已经处理客户端的连接总数量。
Requests:客户端发送的请求数量。
Reading:当前服务器正在读取客户端请求头的数量。
Writing:当前服务器正在写响应信息的数量。
Waiting:当前有多少客户端在等待服务器的响应。
防止其他主机查看到后台的访问数据页面需要加一些限制,只允许本主机访问其他主机不能访问。
只能自己查看
其他主机查看会出现403禁止访问的状态码
缓存文件到客户端
当客户端访问在服务器上访问数据,每次客户端点击该数据,服务器都会传输给客户端,当大量用户都访问同一个数据就会让服务器负载过重。服务器能控制浏览器和APP把该数据缓存,减少的服务器的压力。
打开nginx配置文件。expires:过期天数。下面代码表示,如果访问了以.jpg/.mp4/.txt/.html为结尾的文件时,缓存30天,30天后失效。
重启服务
在firefox上输入about:cache查看缓存数据
清空历史记录
查看192.168.99.5/test.jpg图片
此时图片就会缓存到浏览器上,到30天后过期
支持超长地址栏
打开导入的lnmp_soft目录下的buffor可执行文件
修改为本机地址,会来回循环http://192.168.99.5/index.html?v1=1v2=2v3=3........到5000=5000
执行该文件,414状态码表示请求URL头部太长
用户访问192.168.99.5/a.html通过浏览器传递给网站,包含头部信息(有用户要访问什么地址的记录),网站会开辟1k的内存空间来存储用户发过来的头部信息,当地址栏的信息超过1k,网站就无法解析其地址了。
打开nginx配置文件,添加client_header_buffer_size:用户访问网站的头部信息增加到200k。
large_client_header_buffers:头部信息最大为4个200k,如果用户访问网站的头部信息超过了200k,就增加到4个200k。
重新启动,然后再执行buffe.sh文件,此时就能正常访问了
优化nginx并发(同时访问的用户数量)
proxy主机为nginx服务器,web1为客户端
在web1上安装httpd-tools软件包
关闭防火墙,设置SELinux为宽松模式
使用压力测试工具ab,-c:表示多少用户,-n:一共发送多少请求,后面为访问对象
查看最后有100%表示抗压成功,该192.168.99.5主机的nginx能同时处理200个人发送的请求。
当2000用户访问时就处理不过来了
对nginx服务进行优化,编辑nginx的配置文件,worker_processes:表示一个nginx开启的进程数,当cup的内核数为8时可以修改为8
worker_connections:表示每个nginx的进程能够支持的并发量
修改进程和并发量
重新加载,需要在优化一下系统的最大开启文件数量的值
系统的最大开启文件数量为1024(网站的index.html也占用资源)
ulimit -n:查看系统最大限制文件数量
临时修改限制文件数量
web1主机模拟压力测试多少用户相当于多少文件,也需要放开最大开启的文件数量
此时2000的用户请求就能处理了
永久修改限制文件数量,编辑/etc/security/limits.conf
修改为下面,“ * ”表示允许谁使用该设置(都允许),soft为软限制,hard为硬限制最大最多,nofile最大打开数量,此时就能永久修改限制文件开启的数量了。
集群优化中ip_hash有一个缺陷就是当有1万台客户端通过算法分配集群中的服务器时,通过IP地址有可能web1的服务器有9千的客户端,而web2只有1千的客户端,就会出现负载不均衡的现象,通过session能够结合ip_hash的优点能够只登录一台服务器,而且能够让nginx均衡的轮询分配客户端给服务器。解决集群中网站重复登录的问题
因为让服务器记录客户端登录状态需要让服务器搭建动态网站,LNMP环境。
拷贝lnmp到100、200主机
解压nginx
安装依赖
然后配置编译安装
安装数据库MariaDB和PHP
然后开启数据库和php-fpm服务
编辑nginx的配置文件,开启动态网站
启动nginx,要先把之前开启的http服务关闭
拷贝案例到网站根目录html下面
使用浏览器查看动态页面刚才拷贝的案例
根据web1的配置来配置web2,安装依赖,配置,编译,安装,在安装LNMP环境,编辑Nginx配置文件。
在proxy中搭建 集群
此时访问代理的网站,就能访问集群中的服务器了
为了区分web1和web2主机,编辑动态页面
编辑web1
编辑web2
此时访问192.168.99.5/index.php就会在web1和web2的界面来回切换
当第一次登录了一个网站,第二次登录时却不需要密码能够直接登录,能够识别到之前登录过该集群的主机。是因为使用了Session和Cookies文件。
Session :存储在服务器端的文件,保存用户名、登录状态等信息
Cookies:由服务器下发给客户端,保存在客户端的一个文件,保存的主要内容是sessionID。
不需要两次登录的原因:当客户第一次登录服务器上时会产生Session和SessionID,然后服务器会复制该sessionID产生Cookies文件发送给客户,等客户下一次登录时服务器识别到Cookies和里面的sessionID,就会用该SessionID和服务器的SessionID相匹配,匹配相同的sessionID的服务器,在服务器的Session文件中找到该客户的信息,此时客户就能够直接登录到有客户信息和相同SessionID的服务器上了。
登录web1,index.php为登录前的页面,home.php为登录后的页面
当下一次登录home.php能够直接登录,浏览器会自动识别Cookies
而当登录web2的登录后的home.php就不能访问,会让其先登录
/var/lib/php/session :服务器默认存放Session的地方。
当把SessionID删除后再登录100的home.php就不能登录了。
此时就需要登录了
当删除web2登录的客户端的Cookies(删除浏览器的缓存数据)时没有SessionID也不能登录。
此时web2也不能登录了
客户端登录两边的原因,当客户端通过代理分配到一个集群主机登录后产生session和Cookies文件,当客户端下一次使用登录后的页面访问代理时代理会认为该客户端访问的是另一个网页,通过轮询就分配给下一个集群主机,该主机识别到是登录后的页面,也没有该客户端的sessionID,此时就需要客户端在重新登录了。
把集群中主机的sessionID和Cookies都删除然后登录就会登录两次
点击提交后下一个页面就会被代理交给另一台主机会马上变成web2的登录页面,需要登录两次。
产生的主要原因是客户刚开始登录只有web1(或web2)中有session,需要让集群中的所有主机都有Session,实现Session共享才能不重复登录。nfs和ftp都占用硬盘资源,需要使用专门的服务器存储Session文件和memcache工具:使用内存存储,查询速度更快。
使用proxy主机充当临时的存储Session服务器需要安装memcache工具。并且需要告诉集群中的主机Session文件换成proxy主机来存储。
memcache是个临时的使用内存的数据库,而MariaDB是永久的使用硬盘的数据库。
安装memcache和telnet:能够登录memcache数据库
开启服务
登录memcache数据库查看,需要使用telnet工具登录,memcache默认端口为11211
增,set:添加变量。0:不压缩,非0压缩。登录周期为几秒。3为存入变量中的字符数为3个
查,get:
改,replace
删,delete
flush_all:删除所有数据
quit退出
通知集群主机不要在往/var/lib/php/session/中存入数据了,要往proxy主机的memcache中存数据,实现Session共享。
编辑集群主机的/etc/php-fpm.d/www/conf文件。
session.save_handler:存储类型;file为普通文件
session.save_path:存储路径;
存储类型修改为memcache,路径为tcp://192.168.99.5:11211,tcp为传输层的协议。
安装php-pecl-memcache软件包让PHP能够写入memcache数据库
重启php-fpm服务
让web2做相同的操作,关闭SELinux和防火墙
此时删除集群主机中的session文件和浏览器的缓存记录
再次访问就可以实现Session共享能够一次登录
此时一次就能登录了
相关阅读
发表评论