第三阶段基础
时 间:2023年7月27日
参加人:全班人员
内 容:
Nginx企业级优化与防盗链
目录
一、配置Nginx实现防盗链功能
1、建立资源主机的测试主页
2、建立盗链主机的测试主页
3、资源主机设置防盗链
二、对FPM模块进行参数优化
三、Nginx 为目录添加访问控制
四、自定义错误页面
五、自动索引
六、目录别名功能
七、通过UA实现手机端和电脑端的分离
八、nginx平滑升级版本
(一)nginx平滑升级概述
(二)nginx平滑升级原理
(三)nginx平滑升级实战
1.查看旧版nginx的编译参数
2.编译新版本Nginx源码包,
3.备份二进制文件,用新版本的替换
4.确保配置文件无报错
5.发送USR2信号
6.发送WINCH信号
7.发送QUIT信号
8.验证nginx版本号,并访问测试
九、附录:CPU相关信息查看
查看CPU型号:
查看物理CPU个数:
查看CPU核心数:
查看CPU线程数:
查看相关系统信息:
Nginx防盗链功能也非常强大,在默认情况下只需要进行简单的配置,即可实现防盗处理
实验环境:
vim /usr/local/nginx/html/index.html
配置如下:
启动服务:/usr/local/nginx/sbin/nginx
本机(100.131)测试:
vim /usr/local/nginx/html/index.html
配置如下:
客户机(100.132)测试:
配置说明:
valid_referers 设置信任网站;
none浏览器中referer(Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理)为空的情况,就直接在浏览器访问图片;
blocked referer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或https://开头。
vim /usr/local/nginx/conf/nginx.conf
配置如下:
启动服务:
第一行:
wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv表示对这些后缀的文件实行防盗链
第二行:
none blocked *.192.168.100.131;
//不区分大小写
表示referers信息中匹配none blocked *.source.com source.com (*代表任何,任何的二级域名)
if{}里面内容的意思是,如果链接不是来自第二行指定的就强制跳转到403错误页面,当然直接返回404也是可以的,也可以是图片。
注意:设置客户机的hosts文件
客户(100.132)测试:
Nginx的PHP解析功能实现如果是交由FPM(fastcgi 进程管理器)处理的,为了提高PHP的处理速度,可对FPM模块进行参数跳转。
FPM优化参数:
pm 使用哪种方式启动fpm进程,可以说static和dynamic,前者将产生固定数量的fpm进程,后者将以动态的方式产生fpm进程
pm.max_children static方式下开启的fpm进程数
pm.start_servers 动态方式下初始的fpm进程数量
pm.min_spare_servers 动态方式下最小的fpm空闲进程数
pm.max_spare_servers 动态方式下最大的fpm空闲进程数
注:以上调整要根据服务器的内存与服务器负载进行调整
示例:
服务器为云服务器,运行了个人论坛,内存为1.5G,fpm进程数为20,内存消耗近1G,处理比较慢
优化参数调整:
# vim /usr/local/php5/etc/php-fpm.conf
pm = dynamic
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
用户访问控制:使用apache 的 htpasswd 命令来创建密码文件
yum -y install httpd-tools
htpasswd -c /usr/local/nginx/.htpasswd crushlinux
客户端地址访问控制:
vim /usr/local/nginx/conf/nginx.conf
配置如下:
访问测试:
vim /usr/local/nginx/conf/nginx.conf
自定义错误配置如下:
启动服务:
访问测试:
vim /usr/local/nginx/conf/nginx.conf
索引配置如下:
启动服务:
访问测试:
192.168.100.131/download
vim /usr/local/nginx/conf/nginx.conf
别名配置如下:
启动服务:
访问测试:
http://192.168.100.131/abc 进行测试
实现nginx区分pc和手机访问不同的网站,是物理上完全隔离的两套网站(一套移动端、一套pc端),这样带来的好处pc端和移动端的内容可以不一样,移动版网站不需要包含特别多的内容,只要包含必要的文字和较小的图片,这样会更节省流量。有好处当然也就会增加困难,难题就是你需要维护两套环境,并且需要自动识别出来用户的物理设备并跳转到相应的网站,当判断错误时用户可以自己手动切换回正确的网站。
有两套网站代码,一套PC版放在/usr/local/nginx/html/web,一套移动版放在/usr/local/nginx/html/mobile。只需要修改nginx的配置文件,nginx通过UA来判断是否来自移动端访问,实现不同的客户端访问不同内容。
location / {
#默认PC端访问内容
root /usr/local/nginx/html/web;
#如果是手机移动端访问内容
if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
{
root /usr/local/nginx/html/mobile;
}
index index.html index.htm;
}
实验模拟:不同浏览器访问到不同的页面
vim /usr/local/nginx/conf/nginx.conf
配置如下:
配置首页信息:
访问测试:
随着网站并发访问量越来越高,nginx web 服务器也越来越流行,nginx 版本换代越来越频繁,1.15.2版本的nginx更新了许多新功能,生产环境中版本升级必然的,但是线上业务不能停,此时nginx的升级就是运维的重要工作了。
多进程模式下的请求分配方式:
Nginx默认工作在多进程模式下,即主进程(master process)启动后完成配置加载和端口绑定等动作,fork出指定数量的工作进程(worker process),这些子进程会持有监听端口的文件描述符(fd),并通过在该描述符上添加监听事件来接受连接(accept)。
信号的接收和处理:
Nginx主进程在启动完成后会进入等待状态,负责响应各类系统消息,如SIGCHLD、SIGHUP、SIGUSR2等。
Nginx信号简介:
主进程支持的信号:
TERM, INT: 立刻退出
QUIT: 等待工作进程结束后再退出
KILL: 强制终止进程
HUP: 重新加载配置文件,使用新的配置启动工作进程,
并逐步关闭旧进程。
USR1: 重新打开日志文件
USR2: 启动新的主进程,实现热升级
WINCH: 逐步关闭工作进程
工作进程支持的信号:
TERM, INT: 立刻退出
QUIT: 等待请求处理结束后再退出
USR1: 重新打开日志文件
rpm -q httpd
package httpd is not installed
yum -y install pcre-devel zlib-devel openssl-devel
软件包准备:
/usr/local/nginx/sbin/nginx -V
安装路径需与旧版一致,注意:不要执行make install !!!!
tar xf nginx-1.15.9.tar.gz -C /usr/src/
cd /usr/src/nginx-1.15.9/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make
mv /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx.old
ls
cp objs/nginx /usr/local/nginx/sbin/
/usr/local/nginx/sbin/nginx -t
向主进程(master)发送USR2信号,Nginx会启动一个新版本的master进程和对应工作进程,和旧版一起处理请求
ps aux | grep nginx | grep -v grep
kill -USR2 102604
ps aux | grep nginx | grep -v grep
向旧的Nginx主进程(master)发送WINCH信号,它会逐步关闭自己的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理
kill -WINCH 102604
ps aux | grep nginx | grep -v grep
注意:回滚步骤,发送HUP信号
如果这时需要回退继续使用旧版本,可向旧的Nginx主进程发送HUP信号,它会重新启动工作进程, 仍使用旧版配置文件。然后可以将新版Nginx进程杀死(使用QUIT、TERM、或者KILL)
kill -HUP 102604
ps aux | grep nginx | grep -v grep
升级完毕,可向旧的Nginx主进程(master)发送(QUIT、TERM、或者KILL)信号,使旧的主进程退出
kill -QUIT 102604
ps aux | grep nginx | grep -v grep
/usr/local/nginx/sbin/nginx -v
grep "model name" /proc/cpuinfo | uniq
dmidecode -s processor-version | uniq
grep 'physical id' /proc/cpuinfo |sort -u |wc -l
grep 'physical id' /proc/cpuinfo |uniq |wc -l
grep 'core id' /proc/cpuinfo | sort -u | wc -l
grep 'core id' /proc/cpuinfo | uniq | wc -l
grep 'processor' /proc/cpuinfo | sort -u | wc -l
grep 'processor' /proc/cpuinfo | uniq | wc -l
free -m
free -g
df -Th
mii-tool ens33