Nginx的使用

1.安装使用

  1. 准备开发环境

    注意,编译软件之前,还是需要解决系统的开发环境,例如如下
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
    
  2. 下载压缩包并且解压

    # 1.win进入淘宝nginx官网,下载源代码,进行编译安装
    http://tengine.taobao.org/index_cn.html
        
    # 2.在linux的opt目录下,下载nginx源代码
    wget http://tengine.taobao.org/download/tengine-2.3.2.tar.gz
        
    # 3.解压缩源代码,准备编译三部曲
    [root@s25linux opt]# tar -zxvf  tengine-2.3.2.tar.gz
    
  3. 编译三部曲

    # 1.进入源码目录,指定nginx的安装位置
    [root@s25linux tengine-2.3.2]# ./configure --prefix=/opt/tngx232/
    # 2.第二步与第三步   编译且编译安装,生成nginx的可执行命令目录
    make && make install 
    
  4. 安装完毕后生成文件夹

    # 安装完毕后,会生成/opt/tngx232/文件夹,nginx可以使用的配置都在这里了
    [root@s25linux tngx232]# ls
    conf  html  logs  sbin
    # 文件夹解释
        # conf  明显是存放*.conf配置文件的
        # html  存放网页的静态文件的目录
        # logs  日志
        # sbin  存放nginx的可执行命令 
    
  5. 添加环境变量

    # 添加nginx到PATH中,可以快捷执行命令
    
    # 永久修改PATH,开机就去读
    vim /etc/profile  
    # 写入 nginx的安装路径
    PATH="/opt/tngx232/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:"
    
  6. 有关Nginx的命令

    # 首次启动nginx,注意要关闭防火墙
    # 直接输入nginx命令即可启动
    
    # 有关nginx的命令
    nginx				#首次输入是直接启动,不得再次输入 
    nginx -s reload  	#平滑重启,重新读取nginx的配置文件,而不重启进程
    nginx -s stop  		#停止nginx进程 
    nginx -t   			#检测nginx.conf语法是否正确
    
  7. 访问Nginx站点

    # 默认访问nginx的首页站点url是
    http://192.168.178.140:80/index.html
    

2.配置文件

  1. 代码风格

    nginx的配置文件是c语言的代码风格 
    以; 号 表示每一行配置的结束
    nginx.conf中 是以代码块形式 编写的
    例如 主要的几个代码块
    http{   }  #里面定义了多个代码,是nginx的核心功能配置点
    server{  }  #虚拟主机代码块,定义了网站的目录地址,以及首页文件名字,监听的端口,等等功能
    location {  }  #域名匹配代码块。。
    
  2. 详细代码解释

    #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是用于启停进程的号码
    # ps -ef去获取nginx的进程id
    # 把pid写入到 此 nginx.pid文件中,
    pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    # 这个http区域,是nginx的核心功能区域	
    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;
    
        sendfile        on;
        # tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
        # nginx开启静态资源压缩,比如nginx返回磁盘的html文件特别大,里面包含了诸多的js css,图片引用
        #  一个html文件 达到4m大小
        #  传输图片 等等都是高兴的 1080p图片
        #  打开此功能,能够极大的提升网站访问,以及静态资源压缩
        gzip  on;
    
        # 提供静态资源缓存功能,第一次访问过网页之后,nginx能够让图片js等静态资源,缓存到浏览器上
        # 浏览器下次访问网站,速度就几乎是秒开了
        # 想要用这些功能,只需要在nginx里打开某些配置即可,作者都已经写好了该功能
        #
        #这里的server区域配置,就是虚拟主机的核心配置
        # nginx支持编写多个server{} 区域块,以达到多虚拟主机,多个站点的功能
        #   server{} 区域块,可以存在多个,且默认是自上而下去加载,去匹配的
        #   目前这里是第一个server {} 区域块,端口是85
        server {
            # 定义该网站的端口
            listen       85;
            #填写域名,没有就默认即可
            server_name  localhost;
            #更改nginx的编码支持
            charset utf-8;
            # 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件
            # 讲师机器的配置,也就是去  /s25python/ 这个目录下 寻找 40x.html
            error_page  404  /40x.html;
            #access_log  logs/host.access.log  main;
            
            
           #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
            # nginx的域名匹配,所有的请求,都会进入到这里
            # 例如  192.168.178.140:85/lubenwei.jpg
            #    192.168.178.140:85/menggededianhua.txt
            location / {
                #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改
                #  当用户访问  192.168.178.140:85的时候,就返回该目录的资料
                root   /s25python/;
               # index参数,用于定义nginx的首页文件名字  ,只要在/s25python目录下存在index.html文件即可
                index  index.html index.htm;
            }
    
        }
    
    # 这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{}
    # 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号
    # 这里是第二个虚拟主机的配置了
    server  {
    	listen 89;
    	server_name  _;
    	# nginx的域名匹配
    	# 当用户访问 192.168.178.140:89的时候,返回该目录的内容
    	location  / {
            root   /s25linux/;
            index  index.html;
    	}
    }
    }
    

