• 1.nginx学习


    我们平时访问的网络网站就是WEB网络服务,允许用户通过浏览器访问互联网中的各种资源服务

    WEB服务器会通过HTTP或者HTTPS的方式将请求内容传递给客户端

     

     

    目前常见的WEB服务有IIS, Nginx和Apache等

    WEB服务器和WEB框架的区别

    WEB服务器:接收HTTP请求并返回数据
    WEB框架:开发WEB应用程序,处理接收到的HTTP请求

    Nginx特点:

    • 开源免费

    • 高性能,高并发

      • 支持几万并发连接

      • 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到200M

    • 安装灵活,使用方便

    • 功能丰富

      • 反向代理

      • 负载均衡

      • 缓存服务

      • 访问日志

    1.安装

    nginx   官方nginx
    tenginx  淘宝nginx
    
    这2个一模一样,我这里采用后者,并且采用源代码安装
    • 下载源代码
      wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz

       

    • 解压缩
      tar -zxvf tengine-2.3.2.tar.gz
    • 指定安装目录,检查编译环境
      先更新本地依赖页
      sudo apt-get update
      sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev libxslt1-dev libxml2-dev libgeoip-dev libperl-dev libtool
      sudo apt-get install openssl
      ./configure --prefix=/opt/tng232
    • make进行编译
      sudo make
    • 生成可执行文件
      sudo make install
    • 配置环境变量
      sudo vim /etc/profile
      
      PATH="/opt/python390/bin/:/opt/tng232/sbin:/home/parallels/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
      
      source /etc/profile

       

    2.常用命令

    • 第一次启动

      nginx -c /../nginx.conf  # 指定启动的配置文件,不指定nginx会自动加载默认路径的配置文件

       

    • 平滑启动

      sudo nginx -s reload -c /opt/tng232/conf/nginx.conf # 平滑启动,重新读取nginx配置文件,不重启nginx进程

       

    • 停止进程

      nginx -s stop  -c /opt/tng232/conf/nginx.conf # 停止nginx进程

       

    • 检查Nginx配置文件语法

      nginx -t -c /opt/tng232/conf/nginx.conf

       

    启动后可以访问

    http://10.211.55.5:80

     

     

     

     

    3.学习配置文件

    配置文件在nginx安装的conf目录

     

     

     

    复制代码
    nginx的配置文件是C语言风格的, 以 ;结束每一行的配置
    配置文件是以代码块的形式编写的
    主要有以下几个模块
    
    http{}      # 里面定义了多个代码块,是nginx的核心配置点
    server{}    # 虚拟主机代码块,定义了监听端口等
    location{}  # 域名匹配代码块
    复制代码
    复制代码
    #user  nobody;
    # 定义nginx的工作进程数 以CPU核数为准
    worker_processes  5;
    # 以下是日志功能
    error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    #error_log  "pipe:rollback logs/error_log interval=1d baknum=7 maxsize=2G";
    
    # 将pid写入文件中
    pid        logs/nginx.pid;
    
    
    events {
        # 每个worker进程支持的最大连接数
        worker_connections  1024; 
    }
    
    # 配置文件的核心区域
    http {
        include       mime.types;
        default_type  application/octet-stream;
        # 打开nginx的访问日志功能
        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  logs/access.log  main;
        #access_log  "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G"  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
            
        # 打开此功能,能够极大的提升网站访问,以及静态资源压缩
        gzip  on;
            
        # 虚拟主机的核心配置
        server1 {
            listen       80;
            server_name  localhost;
                    
            # nginx编码支持
            charset utf-8
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
            #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
                    
            # nginx的域名匹配,所有的请求,都会进入到这里
            location / {
                # 定义该虚拟主机资料存放路径,可以自由修改
                root   html;
                # 定义nginx首页文件名字,需要在root指定的目录下
                 index  index.html index.htm;
            }
    
            #error_page  404        /404.html;
    
            # redirect server error pages to the static page /50x.html
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
        # 可以定义第二个虚拟主机的配置
        server2 {
            listen       90;
            server_name  localhost;
                    
            # nginx编码支持
            charset utf-8
                    
            # nginx的域名匹配,所有的请求,都会进入到这里
            location / {
                # 定义该虚拟主机资料存放路径,可以自由修改
                root   html;
                # 定义nginx首页文件名字,需要在root指定的目录下
                 index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
      }
    复制代码

     

    4.nginx多站点功能

    nginx的web站点也称为nginx的虚拟主机站点,通过文件目录的不同,定义多个不同的网站

    多虚拟主机的实现方式

    • 基于域名的多虚拟主机

      修改hosts文件,强制写入域名对应关系,比较麻烦
    • 基于端口的虚拟主机

      修改nginx.conf的端口配置,定义两个server与区块,如下
      复制代码
       # 目前这里是第一个server {} 区域块,端口是85
          server {
              # 定义该网站的端口
              listen       85;
              server_name  localhost;
              charset utf-8;
              location / {
                  root   /python/;
                  index  index.html index.htm;
              }
          }
          
          # 目前这里是第二个server {} 区域块,端口是85
          server {
              # 定义该网站的端口
              listen      89;
              server_name  localhost;
              charset utf-8;
              location / {
                  root   /linux/;
                  index  index.html index.htm;
              }
          }
      复制代码

       

    • 基于IP的虚拟主机
      通过不同的IP区分不同的虚拟主机,此类比较少见,一般业务需要多IP的常见都会在负载均衡中绑定

    5.nginx日志

    日志作用

    nginx的方可日志,能够记录,分析用户的请求行为
    -什么时间点,访问的最频繁,比如某网站,网站的流量,基本都在晚上,学生下了班,在线学习各种技术
    -记录用户的请求频率,以此检测是否是爬虫等恶意请求,进行封禁。

    操作

    复制代码
    改nginx.conf  在 http{}代码块中,打开如下注释即可
    
        #打开此nginx的访问日志功能,即可查看日志
        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  logs/access.log  main;
        
        
    日志变量解释
      $remote_addr    记录客户端ip
      $remote_user    远程用户,没有就是 “-”
      $time_local    对应[14/Aug/2018:18:46:52 +0800]
      $request     对应请求信息"GET /favicon.ico HTTP/1.1"
      $status      状态码
      $body_bytes_sent  571字节 请求体的大小
      $http_referer  对应“-”  由于是直接输入浏览器就是 -
      $http_user_agent  客户端身份信息,以此可以nginx判断,用户客户端是手机浏览器,就转发移动端页面给与用户
      如果是pc的客户端,就转发给pc页面给与用查看
    复制代码

     

    6.反向代理

     

     

     

     

     

    正向代理,代理的是客户端

    反向代理,代理的是服务端

    nginx反向代理的操作:

     

    第一个server{}标签,用于反向代理的作用,修改nginx.conf如下

    复制代码
        #   第一个虚拟主机的配置,作用是反向代理了
        server {
            listen       80;
            server_name  localhost;
            charset utf-8;
            error_page  404  /40x.html;
            # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
            location / {
            proxy_pass  http://192.168.178.140:90;
            }
    
        }
    复制代码

    第二个server{}标签,作用是返回机器上的资料,也就是一个web站点的功能

    复制代码
    #第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
    server  {
    listen 90;
    server_name  _;
    location  / {
            root   /s25proxy/;
            index  index.html;
    }
    }
    复制代码

     

    7.负载均衡

    负载均衡就是将请求均衡的分给不通的web服务端

     

     

     

    负载均衡的搭建

    第一个虚拟主机server{}的作用,是反向代理,80端口

    复制代码
        # 用upstream关键词定义负载均衡池,写入资源服务器的地址
        # 负载均衡的算法,默认是轮询机制,一台服务器处理一次
        upstream  s25real_server  {
                server   192.168.178.140:90;
                server  192.168.178.140:95;
            }
        server {
            listen       80;
            server_name  localhost;
            charset utf-8;
            error_page  404  /40x.html;
            location / {
             proxy_pass  http://s25real_server;
            }
    
        }
    复制代码

    第二个server{}标签的配置,作用是提供资源给用户看的,90端口

    复制代码
    #第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
        server  {
        listen 90;
        server_name  _;
        location  / {
                root   /s25lol/;
                index  index.html;
            }
        }
    复制代码

    第三个server{}标签的作用,同样是返回资源页面,查看负载均衡效果的,95端口

    复制代码
    #第三个server{}虚拟主机,作用是 提供资源服务器的内容的
      server {
        listen 95;
        server_name _;
        location   /   {
          root  /s25dnf/;
          index  index.html;
    
          }
      }
    复制代码

     

     

    nginx负载均衡算法

    - 轮询机制:默认的,每台服务器各一次

    - 加权轮训机制

        upstream  s25real_server  {
    server   192.168.178.140:90 weight=4;
    server  192.168.178.140:95 weight=1;
    }

     

    8.搭建文件服务器

    http服务器

    复制代码
    server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
            #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
    
            location / {
                root   /opt/tng232/download;    # 指定哪个目录作为Http文件服务器的根目录
                autoindex on; # 索引,开启目录文件列表
                autoindex_exact_size on; # 显示文件大小
                autoindex_localtime on; # 显示文件时间
            }
         }
    复制代码

     https服务器

    复制代码
    server {
            listen       80;
            server_name  server_name ***.com; #填写对应的域名;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
            #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
          ssl on; 
          ssl_certificate ****.pem; #Nginx证书文件pem,注意位置不能有错
    ssl_certificate_key ****.key; #Nginx证书文件key,注意位置不能有错 location
    / { root /opt/tng232/download; autoindex on; # 索引,开启目录文件列表 autoindex_exact_size on; # 显示文件大小 autoindex_localtime on; # 显示文件时间 } }
    复制代码

     

  • 相关阅读:
    串流直播流媒体视频发布平台功能模块和产品技术参数
    线程创建方式
    Go:Bitwise按位算法(附完整源码)
    matlab图像仿射变换
    nodejs事件循环机制
    JS THREE.js间隔执行函数
    解决jsonp跨域中的安全漏洞(包含meta解释)
    MacOS Anaconda 安装教程及虚拟环境创建
    记录--Three.js的简单使用,Three.js在vue3.x中导入.pcd三维模型文件
    centos 搭建 zookeeper 高可用集群
  • 原文地址:https://www.cnblogs.com/victor1234/p/16880867.html