Nginx入门实践(学习笔记)

Nginx快速入门

一、Nginx简介

Nginx(发音同 engine x)是一款基于异步框架的轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev(伊戈尔·赛索耶夫)所开发,最初供俄国大型网站Rambler.ru及搜寻引擎Rambler使用。

nginx可以做轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器

Nginx特点

优点

高并发量:基于 epoll/kqueue 模型开发,支持高并发量,官方说其支持高达 5w 并发连接数的响应
内存消耗少:善于处理静态文件,相较于其他web(比如:apache),占用更少的内存及资源

简单稳定:配置简单(一个conf文件),运行简单(nginx命令),而且运行稳定
模块化程度高:功能模块插件化设计,可以自由配置相应的功能。
支持Rwrite重写规则:能够根据域名、URL等请求关键点,实现定制化的高质量分发。

低成本:Nginx的负载均衡功能很强大而且免费开源,相较于几十万的硬件负载均衡器成本相当低。

支持多系统:Nginx代码完全用C语言从头写成,可以在各系统上编译并使用。

缺点:

动态处理差:nginx善于处理静态文件,但是处理动态页面相较于Apache之类重量级的web软件能力稍欠缺。

rewrite弱:虽然nginx支持rewrite功能多,但是相较于Apache之类重量级的web软件能力稍欠缺。

二、Nginx的安装(linux:ubuntu为例)

安装Nginx软件

执行命令:apt-get install nginx -y

检查安装效果

执行命令 :nginx -v 查看nginx版本信息

查看是否启动nginx服务 安装成功后默认开启服务

执行命令:ps ajx | grep ngi 查看nginx是否开启

Nginx配置简介

nginx软件目录:

工作目录:/etc/nginx
执行文件: /usr/sbin/nginx
日志目录:/var/log/nginx
启动文件:/etc/init.d/nginx
web目录:/var/www/html/,首页文件是index.nginx-debian.html
/usr/share/nginx/html/ 首页文件是index.html

nginx配置文件:

默认文件:
/etc/nginx/nginx.conf
其他目录:
/etc/nginx/{sites-available/sites-enabled/conf.d}

文件结构:

	全局配置段
	http配置段
		server配置段		项目或者应用
			location配置段	url配置

安装好nginx后 ubuntu就可以做为nginx服务器了

使用文本编辑器远程连接ubuntu

我这里使用windows下的vscode远程连接ubuntu系统

使用vscode下载sftp拓展即可ssh连接ubuntu

在这里插入图片描述安装此拓展后可以创建一个名为nginx的文件夹,快捷键ctrl+shift+P 输入sftp 自动创建sftp配置文件

在这里插入图片描述在这里插入图片描述
输入要链接的远程ubuntu地址,设置路径为/etc/nginx目录,然后保存,

在这里插入图片描述点击Download Floder 输入密码,连接成功后会将ubuntu系统下/etc/nginx下的配置文件下载过来,同时在windows下修改也会自动上传至ubuntu。

下载过来的目录结构为这个样子
在这里插入图片描述
html文件夹是不包含的 这个是我后来创建的

nginx.conf是全局配置文件

三、nginx配置详解

全局配置段

主要是全局性的和服务级别的属性配置,常见的主要有以下几种设置:

  • user 设置使用用户(worker)
  • worker_processes 进行增大并发连接数的处理 跟cpu保持一致 八核设置八个
  • error_log nginx的错误日志
  • pid nginx服务启动时候pid
  • events 定义事件相关的属性
  • worker_connections 一个进程允许处理的最大连接数
  • use 定义使用的内核模型

http配置段

主要配置server通用的一些配置

  • include mime.types; # 文件扩展名与文件类型映射表
  • default_type application/octet-stream; # 默认文件类型
  • sendfile on; # 开启高效文件传输模式。
  • autoindex on; # 开启目录列表访问,合适下载服务器,默认关闭。
  • tcp_nopush on; # 防止网络阻塞
  • tcp_nodelay on; # 防止网络阻塞
  • keepalive_timeout 120; # 长连接超时时间,单位是秒
  • gzip on; # 开启gzip压缩输出

