Nginx的相关知识
-
nginx的三个主要的应用场景
- 静态资源服务
- 反向代理服务
- api服务
-
nginx是高性能的web服务器
-
nginx的安装
- 切换到自己要安装的目录 创建文件夹
mkdir nginx
cd mkdir
切换到此目录下载地址- 执行
wget http://nginx.org/download/nginx-1.16.0.tar.gz
- 解压
tar -zxvf nginx-1.16.0.tar.gz
- 切换到
nginx-1.16.0
- 安装环境
yum install pcre yum install pcre-devel
- 检测
./configure --prefix=/usr/nginx
- 编译
make && make install
- 查看端口的进程
netstat -antp
如果80端口被占用kill -9
杀掉 - 启动nginx
./sbin/nginx
打开网页如果出现 主机的ip:80 出现 Welcome to nginx! 则表示安装成功 - 停止nginx kill -int 进程号 quit shutdown 迅速关闭进程 graceful shutdown 优雅的关闭进程
- kill -hup 进程号 优雅的重启nginx
kill -usr1
分割日志kill -usr2
平滑的升级- 进程号和 logs/nginx.pid 相同 可以引用 ``kill -hup `cat nginx/logs/nginx.pid```
- 切换到自己要安装的目录 创建文件夹
-
nginx的配置nginx.conf
-
#
工作进程可以自行修改但是太过没用cpu *核数worker_processes 1;
-
#
配置nginx连接的特性 一个work能同时允许多少连接events {worker_connections 1024;}
server { #端口 listen 80; #域名 server_name z.com; location / { #哪个文件下的页面 root z.com; #如果没有输入路径则显示哪个页面 index index.html ; } }
-
vim 永久显示行号 vim /etc/vimrc 写入
set nu
保存退出
-
-
nginx的日志管理
#log_format main '$remote_addr(请求地址ip) - $remote_user [$time_local(请求时间)] "$request(请求方式)" ' # '$status(状态) $body_bytes_sent(发送的字节数) "$http_referer(上一个页面)" ' # '"$http_user_agent(用户代理)" "$http_x_forwarded_for(浏览器)"'; #access_log logs/access.log main; http://baidu.com/robots.txt //百度的蜘蛛 server { #端口 listen 80; #域名 server_name z.com; location / { #哪个文件下的页面 root z.com; #如果没有输入路径则显示哪个页面 index index.html ; } #配置日志 access_log logs/z.com.accesss.log }
- 日志的切分以一分钟为例
-
建立nginx目录下建立data目录
-
创建runlog.sh脚本
LOGPATH=/usr/nginx/logs/z.com.access.log BASEPATH=/usr/nginx/data/ bak=$BASEPATH/`date -d yesterday +%Y%m%d`.zom.access.log mv $LOGPATH $BASEPATH touch $LOGPATH kill -usr1 `cat /usr/nginx/logs/nginx.pid`
-
建立时间脚本 crontab -e
*/1 * * * * sh /usr/nginx/data/runlog.sh
然后保存退出
-
- 日志的切分以一分钟为例
-
location
- location有定位的意思根据uri来进行不同的定位
- location=patt{}精准匹配
- location patt{} 一般匹配
- location ~ patt{} 正则匹配
-
rewrite重写
-
重写可以放在http,server,location下
location = / { #禁止某个ip进行访问 if ($remote_addr = $ip){ return 403; } root html; index index.html index.html }
-
正则
#ie进行访问时进行重写 if ($http_user_agent ~ Trident ){ rewrite ^.*$ /ie.html; break(没有break则会出现循环重定向); }
-
-
nginx的gzip压缩可以提高网站的运行速度
-
首先从http的角度来看:请求头:声明 acceopt-encoding:gzip deflate sdch 浏览器首先声明可以接收gzip的压缩包
-
常用参数:
gzip on | off; 是否开启gzip gzip_buffers 32 4k|16 8k; 缓存 gzip_http_version 1.1; http协议的版本(目前几乎全是1.1) gzip_min_length 20; 开始压缩的最小长度 gzip_types text/html; 对什么类型的文件进行压缩 gzip_vary off; 是否传输gzip标记 gzip_disable;正则匹配UA 什么样的文件不进行压缩 gzip_comp_level 6;压缩级别一般为6 gzip_proxied off;如果请你者是代理服务器该如何压缩
-
注意二进制文件没有必要压缩例如图片/mp3 因为压缩率比较小 而且会损耗cpu的资源
-
-
nginx的缓存设置设置图片缓存到客户端
location = /images/default.gif { expires 30s; }
-
ngxin的反向代理和负载均衡
-
支持两个用法一个是proxy一个是upstream分别用来做反向代理和负载均衡
-
以反向代理为例,nginx不自己处理php的请求而是交给apache来处理。
-
动静分离不是一个严格的说法准确的说是反向代理
location ~ \.php$ { #设置反向代理 proxy_pass http://127.0.0.1:端口; }
-
反向代理有多台服务器自然形成负载均衡
upstream imageserver { #weight 设置权重 fail_timeout 超时时间 max_fails 最大连接次数 server http://localhost:81 weight=1 fail_timeout=5s max_fails=3; server http://localhost:82 weight=1 fail_timeout=5s max_fails=3; } server { location / { proxy_pass http://imageserver; }
-
-
测试nginx的压力
-
·/ab -c 2000 -n 80000 http://192.168.124.220/index.html
-
允许linux一个线程同时打开n个连接 ulimit -n 设置的数字
-
安装统计模块
--with-http_stub_status_module
-
localtion中添加
location /status { stub_status on; access_log off; allow 测试的ip deny all; }
-
-
nginx的优化思路
- 打开socket连接
- 系统层次的
- 不做洪水抵御
echo 0 > /proc/sys/net/ipv4/tcp_syncookies
- 加快tcp连接的回收 recycle
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
- 最大连接数 somaxconn
/proc/sys/net/core/somaxconn 下设置 最大连接数 50000
echo 5000> somaxconn - 空的tcp连接是否允许回收利用
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
- 不做洪水抵御
- nginx
- keepalive_timeout 0; http连接快速关闭
- 每个子进程允许打开的连接(work_connections)nginx.conf设置
worker_connections 10240;
- 系统层次的
- 打开文件并返回
- 系统层面
- ulimit -n 设置一个较大的值
- nginx层面
- 每个子进程允许打开的文件
work_rlimit_nofile 10000
- 每个子进程允许打开的文件
- 系统层面
- 打开socket连接