Nginx入门学习

作者: 原来不语 | 来源:发表于2018-04-05 23:23 被阅读0次

    nginx的优点:

    nginx是一款自由、开源的、高性能HTTP服务器和反向代理服务器;是一个IMAP、POP3、SMTP代理服务器;
    比apache占用更少的内存及资源。抗并发,nginx处理请求是异步非阻塞的,提供反向代理,负载均衡,支持rewrite,而且稳定性也比较高。

    安装

    先安装pcre(nginx用来支持rewrite的支持库)
    https://ftp.pcre.org/pub/pcre/
    tar -xzvf pcre-X(下载的版本)
    cd pcre-XX
    ./configure
    make && make install
    安装nginx wget http://nginx.org/download/nginx-1.6.2.tar.gz
    tar -xzvf nginx-XX
    cd nginx-XX
    ./configure --prefix = /soft/nginx
    //指定nginx的安装目录。默认/usr/local/nginx
    make && make install
    

    启动关闭nginx

    检查配置文件是否正确
    /usr/local/nginx/sbin/nginx -t
    ./sbin/nginx -V可以查看到编译选项
    
    启动  、关闭
      ./sbin/nginx #默认配置文件 conf/nginx.conf -c 指定
      ./sbin/nginx -s stop
      pkill nginx
    重启(建议reload而不是重启)
      ./sbin/nginx -s reload
      sudo service nginx
      或者kill -HUP cat /usr/loacl/nginxs/logs/nginx.pid
    

    nginx的配置文件

    切换到
    /usr/local/nginx/sbin/nginx
    vim conf/nginx.conf
    #user nobody    使用指定用户
    #worker_process 2; #使用的worker进程数,master不在此列,同cpu内核数
    #worker_cpu_affinity 0001 0010  #如果 worker_processes为2以上要设置
    如果上边设置的为4  则下边为 0001 0010 0100 1000
    #error_log logs/e.log    #错误日志文件默认在logs里
    #error_log logs/e.log notice ;日志文件与日志级别[debug | info | notice | warn | error | crit |alert | emerg]
    #pid logs/nginx.pid #存放进程pid
    events{
        use epoll [kqueue|epoll|select|poll] #处理连接方法
        #epoll 是多路复用IO(I/O Multiplexing)中的一种
        #仅用于linux2.6内核以上,可以大大提高nginx的性能
        #worker_connections 1024;     每个worker最大连接数,默认为1024
    }
    http{
        #log_format main  
        # access_log访问日志
      
        server{
             listen 80; 监听80端口
            (listen  81; 这样还会监听81端口)
             server_name  www.nginx.cn #监听域名 定义服务器的默认网站根目录位置
             access_log logs/nginx.access.log main  #设定本虚拟访问主机的访问日志,采用main格式
             client_max_body_size 10m ;#最大报文,默认1M
             location {
                  root html;
                   #定义首页索引文件的名称
                   index index.php index.html index.html;
              }
             #定义错误提示页面
               error_page 500 502 503 504 /50.html
              location = /50x.html{
                    root html;
                }
          }
    }
    1.如果只有一个server、server_name 可以任意起(可以为IP/域名/任何字符串)则不论用什么访问(IP/域名/字符串),无论server_name是否匹配,都匹配到此server
    2、如果有多个server,如果server_name可以匹配到任一个server的server_name,则使用此server,否则匹配到第一个server块,不论server_name是否匹配!
    

    Nginx配置虚拟主机

      server{
           listen 80;
           access_log  logs/xxx.log    [(日志格式)]为每个网站设定独立的日志记录
           server_name   xxx.com   
      }
      location / {
            root /  html/xxxxx(根目录,可以相对目录可以绝对目录)
             index index.php  index.html;首页
      }
     location  {
          虚拟主机对PHP的解析
       }
    

    location 基本语法

    location 基本语法 [=|~|~*|]/uri/{.....}
    =严格匹配
    ~为区分大小写匹配
    ~*为不区分大小写匹配
    .......
    location = /{
    #A只配/询。
    }
    location/{
    #B匹配任何查询,因为所有请求都已/开头。但是则表达式规则和长的块规则配被优先利用和匹配
    location  ^~/images/ {
    #C 配任何以/images/ 开头的任何查询并且停搜索,
     location~*.(gif l jpg l jpeg)$ {
     #D 匹配任何以gif、jpg jpeg结尾请求
     #但是所有images/ 目录的请求将由ConfigurationC处理
    

    URL重写 用 rewrite(两种重写方法)

    image.png
    nginx支持简单的if语句,
    if ( !-e $request_filename){
          rewrite (.*)$ /index.php/$1
    }
    将地址栏上所有的东西,都捕捉到然后重写到index.php
    
    将 /auth/login
     http://index.php ?/auth/login
    server{
           listen 80;
           access_log  logs/xxx.log    [(日志格式)]为每个网站设定独立的日志记录
           server_name   xxx.com   
      }
      location / {
            root /  html/xxxxx(根目录,可以相对目录可以绝对目录)
            index index.php  index.html;首页
            try_files $uri/index.php?uri;
      }
    

    反向代理

    用nginx做反向代理用proxy_pass,nginx反向代理不用自己处理图片的相关请求,
    而是把图片的请求转发给apache来处理。
    
    image.png
    配置如下 (响应图片请求  )
    upstream name_hosts{
          server 192.168.123.1:80  #此处是是一个IP:port格式要转到的ip
    }
    location ~ \.(jpg | jpeg | png | gif)${
        proxy_set_header Host www.new.com; #要转 到的域名
        proxy_pass  HTTP://IP:port; #要转到的ip
    }
    
    image.png
     但是经过代理服务器转发后,真实的服务器就获取不到用户的真实ip,
     所以在使用代理服务器时,需要代理服务器将用户的真实IP转发到真实的服务器上
    location ~ \.(jpg | jpeg | png | gif)${
        proxy_pass  HTTP://IP:port;
        proxy_set_header X-Forwarded-For $remote_addr;#$remote_addr用户的真实IP
    }
    

    nginx的集群和负载均衡

    upstream {}模块 把多台服务器加入到一个组然后 memcache_pass, fastcg_pass, proxy_pass ==>upstream组
    #例如这个放置图片的服务器
     配置upstream
     upstream imageserver{
          server  IP:port  weight=1 max_fails=2 fail_timeout=30s;
          server  IP:port  weight=1 max_fails=2 fail_timeout=30s;
        }
     下游调用
       location ~ \.(jpg | jpeg | png | gif){
             proxy_set_header X-Forwarded-For $remote_addr;
              proxy_pass http://imageserver;
        }
      
      默认的负载均衡的算法:
      设置计数器,轮流请求N台服务器
      可以安装第三方模块,来利用不同参数吧请求均衡到不同的服务器上
       如基于cookie值区别用户做负载均衡(nginx sticky)模块
       基于URL利用一致性哈希算法做均衡(nginxHttpUpstreamConsistentHash模块)
       基于IP做负载均衡等。
    负载均衡的算法要好好设计,如果设计不当可能会丢掉用户的session!!!!
    

    nginx的日志文件

    image.png

    个性化日志输出重写log_format newrule,然后将access_log后的main替换为newrule

    相关文章

      网友评论

        本文标题:Nginx入门学习

        本文链接:https://www.haomeiwen.com/subject/ggrdhftx.html