3.Nginx的多站点功能

也称之为是nginx的虚拟主机站点配置

指的就是在nginx中,能够通过文件目录的不同,可以定义多个不同的网站

image-20220306004341785

  • 基于域名的多虚拟主机

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

    1.修改nginx.conf配置如下,定义2个server{} 区域块即可
    
  • 第一个虚拟主机的配置

        #   目前这里是第一个server {} 区域块,端口是85
        server {
            # 定义该网站的端口
            listen       85;
            #填写域名,没有就默认即可
            server_name  localhost;
            #更改nginx的编码支持
            charset utf-8;
    
            #access_log  logs/host.access.log  main;
            #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
            # nginx的域名匹配,所有的请求,都会进入到这里
            # 例如  192.168.178.140:85/lubenwei.jpg
            #    192.168.178.140:85/menggededianhua.txt
            location / {
                #这个root参数,是定义该虚拟主机,资料存放路径的,可以自由修改
                #  当用户访问  192.168.178.140:85的时候,就返回该目录的资料
                root   /s25python/;
               # index参数,用于定义nginx的首页文件名字  ,只要在/s25python目录下存在index.html文件即可
                index  index.html index.htm;
            }
    
        }
    
  • 第二个虚拟主机的配置

    #这里就是上一个Server{}的标签闭合处了,,可以写入第二个server{}
    # 注意 ,注意,server{} 标签快,是平级的关系,不得嵌套,检查好你的花括号
    # 这里是第二个虚拟主机的配置了
    server  {
    listen 89;
    server_name  _;
    #nginx的域名匹配
    # 当用户访问 192.168.178.140:89的时候,返回该目录的内容
    location  / {
            root   /s25linux/;
            index  index.html;
    }
    }
    
  • 改完配置文件后,分别创建2个站点的资源目录

    [root@s25linux conf]# mkdir /s25linux   /s25python
    [root@s25linux conf]# echo "i like linux ,i very  happy"  >  /s25linux/index.html
    [root@s25linux conf]# echo "i use python,i very  nb"  >  /s25python/index.html
    
    #注意,改了配置文件,一定要平滑重启,否则不生效
    [root@s25linux conf]# nginx  -s reload
    
    #此时分别访问2个站点,即可看到2个站点的资料
    192.168.178.140:85
    192.168.178.140:89
    

4.404页面优化

如果nginx不做404优化,那么页面是非常丑的。。

1.修改nginx.conf,修改一行参数即可

