Nginx的相关知识

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值