Server常见配置属性

常见样式

server {
	# 监听ip以及端口号
    listen 端口;
    # 该服务端名称
    server_name 主机名;
    ...
}

server配置段最重要的属性是listen和server_name。它们都是用于匹配并处理请求的。

listen属性
作用:定义Server监听的ip和port,当ip/port匹配时候才进行下一步匹配

server_name属性
作用:定义Server监听的域名,当域名匹配时候才进行下一步操作

root属性
作用:定义Server相应请求的html文件所在路径
表现形式:
root /var/www/html;

index属性
作用:定义响应请求后返回的文件名称或格式
表现形式:
index index.html index.htm index.nginx-debian.html;

return属性
作用:定义响应请求后返回的http状态码
表现形式:
return 444;

四、实例演示方便理解

快速实现访问

在conf.d文件夹下创建了nginx.conf文件
在这里插入图片描述新建终端 ssh连接到ubuntu
在这里插入图片描述每次修改conf配置文件 都会自动上传至ubuntu系统,
但是需要使用 nginx -t 测试是否出错
在这里插入图片描述出现这说明没有代码错误

然后要使用 nginx -s reload 命令 重新加载nginx配置服务

此时使用浏览器访问监听地址172.26.236.86:80即可得到访问成功页面
在这里插入图片描述这样我们就成功的配置好了nginx服务器以及成功访问到nginx了。

新建html文件夹 并且新建index.html文件

在这里插入图片描述修改配置文件conf.d下的nginx.conf为
在这里插入图片描述再次访问监听地址得到页面
在这里插入图片描述

基本用法

server {
    # 监听地址以及端口
    listen 172.26.236.86:80;
    # 监听命名 非必须指定
    server_name www;
    location / {
        # root 指定文件目录
        root /etc/nginx/html;
        # index 指定返回的首页文件
        # 即使不指定,在root条件下,访问根路径也会自动去html目录下寻找index文件
        # index 8000.html
        index index.html;
    }
}

匹配优先级

server {
    # 监听地址以及端口
    listen 172.26.236.86:80;
    #------------  匹配规则优先级 ----------
    #通用匹配规则  优先级最低
    location / {
        return 400;
    }
    #精确匹配 使用=符号  优先级最高
    location = / {
        return 401;
    }
    #优先匹配 使用~符号  优先级第二高
    location ~ / {
        return 402;
    }
    }

访问页面依次得到
在这里插入图片描述在这里插入图片描述在这里插入图片描述

try_files 和 return的使用以及区别

	# return 直接返回状态码
    # 在根路径下使用try_files 返回400状态码并不会成功
    # 在其他路径下可以通过try_files返回状态码
     location / {
         try_files $uri $uri/ =400;
     }

    # try_files 也可以返回状态码 但是不能对跟路由进行处理处理 /   
     location /a {
         try_files $uri $uri/ =401;
     }

    # try_files可以配合@使用  但是return不能配合@使用
     location /a {
         try_files $uri $uri/ @ceshi;
     }
     location @ceshi {
         return 402;
     }

    # return 使用重定向跳转
    # 这里访问监听地址会直接跳到百度首页
     location / {
         return 302 http://www.baidu.com;
     }

匹配路径后面的 / 问题

如果不加/ 即/a 那么 能够匹配/a后边所有的路由 例如 /a/b/c 等

如果加了/ 即/a/ 那么只能匹配路由/a/

root 和 alias 的使用和区别

