一起了解Nginx与LNMP吧!
一、关于Nginx
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mPj9vG8T-1658675109304)(C:\Users\无圆的缘\AppData\Roaming\Typora\typora-user-images\image-20220719160734950.png)]
1.概述
Nginx (“engine x”) 是一个高性能的 HTTP 和反向代理服务器。第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。
其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011 年 6 月 1 日,Nginx 1.0.4 发布。
Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,
单台物理服务器可支持30 000~50 000个并发请求。并在一个 BSD-like 协议下发行。
其特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 Nginx 网站用户有:百度、BWS、新浪、网易、腾讯、等。
扩展
Tengine:
Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine 的性能和稳定性已经在大型的网站如淘宝网、天猫商城等得到了很好
的检验。
(可以这样理解:淘宝网拿到了 Nginx 源代码之后,进行了功能的填充、优化等等,然后提交给Nginx 官方,但是由于 Nginx 官方响应慢甚至不响应,加上语言沟通的不顺畅,于是淘宝公司就自己打包,在遵循 GPL 的原则上进行二次开发,于是就出了现在的 Tengine 这个版本)
2.简述Aache和Nginx的差异
Nginx是一个基于事件的Web服务器,Apache是一个基于流程的服务器;
Nginx所有请求都由一个线程处理,Apache单个线程处理单个请求;
Nginx避免子进程的概念,Apache是基于子进程的;
Nginx在内存消耗和连接方面更好,Apache在内存消耗和连接方面一般;
Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于CPU和内存等硬件;
Nginx支持热部署,Apache不支持热部署;
所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。
对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部署的过程中,类装入器扮演着重要的角色。大多数基于Java的应用服务器,包括EJB服务器和Servlet容器,都支持热部署。类装入器不能重新装入一个已经装入的类,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。
Nginx对于静态文件处理具有更高效率,Apache相对一般;
Nginx在反向代理场景具有明显优势,Apache相对一般。
另一个区别:
Nginx可部署在应用层和传输层,但是Apache只能生效在应用层
3.nginx 应用场景
① 静态服务器 (图片、视频服务、文本)
② 动态服务
③ 反向代理, 负载均衡
④ 缓存服务
nginx 中有http七层代理和四层代理
二、编译安装Nginx
1.把防火墙和核心防护关闭,将所需安装包放到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
cd /opt
拉压缩包进来
2.安装依赖包
nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
3.创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
4.编译安装Nginx
cd /opt
tar zxvf nginx-1.12.2.tar.gz -C /opt/
cd nginx-1.12.2/
./configure
–prefix=/usr/local/nginx \ #指定nginx的安装路径
–user=nginx \ #指定用户名
–group=nginx \ #指定组名
–with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计操作
make && make install
或者make -j3 && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令
5.检查、启动、重启、停止 nginx服务
nginx -t #检查配置文件是否配置正确
启动 nginx
开启后访问:
停止:
#停止
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx
#重载
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx
#日志分割,重新打开日志文件
kill -USR1 <PID号>
#平滑升级
kill -USR2 <PID号>
信号编号 | 信号名 | 含义 |
---|---|---|
0 | EXIT | 程序退出时收到该信息。 |
1 | HUP | 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。 |
2 | INT | 表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号。 |
3 | QUIT | 退出。 |
9 | KILL | 杀死进程,即强制结束进程。 |
11 | SEGV | 段错误。 |
15 | TERM | 正常结束进程,是 kill 命令的默认信号 |
6.新版本升级
cd /opt
tar -zxvf nginx-1.xx.xx.tar.gz 1.22.0 //升级到1.22.0版本
cd nginx-1.xx.xx
./configure
–prefix=/usr/local/nginx \
–user=nginx \
–group=nginx \
–with-http_stub_status_module
–with-http_ssl_module
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RwsHuaKR-1658675109314)(C:\Users\无圆的缘\AppData\Roaming\Typora\typora-user-images\image-20220719201423466.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I3kWnT0J-1658675109315)(C:\Users\无圆的缘\AppData\Roaming\Typora\typora-user-images\image-20220719201415936.png)]
会报错,原因是环境没有弄好输入以下命令把环境弄好
yum -y install gcc openssl openssl-devel pcre-devel zlib zlib-devel
然后就升级成功了
make //只要编译就行,不要安装,不然前面的配置都取消了
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old 备份
cp objs/nginx /usr/local/nginx/sbin/nginx
重启服务
并且
nginx -V #查看版本
查看版本之前,nginx服务先重启
make upgrade或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
7.添加 Nginx 系统服务
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Install]服务安装的相关设置,可设置为多用户
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9BpdfVVs-1658675109322)(C:\Users\无圆的缘\AppData\Roaming\Typora\typora-user-images\image-20220720144710186.png)]
8.认识Nginx服务的主配置文件nginx.conf
vim /usr/local/nginx/conf/nginx.conf
1.全局配置(开机启动之后生效)
user nobody; #运行用户,若编译时未指定则默认为 nobody(临时用户)
要将其改成程序用户nginx
worker_processes 4; #工作进程数量,可配置成服务器内核数 *
2.如果网站访问量不大,一般设为1就够用了
error_log logs/error.log; #错误日志文件的位置
pid logs/nginx.pid; #PID 文件的位置
2.I/O 事件配置
events {
use epoll; #使用 epoll 模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 4096; #每个进程处理 4096 个连接
}
如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
永久配置
vim /etc/security/limits.conf
其中root可以用*表示
然后打开shell连接后重新连接,然后再用ulimit -a 查看就可
在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。
扩展:文件打开数优化(出现高并发时)
应用程序里面做优化
系统内核里面做优化
既要满足系统限制又要满足应用限制,满足其中一个也会受到另一个限制。
即应用的运行还要看系统的资源配置,如果系统资源不足,那么应用将会很卡
epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数
已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性
能表现。
3.HTTP 配置(在HTTP之前的配置都为全局模块配置,HTTP的配置在使用HTTP时才生效)
使用“http { }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保
持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都包
含在子界定标记“server { }”内
http {
mime.types文件扩展名与文件类型映射表,用来支持打开相应的文本
include mime.types;
默认文件类型
default_type application/octet-stream;
日志格式设定
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “$request” ’
'$status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer" ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;
访问日志位置
access_log logs/access.log main;
支持文件发送(下载)
sendfile on;
此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
tcp_nopush on;
连接保持超时时间,单位是秒
keepalive_timeout 0;
keepalive_timeout 65;
gzip模块设置,设置是否开启gzip压缩输出
gzip on;
##Web 服务的监听配置
server {
##监听地址及端口
listen 80;
##站点域名,可以有多个,用空格隔开
server_name www.kgc.com;
##网页的默认字符集
charset utf-8;
##根目录配置
location / {
##网站根目录的位置/usr/local/nginx/html
root html;
##默认首页文件名
index index.html index.php;
}
##内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
##错误页面配置
location = /50x.html {
root html;
}
}
}
http和server关系
日志格式设定:
r
e
m
o
t
e
a
d
d
r
与
remote_addr与
remoteaddr与http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
(相当于Nginx前端开启了某些配置服务可以把客户端信息发送给后端【Tomcat】)
location常见配置指令,root、alias、proxy_pass
root(根路径配置): root /usr/local/nginx/html 或者root /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html
alias(别名配置):alias /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html
proxy_pass(反向代理配置)
扩展
企业业务环境
9.访问状态统计配置
查看模块
查看安装模块
vim /usr/local/nginx/conf/nginx.conf
重启服务,访问测试
systemctl restart nginx
然后浏览器访问
10.基于授权的访问控制
密码用htpasswd来
1)生成用户密码认证文件
htpasswd -c /usr/local/nginx/passwd.db xuanxuan //创建用户
如果创建多个用户,第二个就不用-c
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zlriXXVm-1658675109334)(C:\Users\无圆的缘\AppData\Roaming\Typora\typora-user-images\image-20220720203147370.png)]
2)修改主 配置文件和对应目录,添加认证配置项
vim /usr/local/nginx/conf/nginx.conf
auth_basic “secret”;
auth_basic_user_file /usr/local/nginx/passwd.db;
3)重启服务,服务访问
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZnGB9aBN-1658675109335)(C:\Users\无圆的缘\AppData\Roaming\Typora\typora-user-images\image-20220720203151383.png)]
11.基于客户端的访问控制
deny ip/ip网段 或者 allow ip/ip段,规则从上往下,匹配一个就停止,不再往下匹配
vim /usr/local/nginx/conf/nginx.conf
nginx -t 检查配置错误
重启服务,进行访问
systemctl restart nginx,发现访问不了,如果把allow放到前面就可以访问
12.基于域名方式的访问验证
重新用nginx.conf配置文件
为虚拟主机提供域名解析
echo “20.0.0.10 www.xuanxuan.com www.fufu.com” >> /etc/hosts
如果是Windows主机需要在hosts文件里配置映射关系
为虚拟主机准备网页文档
mkdir -p /var/www/html/xuanxuan
mkdir -p /var/www/html/fufu
echo “
www.xuanxuan.com
” > /var/www/html/xuanxuan/index.htmlecho “
www.fufu.com
” > /var/www/html/fufu/index.html修改Nginx 配置文件:vim nginx.conf
重启服务,进行访问
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xAk1hZ0i-1658675109340)(C:\Users\无圆的缘\AppData\Roaming\Typora\typora-user-images\image-20220720225534771.png)]
查日志文件信息
13.基于IP的Nginx虚拟主机(同端口不同IP)
设置另一个网卡信息
ifconfig ens33:0 20.0.0.40 netmask 255.255.255.0
修改配置文件:vim nginx.conf
重新启动
访问服务
14.基于端口的Nginx主机(同IP不同端口)
修改配置文件 vim nginx.conf
重启服务并访问
三、Nginx优化
1.隐藏版本号
也可以在 CentOS 中使用命令 curl -I http://20.0.0.20 显示响应报文首部信息。(有版本号)
vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off; //添加,关闭版本号
…
}
nginx -t
systemctl restart nginx
2.伪装成其他版本
修改源码文件,重新编译安装
源码文件:/opt/nginx-1.22.0/src/core/nginx.h
vim /opt/nginx-1.12.0/src/core/nginx.h
define NGINX_VERSION “1.1.1” //修改版本号
define NGINX_VER “IIS” NGINX_VERSION //修改服务器类型
再重新编译安装
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && make install
在修改主配置文件,开启版本信息显示,并重启验证
3.修改用户与组
vim /usr/local/nginx/conf/nginx.conf user nginx nginx; //取消注释,修改用户为 nginx ,组为nginx systemctl restart nginx
然后ll查看
4.缓存时间
当Nginx将网页数据返回客户端后,可设置缓存的时间,以方便在日后进行相同内容的请求直接返回,避免重复请求,加快了访问速度
一般针对静态网页设置,对动态网页不设置缓存时间
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
http {
…
server {
…
location / {
root html;
index index.html index.htm;
}
location ~ .(gif|jpg|jepg|png|bmp|ico)$ { //加入新的 location,以图片作为缓存对象
root html;
expires 1d; //指定缓存时间,1天
}
…
}
}
在Linux系统中,打开火狐浏览器,右击点查看元素 选择 网络 —> 选择 HTML、WS、其他 访问 http://192.168.71.20,双击200响应消息查看响应头中包含 Cahce-Control:max-age=86400 表示缓存时间是 86400 秒。也就是缓存一天的时间,一天之内浏览器访问这个页面,都是用缓存中的数据,而不需要向 Nginx 服务器重新发出请求,减少了服务器的使用带宽
然后放入图片,重启服务,然后浏览器登录验证结果。
5.日志切割
编写脚本
vim /log.sh
#!/bin/bash
desc:this is cut logs
day=date -d "-1 day" "+%F"
//显示前一天的时间
logs_path=“/var/log/nginx”
pid=cat /usr/local/nginx/logs/nginx.pid
[ -d $logs_path ] || mkdir -p $logs_path //创建日志文件目录
mv /usr/local/nginx/logs/access.log KaTeX parse error: Expected '}', got 'EOF' at end of input: …om.access.log-{d} //移动并重命名日志文件
重建日志文件
kill -USR1 $pid_path
删除30天前的日志文件 (需要先产生日志)
find $logs_path -mtime +30 -exec rm -rf {} ;
#find $logs_path -mtime +30 |xargs rm -rf
执行脚本并验证
chmod +x log.sh
./log.sh
cd /var/log/nginx
ls
加入计划任务
crontab -e
0 0 * * * /root/log.sh //每天的24点执行
扩展
在linux操作系统中,每个文件都有很多的时间参数,其中有三个比较主要,分别是ctime,atime,mtime
ctime(status time): 当修改文件的权限或者属性的时候,就会更新这个时间,ctime并不是create time,更像是change time, 只有当更新文件的属性或者权限的时候才会更新这个时间,但是更改内容的话是不会更新这个时间
atime(accesstime): 当使用这个文件的时候就会更新这个时间
mtime(modification time): 当修改文件的内容数据的时候,就会更新这个时间,而更改权限或者属性,mtime不会改变,这就是和ctime的区别
6.连接超时
HTTP有一个KeepAlive模式,它告诉web服务器在处理完一个请求后保持这个TCP连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接
KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能
vim /usr/local/nginx/conf/nginx.conf
http {
…
keepalive_timeout 65 180;
client_header_timeout 80;
client_body_timeout 80;
…
}
keepalive_timeout
第一个参数指定KeepAlive的超时时间(timeout)。指定每个TCP连接最多可以保持多长时间,服务器将会在这个时间后关闭连接。 Nginx的默认值是65秒,有些浏览器最多只保持 60 秒,所以可以设定为 60 秒。若将它设置为0,就禁止了keepalive 连接。
第二个参数(可选的)指定了在响应头Keep-Alive:timeout=time中的time值。这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep-Alive 响应头
client_header_timeout
客户端向服务端发送一个完整的 request header 的超时时间。如果客户端在指定时间内没有发送一个完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)
client_body_timeout
指定客户端与服务端建立连接后发送 request body 的超时时间。如果客户端在指定时间内没有发送任何内容,Nginx 返回 HTTP 408(Request Timed Out)
7.更改进程数
cat /proc/cpuinfo | grep -c “physical id” //查看cpu核数
ps aux | grep nginx //查看nginx主进程中包含几个子进程
vim /usr/local/nginx/conf/nginx.conf
worker_processes 2; //修改为处理器相同 或者处理器的2倍,如果开启了超线程(1个处理器有2个内核数量)
worker_cpu_affinity 01 10; #设置每个进程由不同cpu处理,进程数配2 4 6 8分别为0001 0010 0100 1000
systemctl restart nginx
8.配置网页压缩
修改配置文件增加字段
vim /usr/local/nginx/conf/nginx.conf
http {
…
gzip on; #取消注释,开启gzip压缩功能
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 64k; #压缩缓冲区,大小为4个64k缓冲区
gzip_http_version 1.1; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 6; #压缩比率
gzip_vary on; #支持前端缓存服务器存储压缩页面
gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json text/html; #压缩类型,表示哪些网页文档启用压缩功能
…
}
nginx -t
systemctl restart nginx
准备网页文档
cd /usr/local/nginx/html
先将pt.jpg文件传到/usr/local/nginx/html目录下
vim index.html
这是我的图片
验证
在Linux系统中,打开火狐浏览器,右击点查看元素
选择 网络 ---> 选择 HTML、WS、其他
访问 http://192.168.71.20 ,双击200响应消息查看响应头中包含 Content-Encoding: gzip
9.配置防盗链
配置文件
vim /usr/local/nginx/conf/nginx.conf
http {
…
server {
…
location ~*.(jpg|gif|swf)$ { //不能包含|png 会与error.png发生反复请求
valid_referers *.kgc.com kgc.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.kgc.com/error.png;
return 403;
}
}
…
}
}
~* .(jpg|gif|jepg|bmp|ico)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
valid_referers :设置信任的网站,可以正常使用图片; 后面的网址或者域名 :referer 中包含相关字符串的网址;
if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为1,则执行后面的操作,即进行重写或返回 403 页面
配置盗链机
进入index.html配置(访问)内容
扩展
location ~* .(jpg|gif|swf)$ {
valid_referers none blocked *.kgc.com kgc.com;
if ( $invalid_referer ) {
rewrite ^/ http://www.kgc.com/error.png;
return 403;
}
}
none:允许没有http_refer的请求访问资源(根据Referer的定义,它的作用是指示一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资
源的URL地址,那么这种请求是不会包含 Referer字段的),如 http://www.kgc.com/game.jpg
我们使用 http://www.kgc.com访问显示的图片,可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com这个链接过来的。
~* .(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
blocked:允许不是http://开头的,不带协议的请求访问资源;
valid_referers :设置信任的网站,可以正常使用图片;
*.kgc.com:只允许来自指定域名的请求访问资源,如 http://www.kgc.com
if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,即进行重写或返回 403 页面。
10.fpm参数优化
vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid //取消注释
user = nginx
group = nginx
vim /usr/local/php/etc/php-fpm.d/www.conf
–96行–
pm = dynamic //fpm进程启动方式,动态的
–107行–
pm.max_children=20 //fpm进程启动的最大进程数
–112行–
pm.start_servers = 5 //动态方式下启动时默认开启的进程数,在最小和最大之间
–117行–
pm.min_spare_servers = 2 //动态方式下最小空闲进程数
–122行–
pm.max_spare_servers = 8 //动态方式下最大空闲进程数
kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
//服务正在运行的使用平滑升级 如果没有启动服务直接重启php-fpm
netstat -anpt | grep 9000
一个请求是从哪里链接过来的,如果直接在浏览器的地址栏中输入一个资
源的URL地址,那么这种请求是不会包含 Referer字段的),如 http://www.kgc.com/game.jpg
我们使用 http://www.kgc.com访问显示的图片,可以理解成 http://www.kgc.com/game.jpg 这个请求是从 http://www.kgc.com这个链接过来的。
~* .(jpg|gif|swf)$ :这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件;
blocked:允许不是http://开头的,不带协议的请求访问资源;
valid_referers :设置信任的网站,可以正常使用图片;
*.kgc.com:只允许来自指定域名的请求访问资源,如 http://www.kgc.com
if语句:如果链接的来源域名不在valid_referers所列出的列表中,$invalid_referer为true,则执行后面的操作,即进行重写或返回 403 页面。
10.fpm参数优化
vim /usr/local/php/etc/php-fpm.conf
pid = run/php-fpm.pid //取消注释
user = nginx
group = nginx
vim /usr/local/php/etc/php-fpm.d/www.conf
–96行–
pm = dynamic //fpm进程启动方式,动态的
–107行–
pm.max_children=20 //fpm进程启动的最大进程数
–112行–
pm.start_servers = 5 //动态方式下启动时默认开启的进程数,在最小和最大之间
–117行–
pm.min_spare_servers = 2 //动态方式下最小空闲进程数
–122行–
pm.max_spare_servers = 8 //动态方式下最大空闲进程数
kill -USR2 cat /usr/local/php/var/run/php-fpm.pid
//服务正在运行的使用平滑升级 如果没有启动服务直接重启php-fpm
netstat -anpt | grep 9000