目录
nginx概念
nginx——web服务器
http就是apache,在国内很少
nginx是开源的,是一款高性能,轻量级的web服务软件,稳定性高,而且版本迭代比较快,即修复bug速度比较快,安全性好,消耗资源很低。http的请求并发连接,单台服务器可以支持3万-5万的并发请求(系统资源全部分配给nginx),单个节点的nginx一般支持2万个并发。
nginx的功能介绍
1.静态文件服务:静态页面,可以直接提供静态文件服务(html ,css,jsp)处理静态页面的响应速度很快,效率很好
2.代理:正向代理、反向代理。可以实现负载均衡,高可用和故障转移
3.动态内容处理,nginx并不能直接处理动态请求,可以通过中间件(php/tomcat)把动态请求转发给后端服务器
4.支持加密https
5.可以实现重定向
6.虚拟主机,一个nginx可以配置多个域名和站点
7.nginx自带缓存
8.性能可拓展,处理能力可以随时调整
nginx的应用场景:
1.静态页面
2.转发动态请求
3.反向代理,负载均衡
4.缓存服务
nginx的安装模块:--with-http_ssl_module \ 支持https的加密功能ss/tls
--with-http_v2_module \ 支持http2.0协议
--with-http_realip_module \ 支持nginx获取客户端的真是ip地址
--with-http_stub_status_module \ 支持nginx获取访问状态信息的功能
--with-http_gzip_static_module \ 支持页面压缩功能
--with-pcre \ 支持prce库
--with-stream \ 支持4层代理的模块
--with-stream_ssl_module \ 支持对tcp连接的加密
--with-stream_realip_module 支持从代理协议中获取客户端的真是IP地址
nginx的文件
conf:配置文件目录 nginx.conf主配置文件
html:工作目录 50x.html 默认的访问错误打开的页面 index.html 默认的访问主页
logs:日志目录 访问日志,报错日志
sbin:nginx的二进制启动脚本
nginx的常用命令
nginx -t 检测配置文件的语法是否正确
nginx -v 显示nginx的版本
nginx -V 显示版本和配置
nginx -s 信号 stop 关闭nginx
reload 重新加载nginx(如果更改了nginx配置文件,nginx -s reload 无需重启服)
nginx.conf(主配置文件)
在/usr/local/nginx/conf/nginx.conf里面
日志查看 tail -f /usr/local/nginx/logs/error.log
1.全局模块
#user nobody;
默认的程序用户是nginx,这里可以保持注释无需修改
worker_processes 1 ;
工作进程数,一般设置成服务器内核数的2倍(一般不超过8个,超过8个反而会降低性能)
pid /usr/local/nginx/run/nginx.pid;
pid文件的位置
events {
worker_connections 1024;
}
events模块,决定了nginx能够处理的连接数,连接数和worker_processes的数值相乘
Linux默认打开的文件数就是1024个
处理进程的过程必然涉及配置文件和展示页面,也就是涉及打开文件的数量
cd /usr/local/nginx/conf/
vim /etc/security/limits.conf (Linux系统打开文件的最大数配置文件)
进入系统第一件是就是修改打开文件的最大数
2.http模块
http {
http模块的作用:转发和处理http请求,设置代理(正向代理,反向代理),缓存,定义日志格式,重定向配置
include mime.types;
文件拓展名与文件类型的映射表。就是nginx能够打开的文件和支持的文件类型
default_type application/octet-stream;
默认支持的文件类型(.html/.htm/.jsp/.js/.php)
#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,也就是访问日志的格式,报错error.log也是一样的格式
#access_log logs/access.log main; 默认访问日志的存放路径
sendfile on; 支持文件发送或者下载
#tcp_nopush on; 默认就是异步非阻塞模式功能
keepalive_timeout 65; 连接保持的时间,单位是秒
#gzip on; gzip模块,谁知是否开启页面压缩功能(没啥用)
server { 开始web服务的模块
listen 80; nginx的默认监听端口
server_name localhost; 配置站点的域名
#charset koi8-r; 网页的默认字符集 / charset utf-8; 显示中文
location / {网页匹配的工作目录的地址和支持的打开页面的文件类型
root html; root这里是家目录 是nginx工作目录的家目录 html就是/usr/local/nginx/html
面试题:root和alias之间匹配工作目录的区别-
root的匹配模式 是 拼接
root的工作目录,访问的url 是xy102
location /xy102 {
root /opt/test1/;
匹配的是/opt/test1/xy102/这个目录下的文件
echo "内容" > index.html 输入展示内容
alias匹配nginx的工作目录,路径是绝对路径
location /xy102 {
alias /opt/test1/xy102/;
alias 只能写在http模块当中server模块的location模块里面
root 可以写在server模块,也可以写在http,也可以写在location中
alias匹配工作目录,不能够使用重定向功能
nginx模块
1.全局模块
work_processes 1 指定进程数
events模块决定了能够处理的连接数
stream 四层代理模块
2.http模块 转发和处理http请求,设置代理(正向代理,反向代理),缓存,定义日志格式,重定向配置
在http模块当中,包含server模块,在http模块里面可以有多个server模块
在server模块当中包含location模块,在server模块当中可以有多个location模块
实验
1.统计访问状态
添加一个
location /status {
stub_status on;(打开状态统计的功能)
access_log off;(关闭status的访问日志)
}
页面展示的结果:
Active connections 当前活动的连接数
server accepts handled requests 表示已经处理的连接数
三个数字 从左往右 表示:已经处理的连接数、成功的建立连接的次数、已经处理的请求数
Reading:0 Writing:1 Waiting:0
reading 表示服务器正在从客户端读取请求的数据
writing 表示服务端正在把响应数据发送给客户端
waiting 表示有连接处于空闲状态,等待新的请求
2.基于密码的授权进行访问控制
要先安装yum -y install httpd-tools (httpasswd的工具)
htpasswd -c /usr/local/nginx/passwd.db gfw
cd /usr/local/nginx
chown nginx passwd.db
chmod 400 passwd.db
cd conf/
vim nginx.conf 在localtion / 下面
3.基于客户端的访问控制 根据ip地址来进行控制
展示结果
4.基于域名的nginx主机
做一个本地映射 vim /etc/hosts
5.基于ip地址的虚拟主机
新建虚拟网卡ifconfig ens33:0 192.168.233.100/24
6.基于端口的虚拟主机
7.多个配置文件
nginx优化
1.隐藏版本号(重要)
在http里面添加server_tokens off;
结果
另一种
cd nginx-1.22.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j 4 && make install
systemctl restart nginx
2.cpu绑定(重要)
worker_cpu_affinity 0001 0010 0100 1000;
表示绑定cpu1、2、3、4
3.日志分割(重要)
apache 是自带日志分割的,按天来进行收集日志;nginx没有自动分割的功能,所以要用脚本来实现日志分割
日志的位置
脚本
脚本代码:
#!/bin/bash
day=$(date -d "-1 day" "+%Y%m%d")
logs_path="/usr/local/nginx/logs/"
pid_path="/usr/local/nginx/run/nginx.pid"
mv /usr/local/nginx/logs/access.log ${logs_path}access-${day}.log
mv /usr/local/nginx/logs/error.log ${logs_path}error-${day}.log
kill -USR1 $(cat ${pid_path})
find ${logs_path} -mtime +30 exec rm -rf {} \;
结果
修改用户和组(了解)
vim /usr/local/nginx/conf/nginx.conf
4.设置页面缓存时间,主要是针对动态页面(图片的缓存)
插入图片
5.连接超时
一般修改为
6.页面压缩
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;
支持压缩的类型
7.TIME_WAIT状态的回收
time_wait是tcp链接当中的一种状态,出现在四次挥手之后。处于等待状态,双方不再发送数据。
time_wait所占用的系统资源很小,数量比较小,完全可以忽略不计,但是太多了就有一定影响。
连接断开(四次挥手)之后,尽快的把time_wait状态的连接进行回收
netstat -n | awk '/^tcp/ {++s[$NF]} END {for (a in s) print a s[a]} 统计当前系统的连接状态
cd /usr/local/nginx/conf
vim /etc/sysctl.conf 文件配置
展示结果sysctl -p
防盗链
配置nginx.conf文件
location ~* \.(jpg|gif|png)$ {
valid_referers none blocked *.xy102.com xy102.com;
if ( $invalid_referer ) {
#rewrite ^/ http://www.xy102.com/error.png;
return 403;
}
}
步骤:
网页准备:
Web源主机(192.168.233.10)配置:
cd /usr/local/nginx/html
将game.jpg、error.png文件传到/usr/local/nginx/html目录下
vim index.html
清空所有内容然后添加
< img src="game.jpg"/>
</body>
</html>
做主地映射
echo "192.168.233.10 www.xy102.com" >> /etc/hosts
echo "192.168.233.20 www.xy103.com" >> /etc/hosts
盗链网站主机(192.168.233.20):
cd /usr/local/nginx/html
vim index.html
清空所有内容然后添加
< img src="http://www.xy102.com/game.jpg"/>
</body>
</html>
做本地映射
echo "192.168.233.10 www.xy102.com" >> /etc/hosts
echo "192.168.233.20 www.xy103.com" >> /etc/hosts
在盗图网站(20)主机上进行浏览器验证
http://www.xy103.com