server {
        # 定义该网站的端口
        listen       85;
        #填写域名,没有就默认即可
        server_name  localhost;
        #更改nginx的编码支持
        charset utf-8;
        # 如此添加一行参数,当用户请求出错,出现404的时候,就返回 root定义的目录去寻找40x.html文件
        # 讲师机器的配置,也就是去  /s25python/ 这个目录下 寻找 40x.html
        error_page  404  /40x.html;   #注意别忘了分号
        
        ......
            
手动创建一个40x.html,咱们也可以去网上搜索404的html模板,修改此40x.html即可
[root@s25linux conf]# cat /s25python/40x.html

<meta charset=utf8>
我是自定义的404页面,你看我美不美...

注意还得重启nginx
nginx -s reload  

5.访客日志

  • 什么是访客日志

    nginx的访客日志,能够记录,分析用户的请求行为
    -什么时间点,访问的最频繁,比如路飞的网站,网站的流量,基本都在晚上,学生下了班,在线学习各种技术
    -记录用户的请求频率,以此检测是否是爬虫等恶意请求,进行封禁。
    -检测躲在代理ip后的 真实用户ip
    -检测用户ip,请求时间,请求的url内容,等等。。。。
    
  • 访客日志的配置

    修改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"';
       
       
    # 如果25期所有学生,在班级,同时访问路飞官网
    # nginx日志检测到的ip地址是一样,还是不一样的?
    # 答案是一样的,因为大家都从同一路由器转发出去的公网
    # 我们都是通过同一个宽带运营商提供的公网ip和路飞通信的
    
        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页面给与用查看
    
    
    $http_x_forwarded_for  
    # 记录客户端的来源真实ip 97.64.34.118,机器A用机器B的ip去访问,
    # 可以抓出机器A的地址,这个参数不是万能的,爬虫和反扒是相互的。。。
    
    重启nginx -s reload 
    
    实时监测访客日志的信息
    

6.反向代理功能

6.1.正向代理及反向代理的区别
  • image-20220307231428761

  • image-20220307231502541

  • 正向代理,,代理服务器,代理的是客户端
    反向代理,,代理服务器,,代理的是服务端
    
  • image-20220307231542960

6.2.反向代理的配置
按道理讲,需要准备2台linux服务器
192.168.178.134
192.168.178.140
但是条件有限,没有那么多服务器,装两个虚拟机也会卡
因此决定用如下的方案,很巧妙,用到了nginx支持的多虚拟主机功能
准备1台机器即可
如192.168.178.140 ,基于端口的不同,运行不同的站点
  1. 准备一台linux机器,安装好nginx之后,,修改nginx.conf如下,配置好2个server{}标签

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

        #   第一个虚拟主机的配置,作用是反向代理了
        #
        server {
            listen       80;
            server_name  localhost;
            charset utf-8;
            error_page  404  /40x.html;
            # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
            # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
            location / {
                #当请求发送给  192.168.178.140:80的时候
                #直接通过如下的参数,转发给90端口
                proxy_pass  http://192.168.178.140:90;
            }
        }
    
  3. 第二个server{}标签,作用是返回机器上的资料,也就是一个web站点的功能

    #第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
    server  {
        listen 90;
        server_name  _;
        #当请求来到   192.168.178.140:90的时候,就返回/s25proxy目录下的index.html
        location  / {
                root   /s25proxy/;
                index  index.html;
        }
    }
    
  4. 创建资源文件夹,以及html页面内容

    [root@s25linux conf]# cat /s25proxy/index.html
    <meta charset=utf8>
    
    我是资源服务器,我是192.168.178.14090端口
    
  5. 重启nginx

    nginx -s reload
    
  6. 查看效果

    image-20220307232228716

7.负载均衡

负载均衡搭建步骤

  1. 修改nginx.conf如下

    • 第一个虚拟主机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;
              # 这里的locaiton 路径匹配,如果你写的是root参数,就是一个web站点功能
              # 如果你写的是proxy_pass参数,就是一个请求转发,反向代理功能
              location / {
                  #当请求发送给  192.168.178.140:80的时候
                  #直接通过如下的参数,转发给90端口
                   proxy_pass  http://s25real_server;
              }
          }
      
    • 第二个server{}标签的配置,作用是提供资源给用户看的,90端口

      #第二个虚拟主机,作用是web站点功能,资源服务器,提供页面的
      server  {
          listen 90;
          server_name  _;
          #当请求来到   192.168.178.140:90的时候,就返回/s25proxy目录下的index.html
          location  / {
                  root   /s25lol/;
                  index  index.html;
          }
      }
      
    • 第三个server{}标签的作用,同样是返回资源页面,查看负载均衡效果的,95端口

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

    准备好 /s25lol/index.html
    准备好  /s25dnf/index.html
    
  3. 此时访问页面即可查看效果

    image-20220307232717713

8.负载均衡算法

1.默认是轮询机制,每台服务器处理一次
2.加权轮询,修改nginx.conf如下,给与机器不同的权重
    upstream  s25real_server  {
server   192.168.178.140:90 weight=4;
server  192.168.178.140:95 weight=1;
}

特此说明:以上内容参考于路飞学城于超老师的博客内容。如有侵权请联系

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值