一、Nginx的优势
二、Nginx部署yum
1、Nginx官网:www.nginx.org 点击之后就能看到安装nginx的官方文档了,如下图所示:
2、安装yum工具包,可以快速更新yum仓库(可不安装) 3、在/etc/yum.repo.d目录下创建nginx.repo文件: 4、将文档中的内容写入: · [nginx-stable]:稳定版 · [nginx-mainline]:主线版
5、默认情况下,使用稳定 nginx 包的存储库。如果您想使用主线 nginx 包,请运行以下命令:
“yum-config-manager --enable nginx-mainline”
执行完此命令之后,我们再来看nginx.repo文件: 可以看到,主线版已经开启 【注意】:如果在之前没有安装yum-utils,那么“yum-config-manager --enable nginx-mainline”是执行不了的。其实说白了,直接把enable=0改成1就行了! 因为我们要安装nginx1.18版本,所以我们还是使用稳定版,把主线版关掉,因为主线版安装的是1.19的版本。 6、刷新yum仓库:
[root@localhost yum.repos.d]#yum makecache
7、安装nginx:
[ root@localhost ~]# yum -y install nginx
8、关闭防火墙和selinux,并禁止开机自启; 9、开启nginx:
[root@localhost ~]# systemctl start nginx
三、Nginx的配置文件
1、/etc/logrotate.d/nginx : 日志轮转 2、/etc/nginx/nginx.conf : 总配置文件 3、/etc/nginx/conf.d : 子配置文件夹 4、/etc/nginx/conf.d/default.conf:默认的网站配置文件 5、/etc/nginx/fastcgi_params :动态网站模块文件-python,php所需的相关变量 6、/etc/nginx/scgi_params 7、/etc/nginx/uwsgi_params 8、/etc/nginx/koi-utf: 字符集,文件编码 9、/etc/nginxlwin-utf 10、/etc/nginx/koi-win 11、/etc/nginx/mime.types : 文件关联程序、网站文件类型和相关处理程序 12、/etc/nginx/modules: 模块文件夹。第三方模块 13、/etc/sysconfig/nginx (1)#Configuration file for the nginx service. (2)NGINX=/usr/sbin/nginx (3)CONFFILE=/etc/nginx/nginx.conf (4)Configuration file for the nginx-debug service. 14、/etc/sysconfig/nginx-debug (1)# Configuration file for the nginx-debug (2)service.NGINX=/usrlsbin/nginx-debug (3)CONFFILE=/etc/nginx/nginx.conf (4)LOCKFILE=/var/lock/subsys/nginx-debug 15、/usr/lib/systemd/system/nginx-debug.service :nginx调试程序启动脚本 16、/usr/liblsystemd/system/nginx.service systenctl : 服务脚本 17、/usrlsbin/nginx : 主程序 18、/usr/sbin/nginx-debug : nginx调试程序 19、/usr/shareldoc/nginx-1.12.1: 文档 20、/var/cache/nginx : 各种缓存 21、/var/log/nginx: 日志文件夹 (1)access.log (2)error.log 22、/usr/lib64/nginx: Nginx模块目录
四、Nginx编译参数
- 以下的所有参数配置都可以通过命令“nginx -V”来查看是否具备
1、基本配置:
**configure arguments: 配置参数./configure --help查询帮助
--prefix=/etc/nginx:安装路径
--sbin-path=/usr/sbin/nginx:程序文件
--modules-path=/usr/lib64/nginx/modules:模块路径
--conf-path=/etc/nginx/nginx.conf:主配置文件
--error-log-path=/var/log/nginx/error.log:错误日志
--http-log-path=/var/log/nginxlaccess.log:访间日志
--pid-path=/var/run/nginx.pid:程序ID
--lock-path=/var/run/nginx.lock:锁路径,防止重复启动nginx
--http-dient-body-temp-path=/var/cache/nginx/cient_temp: 缓存
--http-proxy-temp-path=/var/cache/nginx/proxy_temp:代理缓存
--http-fastcgi-temp-path=/var/cache/ nginx/fastcgi_temp:php缓存
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp:python缓存
--http-scgi-temp-path=/var/cache/nginx/scgi_temp
--with-compat
--user=nginx
2、模块类:
**--group=nginx
--with-file-aio
--with-threads
--with-http_addition_module
--with-http_auth_request_module
--with-http_dav_module
--with-http_flv_module
--with-http_gunzip_module
--with-http gzip_static_module
--with-http_mp4_module
--with-http_random_index_module
--with-http_realip_module
--with-http_secure_link_module
--with-http_slice_module**
**--with-http_ssl_module:安全模块
--with-http_stub_status_module:访问状态--with-http_sub_module:nginx替换网站响应内容--with-http_v2_module
--with-mail
--with-mali_ssl_module
--with-stream
--with-stream_realip_module
--with-stream_ssl_module
--with-stream_ssl_preread_module
--with-cc-opt='-O2-g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --
param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune-generic-fPIC’
--with-ld-opt=’-Wl,-z,relro -Wl,-z,now -pie'**
五、Nginx的基本配置
·观察主配置文件:vim /etc/nginx/nginx.conf
1、分类 (1) CoreModule核心模块 (进程数等) (2) EventsModule事件驱动模块 (工作模式等) (3) HttpCoreModule http内核模块(文档程序类型,配置文件等) 2、模块功能: (1)全局/核心块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成workerprocess数等。 (2)events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。 (3)http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。 (4)server块:配置虚拟主机的相关参数,一个http中可以有多个server。 (5)location块:配置请求的路由,以及各种页面的处理情况。 · 1: 全局块 · 2: events块 · 3: http块 至于server块和localhost块,在nginx的子配置文件“/etc/nginx/conf.d/default.conf”中,如果是老一点的版本,server块会嵌套在http块中
·观察默认主机配置文件(子配置文件):
vim /etc/nginx/conf.d/default.conf
目前我们只需要了解server块和localhost块
六、Nginx的日志Log
1、日志部署 (1)日志模块名称:ngx_http_log_module (2)相关指令: log_format access_log error_log open_log_flie_cache (3)日志的格式:
在http模块当中:
vim /etc/nginx/nginx.conf
图中红框部分:
·各个字段解释如下: $remote_addr:远程地址:记录客户端IP地址 $
r
e
m
o
t
e
u
s
e
r
:
remote_user:
remoteu?ser:远程用户,记录客户端用户名称 [$time_local]:本地时间:服务器自身时间 $request:请求:记录请求的URL和HTTP协议 $status:状态:记录请求状态 $body_bytes_sent:发送给客户端的字节数,不包括响应头的大小 $http_referer:记录从哪个页面链接访问过来的(超链接) $http_user_agent:记录客户端浏览器相关信息 $http_x_forwarded_for:代理IP
(4)访问日志和错误日志 ·Access_log ·Error_log
设置一个个性化404: 1)首先我们来自己创建一个主机配置文件:xiaotao.conf(注意后缀一定是“.conf”,否则主配置文件读不到)
2)在根下创建xiaotao目录
[root@localhost ~]#mkdir /xioatao
3)随便写个东西进去:
[root@localhost ~]# echo 1 >xiaotao/index.html
4)重启服务:
[ root@localhost ~]# systemctl restart nginx
5)修改主机配置文件: /etc/nginx/conf/xiaotao.conf
在server{}里面定义:
6)在/xiaotao目录下创建404.html
再搞张名为404.jpg的图片进去:
7)重启服务:systemctl restart nginx
8)随便访问一个不存在的页面即可: (404.jpg这张图片舅不展示了…)
(5)日志缓存 1)简介:大量访问到来时,对于每一条日志记录,都将是先打开文件,再写入日志,然后关闭.占用了系统的IO,与业务无关。可以使用open_log _file _cache来设 2)语法: open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m; 3)解释:max 1000指的是日志文件的FD,最大的缓存数量为1000。 如果超了怎么办,看下面: min_users=3 20秒内小于3次访问的FD,就给你清掉, 结合inactive 20s的时间, valid=1m 检查周期为1分钟。 总结: 缓存最多1000个,到了极限,每分钟开始清除掉20秒内小于3次的文件FD。
但是此功能默认是禁用状态,在生产环境下不建议开启,因为会占用内存资源
2、日志轮转/切割 · nginx安装会默认开启日志轮转,我们来查看一下: 上图第一个文件就是日志轮转文件;第二个是日志文件
[ root@localhost ~]# vim /etc/logrotate.d/nginx
· create 0644 nginx nginx · daily:天 · rotate 10:10份 · missingok:丢失不提示 · notifempty:空文件的话,不转储 · compress:压缩
3、日志分析 (1)统计2020年9月5日一天内访问最多的10个IP (iptop10)
grep '05/Sep/2020' cd.mobiletrain.org.log | awk '{ ips[$1]++}END{for(i in ips){print i,ips[i} }' | sort -k2 -rn | head -n10
(2)统计2020年9月5日访问大于100次的IP
grep '05/Sep/2020 cd.mobiletrain.org.log | awk '{ ips[$1]++ } END{for(i in ips) {if(ips[i]>100) {print i,ips[i]}}}' | sort -k2 -rn | head -n10
(3)统计2020年9月5日访问最多的10个页面( $request top 10)
grep '05/Sep/2020' cd.mobiletrain.org.log | awk '{urls[$7]++} END{for(i in urls){print urls[i],i}}' | sort -k1 -rn | head -n10
(4)统计2020年9月5日每个URL访问内容总大小($body_bytes_sent)
grep '05/Sep/2020' sz.mobiletrain.org.log | awk '{ urls[$7]++; size[$7]+=$10}
END{for(i in urls){print urls[i],size[i],i }}' |sort -k1 -rn | head -n10
(5)统计2020年9月5日每个IP访问状态码为404及出现次数($status)
grep '05/Sep/2020'sz.mobiletrain.org.log | awk '{if($9="404"){ip_code[$1""$9]++}}END{for(i in ip_code){print i,ip_code[i]}}'
七、Nginx web模块
1、连接模块:stub_status_module ·配置状态模块 (1)修改nginx的配置文件,在server{ }中添加: (2)重启服务
[root@wwwconf]#systemctl restart nginx
2、随机模块 (1)微更新: 模块:random_index_module ·目的:将主页设置成随机页面,是一种微调更新机制 (2)操作步骤: 1)先在目录/app下创建几个文件:
[root@www app]# touch ired.html, green.html ,.yellow.html}
(注意:.yellow是隐藏文件) 2)修改配置文件,在server{}中location{}中添加 ·这样它就能够读取到/app目录下的文件了,当然这些文件是要写内容的,交给开发的小伙伴吧! 3、替换模块 如果我们用模板生成网站的时候,因为疏漏或者别的原因造成代码不如意,但是此时因为文件数量巨大,不方便全部重新生成,那么这个时候我们就可以用此模块来暂时实现纠错。另一方面,我们也可以利用这个实现服务器端文字过滤的效果。 (1)启动替换:在nginx的配置文件server{}中添加以下字段: ·sub_filter nginx ‘haha’:将“nginx”替换成“haha”; ·sub_filter_once off;关闭只替换一次; 4、文档读取 (1)模块:ngx_http_core_module ·sendfile ·tcp_nopush ·tcp_nodelay 5、文件压缩 (1)原理介绍:启动该模块,使文件传输前进行压缩,提升传输效率。 (2)模块:ngx_http_gzip_module 操作步骤: 1)在nginx的配置文件的http{}中添加: ·gzip on : 开启压缩 ·gzip _http_version 1.1; 使用1.1版本来压 ·gzip_comp_level 9 : 压缩的级别,最高9级,直接拉满 ·gzip types : 压缩对象 ·gzip _static on : 开启静态压缩 2)重启服务:
stemctl restart nginx
6、页面缓存 (1)模块:ngx_http_headers_module ·“expires”起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中(所有的服务器)或者server段中(本服务器)或者location段中(本页面)加入。Nginx(expires缓存减轻服务端压力), (2)原理:无缓存,每次访问服务器,均是全文传输。开启缓存可以加速浏览网站。 (3)启用缓存 1)默认是开启浏览器缓存,浏览页面 第一次返回状态码200,页面对象全文传输。 第二次返回状态304,页面对象部分传输。 2)配置:vim /etc/nginx/conf.d/default.conf 在server{}的location{}中添加: 3)重启服务:
stemctl restart nginx
(4)理解nginx服务器缓存: ·开启服务器缓存模块,再次浏览页面,观察响应头中出现服务器回复的缓存时间理解nginx服务器启动缓存时间,加速浏览。 ·缺点是时效性降低。
7、防盗链 (1)模块:ngx_http_referer_module (2)启用防盗链功能: 1)进入配置文件,在server{}中的location{}中添加: ·valid_referers none:禁止引用 这里不允许引用/xiaotao目录下的所有文件,如果引用,给他一个403报错 2)重启服务:
stemctl restart nginx
3)设置可以引用的白名单: server_name : 让Google、百度、192.168.100整个网段、和自己(a.com)引用,如此一来,盗链就是合规的
八、Nginx访问限制
1、模块:ngx_http_limit_req_module 目的:控制请求频率限制。 2、我们通过压力测试工具来对服务器进行压测: (1)使用服务器本机来安装压测工具:httpd-tools(如果是Apache的话会自动安装),这其中包含一款网站压测工具:ab
[root@www~]#yum -y install httpd-tools
(2)进行压力测试:
[root@www~]# ab -n 100 -c 10 http :
发送100次分10次 ·server software:所使用的服务器 ·server hostname:主机名 ·server port:端口 ·document path:申请的内容 ·document:申请的文档大小 ·concurrency level: ·time taken for tests:测试的时间 ·complete request:完成的请求次数 ·failed:失败次数 ·write error: ·total transferrd:总共传输的字节大小 ·html transferrd:html包大小 ·requests per second:服务器1秒钟能够处理的次数 ·time per request:平均消耗掉一个请求所需的时间
3、启动限制 (1)进入主配置文件: vim /etc/nginx/nginx.conf (2)在http{}中添加: ·limit_req_zone:定义限制规则; ·$binary_remote_addr:远程的二进制地址作为参照物; ·zone=req_zone::限制策略的名称 ; ·:10m:占用10M空间; ·rate=1r/s:允许每秒1次请求; (3)修改主机配置文件,引用限制的名称(zone=req_zone)
/etc/nginx/conf.d/xiaotao.conf
(4)重启服务:
stemctl restart nginx
(5)再进行压力测试:
[root@www ~]# ab -n 100 -c 10 http:
九、Nginx访问控制
1、基于主机(俗称“封他IP”) (1)模块:ngx_http_access_module (2)语法: allow #允许某些主机 deny #拒绝某些主机
在server{}中添加:只允许192.168.100.18这个主机访问 重启服务:
stemctl restart nginx
2、基于用户(username&password) (1)模块:ngx_http_auth_basic_module (2)启用控制: 1)安装httpd-tools:
[root@www~]#yum -y install httpd-tools
2)建立认证文件,用户名为user10: 注意:如果有这个文件就不要用“-c”了,直接“-m”就完事了 3)设置密码: 4)启动认证:在server{}中添加 ·auth_basic:认证的基本信息 ·auth_basic_user_file:基础认证的用户文件位置 5)重启服务:
stemctl restart nginx
6)真机访问:
|