nginx入门的基础知识总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yilukuangpao/article/details/80944540

大概两周的时间完成:

  知识点:1.简单介绍

                2.安装与启动

                3.全局端配置信息

                4.server段配置虚拟主机

                5.日志管理

                6.pathinfo配置

                7. try_files介绍

                8. 反向代理

                9.集群与负载均衡

1.nginx介绍

   是一款轻量级web服务器/反向代理服务器及电子邮件代理服务器

   最牛逼的组合:lnmp(linux nginx mysql php)

2.安装与启动

   1》安装

        1)获取网址:http://nginx.org/download/

        2)  安装依赖库:pcre    命令:yum install pcre pcre-devel

        3)cd /usr/local/src(放置nginx包目录)        wget nginx下载地址

        4)tar xzvf nginx压缩包    cd  nginx解压包    ./configure --prefix=/usr/local/nginx      make && make install

        5)  yum 安装参考链接:https://blog.csdn.net/zph1234/article/details/51250523

    2》 启动

          源码安装命令

           启动:nginx      测试 nginx -t  加载最新配置 nginx -s reload 

           立即停止:nginx -s stop  

           优雅停止:nginx -s quit(此停止所谓的优雅 指正在进行的nginx进程不受影响,会执行完成后再断开) 

           重新打开日志: nginx -s reopen (在日志需要备份时  在不断开服务器的情况下切换日志文件)

          最好参考yum安装nginx

          命令: 启动:systemctl start nginx   停止:systemctl stop nginx   重启:systemctl restart nginx

          遇到的问题

         默认端口号:80 如果启动失败  一般为端口被占用,用命令 netstat -anp | grep 80   停止占用的端口  或者修改nginx的端口,再次启动

3.  全局段配置信息

       // 全局区
       // 有1个工作的子进程,可以自行修改,但太大无益,因为要争夺CPU,
       // 一般设置为 CPU数*核数
       worker_processes 1;    // 正常就是(cpu个数)*(核数)

 

       Events {

              // 一般是配置nginx连接的特性

            // 如1个worker能同时允许多少连接

            worker_connections  1024; // 这是指 一个子进程最大允许连1024个连接

      }

 

     http {  //这是配置http服务器的主要段

           Server1 { // 这是虚拟主机段

      

               Location {  //定位,把特殊的路径或文件再次定位 ,如image目录单独处理

               

              }             /// 如.php单独处理

           }

 

            Server2 {

            }

       }

 

 4. 基于域名的虚拟主机

    server {

        listen 80;  #监听端口

        server_name a.com; #监听域名,如有多个,空格隔开

       location / {

                root /var/www/a.com;   #根目录定位

                index index.html; #默认索引页

        }

     }

 

  例子2: 基于端口的虚拟主机配置

     server {

        listen 8080;

        server_name a.com;

 

        location / {

                root /var/www/html8080;

                index index.html;

        }

    }

5.  日志管理:

       我们观察nginx的server段,可以看到如下类似信息

         access_log  logs/access.log  main;

       这说明 该server, 它的访问日志的文件是 logs/host.access.log ,

           日志格式”main”格式.

            main格式是什么?

         log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

 

        除了main格式,你可以自定义其他格式.

            log_format  mylog  '$remote_addr [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent"';

 

     server {

         listen 80;
        #下面声明a.com使用mylog格式日志,并保存在logs/a.com.log文件中

        access_log logs/a.com.log mylog;

         server_name a.com www.a.com;
        ....
  }

 

main格式是我们定义好一种日志的格式,并起个名字,便于引用.

以上面的例子, main类型的日志,记录的 remote_addr.... http_x_forwarded_for等选项.

 

 

日志格式 是指记录哪些选项

默认的日志格式: main

     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                            '$status $body_bytes_sent "$http_referer" '

                            '"$http_user_agent" "$http_x_forwarded_for"';

 

如默认的main日志格式,记录这么几项

远程IP- 远程用户/用户时间 请求方法(如GET/POST) 请求体body长度 referer来源信息

http-user-agent用户代理/蜘蛛 ,被转发的请求的原始IP

 

http_x_forwarded_for:在经过代理时,代理把你的本来IP加在此头信息中,传输你的原始IP

实际应用: shell+定时任务+nginx信号管理,完成日志按日期存储

分析思路:

凌晨00:00:01,把昨天的日志重命名,放在相应的目录下

再USR1信息号控制nginx重新生成新的日志文件

具体脚本:

#!/bin/bash

base_path='/usr/local/nginx/logs'

log_path=$(date -d yesterday +"%Y%m")

day=$(date -d yesterday +"%d")

mkdir -p $base_path/$log_path

mv $base_path/access.log $base_path/$log_path/access_$day.log

#echo $base_path/$log_path/access_$day.log
/usr/local/nginx/sbin/nginx -s reopen

定时任务

Crontab 编辑定时任务

01 00 * * * /xxx/path/b.sh 

每天0时1分(建议在02-04点之间,系统负载小)

 

多行注释和取消注释

 注释:     :n1,n2s/^/#/g     取消注释:   :n1,n1s/^#//g

 

6.pathinfo设置

     nginx本身是不支持pathinfo  所以需要我们设置

     1)如:url  http://www.shen.com/index.php/home/index/index   如果我们没有开启pathinfo 则会报招不到   404 Not Found

          解决:

             修改这两处  则支持pathinfo   ok

     2)去掉index.php  让链接也可以用  这时需要用到nginx重写功能  

         

          在对应的地方添加对应的这几行代码   轻松搞定

    7. try_files介绍

         强大的try_files  直接替换掉第6部里的(1)(2)功能

        

         完美解决  就是这么简单

8. 反向代理

      反向代理  主要一个命令是proxy_pass    原理简单点说就是:配合location模块的正则匹配  匹配到相关模块  或 一类文件  然后用proxy_pass代理到对应的服务器上找到对应的文件或者目录

实现方式:

     这个是实现了匹配到 baidu  会自动代理到百度页    (我们可以自己尝试着做下匹配图片格式  把图片放到另外一个服务器  然后代理到对应服务器上就ok    注意一点: 要加上http://)

9.集群与负载均衡

      集群:就是多台服务器提供服务为集群

      负载均衡:是多台服务器的压力要均衡(搭配负载均衡策略)

       1)越是高大上的东西  越简单   (这是很多人的共识哦   这话不是我说的  不要打我)

       2) 实现原理:nginx有个upstream模块,在这里我们要定义下自己的服务器     在location里用proxy_pass代理过来就ok

       3)   upstream daili { 
                     server 192.168.1.108; 
                     server 192.168.1.107; 
                }

                在服务器后可以跟  weight=5(权重) fail_timeout=5s(超时失败时间) max_fails=3(失败重试词数) 。。。

                 location / { 
                       root  html; 
                       index  index.html index.htm; 
                       proxy_pass http://daili; 
                 }

        4) 负载均衡策略:

              1. 轮询(默认)

               2. ip_hash

               3. hash(根据url 参数  hash)

               4.fail  (第三方     根据服务器响应时间分配)

ok   如有疑问  请留言 (欢迎大家    批评指正)

猜你喜欢

转载自blog.csdn.net/yilukuangpao/article/details/80944540
今日推荐