root根路径下使用  不需要再指定路径最后加 / 例如:root /etc/nginx/html;
     location / {
    #     # 指定文件目录 
          root /etc/nginx/html;
    #      返回指定首页文件  如果html文件夹下有index.html,那么默认会打开index 即使不指定index
          index index.html;
     }

     # alias的根路径下使用使用 指定文件目录时需要在最后面加上 / 例如:alias /etc/nginx/html/;
      location / {
    #     # 指定文件目录 
          alias /etc/nginx/html/;
    #     # 返回指定首页文件  如果html文件夹下有index.html,那么默认会打开index 即使不指定index
          index index.html;
     }

    # root 非根路径下使用
    # root只能在根路径下 使用 否则会返回404
       location /a {
    #     # 指定文件目录 
          root /etc/nginx/html;
         # 返回指定首页文件  如果html文件夹下有index.html,那么默认会打开index 即使不指定index
          index index.html;
     }

    # alias 可以在非根路径下使用
     location /a {
    #     # 指定文件目录 
          alias /etc/nginx/html;
    #     # 返回指定首页文件  如果html文件夹下有index.html,那么默认会打开index 即使不指定index
          index index.html;
     }

访问控制

 server {
    # 监听地址以及端口
    listen 172.26.236.86:80;

   # ---------------------访问控制------------------------
     location / {
         stub_status on;  # 返回nginx的状态信息
         allow 10.211.152.157;  # 允许指定ip访问
         deny all;  # 除了允许访问的ip  其他均拒绝访问

     }
}

使用允许访问的ip地址访问得到nginx状态信息
在这里插入图片描述

目录下载控制

server {
    # 监听地址以及端口
    listen 172.26.236.86:80;

   # -----------------目录下载控制-----------------
    location /download {
        # 指定目录
        alias /etc/nginx;
        # 允许下载
        autoindex on;
    }
}

访问地址得到页面
在这里插入图片描述

Ngnix进阶知识

反向代理

代理是什么?

简单来说,我找一个中间人,代替我去做一件事情,只要他给我结果就可以。
代理一般分为两种:正向代理、反向代理

反向代理的使用(proxy_pass)

# 反向代理转发
server {
    listen 172.26.236.86:80; 
    location / {
    	 # 使用proxy_pass 进行反向代理
    	 # 当访问80端口的时候会自动跳转到到8000端口
        proxy_pass http://172.26.236.86:8000;
    }
}

server {
    listen 172.26.236.86:8000; 
    location / {
        root /etc/nginx/html;
        index 8000.html;
    }
}

负载均衡

负载均衡是什么?

我们之前使用proxy_pass的方式实现了nginx代理请求到后端的效果,随着我们的网站访问量越来越多,一个后端就不现实了,那么接下来我们应该如果在访问量日渐增大的情况下,满足线上业务的稳定呢?
解决方法就是:负载均衡
负载均衡简单说来人多力量大,打群架。

负载均衡的使用(upstream)



# 负载均衡的使用   轮询 遍历 每次访问调用一次

upstream meiduo {
    # 默认轮询调度算法
    # server 172.26.236.86:8000;
    # server 172.26.236.86:8001;
    # server 172.26.236.86:8002;
    # 加权轮询  优先调用权重的服务
    # server 172.26.236.86:8000 weight=1;
    # server 172.26.236.86:8001 weight=2;
    # server 172.26.236.86:8002 weight=3;
    # ip_hash 算法  
    # 第一次分配到那个ip 以后的所有请求都会访问na哪个ip
    ip_hash;
    server 172.26.236.86:8000;
    server 172.26.236.86:8001;
    server 172.26.236.86:8002;
}



# 反向代理转发
server {
    listen 172.26.236.86:80; 
    location / {
        proxy_pass http://meiduo;
    }
}

server {
    listen 172.26.236.86:8000; 
    location / {
        root /etc/nginx/html;
        index 8000.html;
    }
}

server {
    listen 172.26.236.86:8001; 
    location / {
        root /etc/nginx/html;
        index 8001.html;
    }
}

server {
    listen 172.26.236.86:8002; 
    location / {
        root /etc/nginx/html;
        index 8002.html;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值