Nginx是什么,Nginx配置文件解释,应用场景有哪些

以下内容均为nginx初学者所了解到的,并不全,可看下文具体内容,有需要补充的欢迎评论区留言~

一、什么是Nginx?

Nginx是一个 轻量级/高性能的HTTP和反向代理web服务器,用于 HTTP、HTTPS协议。它实现非常高效的反向代理、负载平衡,它可以处理2-3万并发连接数,官方监测能支持5万并发。优点占有内存少,并发能力强

二、Nginx配置文件介绍

Nginx的主配置文件是nginx.conf,先分开介绍各个部分,最后以一个自己的项目例子进行详细描述

2.1 全局模块

worker_processes  1;  #worker进程的数量,服务器并发处理能力,值越大并发能力越强
# 全局错误日志
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

2.2 events模块

events部分用于配置Nginx服务器的事件模块相关参数,控制Nginx服务器在处理连接请求时的行为
常见的events配置参数:

  • worker_connections:指定每个工作进程可以同时处理的最大连接数。
  • multi_accept:指定是否一次接受多个连接。默认情况下,Nginx在每个循环中只接受一个连接,但设置multi_accept为"on"后可以同时接受多个连接。
    -use:指定Nginx使用的事件模块。常见的事件模块有"epoll"、"kqueue"和"eventport"等
events {
    worker_connections  1024;   #每个工作进程可以同时处理的最大连接数。
}

2.3 http模块

  • include:引入其他配置文件,Nginx支持的媒体类型库文件
  • default_type:指定默认的 MIME 类型。
  • server:定义一个或多个虚拟主机,每个虚拟机都是独立的
  • listen:指定该虚拟主机监听的端口,默认80
  • ​server_name:指定域名,用于匹配请求的主机头,默认localhost
  • ​root:指定虚拟主机的根目录 可以理解为服务器根目录
  • location:用于匹配不同的 URL,并定义相关配置规则
2.3.1 server模块

server块与虚拟主机有密切联系,主要是为了节省硬件成本,一个http块可以包含多个server块,一个server块相当于一个虚拟主机,server块又包含location块。server块相当于虚拟机站点

2.3.2 server块的 root指令

在Nginx配置中,"root"指令用于设置服务器块(server block)的根目录,即指明软件的根目录。
通常,"root"指令位于Nginx配置文件中的服务器块(server block)中。

2.3.3 路径别名alias

在 Nginx 中,alias 用于创建一个路径别名的指令。 别名可以用于将文件或目录从一个位置映射到另一个位置,提供更灵活的访问控制。
server {
listen 80;
server_name www.fsj.com;
location /test{
alias /data/html/pc/index.html;
#相当于替换,访问/test/就是访问/data/html/pc/index.html;
}
}

2.3.4 location模块

在Nginx中,location 是一个用于匹配请求 URL 路径的指令。它在 Nginx 配置文件中使用,在不同的 location块中定义不同的行为或处理规则。

2.3.5 检测文件是否存在-----try_files指令

Nginx 的 try_files 指令用于指定在资源文件不存在时如何处理请求

基本语法
#方式一
try_files file ... uri;
file 表示要尝试的文件路径,
uri 则表示当文件不存在时转发请求的路径。

#举个例子
location / {
    try_files $uri $uri/ /index.html /error.html;
}

#释义  $uri表示文件 $uri/表示文件夹
尝试找到与请求的 uri对应的文件,若找不到,则$uri/后查找一个文件,若找不到,则访问/index.html,若/index.html也访问不到,则访问 /error.html;

#方式二
try_files file ... =code;
=code 表示文件不存在时 返回的状态码
#只会返回指定的 HTTP 响应码,而不会转发请求到指定的 uri

#举个例子
location / {
    try_files $uri $uri/ =404;
}

#释义
尝试找到与请求的 uri对应的文件,若找不到,则从$uri/后查找文件,若找不到,则从则返回 404 响应码。

2.3 整体代码例子解释

#user  nobody;
# 1. 全局模块
worker_processes  1;  #worker进程的数量,服务器并发处理能力,值越大并发能力越强
# 2. 全局错误日志
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


#事件区块开始
events {
    worker_connections  1024;   #每个worker进程支持的最大连接数
}

# HTTP区块开始
http {
    include       mime.types;   #Nginx支持的媒体类型库文件
    default_type  application/octet-stream;#默认的媒体类型,访问到未定义的扩展名的时候,就默认为下载该文件

    #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; # 连接超时时间

    #gzip  on;

    #第一个server区块开始,表示一个独立的虚拟主机站点
    #server块与虚拟主机有密切联系,主要是为了节省硬件成本,一个http块可以包含多个server块,一个server块相当于一个虚拟主机,server块又包含location块
    server { 
        listen       80; #提供服务的端口,默认80,监听端口
        server_name  localhost; #提供服务的域名主机名 默认localhost,用于匹配请求的主机头

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        proxy_connect_timeout 300; #单位秒 后端服务器连接的超时时间_发起握手等候响应超时时间
        proxy_send_timeout 300; #单位秒 后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
        proxy_read_timeout 300; #单位秒 连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)

        #location区块开始
        location / {
                root   html; #站点的根目录,相当于服务器开始访问的根目录,指定虚拟主机的根目录。
                index  index.html index.htm;  #默认的首页文件,多个用空格分开
	   			try_files $uri $uri/ /index.html; #页面重定向 路由模式history的情况下,防止出现404页面
        }
  		#location设置 反向代理 
        location /api/ { #小提示:/api/ 以及proxy_pass 代理地址末尾加/,说明匹配路径组成请求地址的时候去掉/api,不加/,默认拼接/api进行请求
            proxy_pass http://1xx.xx.xx.xx:xx92/;
            client_max_body_size 512m; #解决nginx上传大文件的问题,否则超出大小显示会报错返回413,默认1M,就是说如果请求的正文大于client_max_body_size,一定是失败的。如果需要上传大文件,一定要修改该值
            client_body_buffer_size 10m; #Nginx分配给请求数据的Buffer大小,如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中
        }
    	#location正常匹配 设置反向代理
        location /gexxx {
            proxy_pass http://18xxxs/;
        }

		#访问路径遇到文件,可以去根目录匹配该文件,并进行读取
       location /dqDiySV.txt {
           #识别到上方url路径,直接匹配根目录,去根目录下载文件
           root html/demo/; 
           #try_files $uri   $uri/  /dqDiySV.txt;
           #找不到返回400
           try_files $uri =404;
           #返回类型为txt
           default_type text/plain;
           #开启目录浏览下载功能
           autoindex on;
        }


     #遇到服务器返回错误信息,直接打开50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

三、Nginx应用场景

3.1 反向代理

nginx最典型的应用场景,或者说大家一提起nginx,就会条件性反射知道的反向代理应用场景,这个是必须要掌握的。反向代理是为了解决浏览器跨域问题,本质就是服务器之间的代理请求

3.1.1 什么是正向代理

正向代理 代理的是客户端,为客户端发送请求,对服务的隐藏自己的真实客户端。
简单来说就是 一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将取得的内容返回给客户端。
客户端才使用正向代理。正向代理代理的是客户端

3.1.2 什么是反向代理

那么针对于反向代理来说呢。反向代理 代理的是服务端。反向代理(Reverse Proxy)方式,是指代理服务器接收来自Internet上的连接请求,然后将请求发给内部网络上的服务器并将服务器得到的结果返回给Internet上请求连接的服务端,此时代理服务器从外部来看就是一个反向dialing服务器。
一句话就是,反向代理 代理的是服务端

反向代理的作用:
(1)保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,web服务器是内网,可以隐藏服务器的存在和特征,对于安全方面来说是很好的
(2)负载均衡,通过反向代理服务器来优化网站的负载

3.2 负载均衡upstream

在众多服务器中,Nginx能够从客户端请求“均匀地”分配到这些服务器中,这就是负载均衡,可以保证服务器不承载过重,分担服务器压力,也可以保证服务器不会“闲置”占用资源。
常用方式:

  • 轮询
    轮询会将客户端的请求循环分配给不同的后端服务器,但是轮询容易产生资源分配不合理的情况,轮询是按照时间顺序逐一分配到不同的后端服务器。
upstream postserver{ 
 server 192.168.3.12; 
 server 192.168.3.13; 
} 
server{
		location / {
			proxy_pass http://postserver#//可以指向上方均衡设置
  		}
}

借用别人的图片一下下
在这里插入图片描述

  • 加权轮询(通过权重weight)
    服务器性能越好的,权重就越高,也就是weight值越高,分配到访问的概率越大。主要用于后端服务器性能不均衡的情况下可以合理有效的利用主机资源。优点是分布式管理,提升网络的灵活性、稳定性,是服务器性能最大化
upstream postserver{ 
 server 192.168.3.12 weight=1; 
 server 192.168.3.13 weight=2; 
 server 192.168.5.56 weight=3; 
} 

3.3 nginx开启压缩

开启nginx gzip压缩之后,网页的静态资源大小会大大减少,可以提高传输效率,提高用户体验。并且可以从请求头看到gzip这样的压缩提示,表示已经开启了gzip压缩Content-Encoding: gzip

http {
  # 开启gzip
  gzip on;
 
  # 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩
  gzip_min_length 1k;
 
  # gzip 压缩级别 1-10 
  gzip_comp_level 2;
 
  # 进行压缩的文件类型。
 
  gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
 
  # 是否在http header中添加Vary: Accept-Encoding,建议开启
  gzip_vary on;
}

3.4 https服务器

  server {
      #监听443端口。443为后端端口号,主要用于HTTPS协议
      listen       443 ssl;

      #定义使用www.xx.com访问
      server_name  www.baidu.com;

      #ssl证书文件位置(常见证书文件格式为:crt/pem)
      ssl_certificate      cert.pem;
      #ssl证书key位置
      ssl_certificate_key  cert.key;

      #ssl配置参数(选择性配置)
      ssl_session_cache    shared:SSL:1m;
      ssl_session_timeout  5m;
      #数字签名,此处使用MD5
      ssl_ciphers  HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers  on;

      location / {
          root   /root;
          index  index.html index.htm;
      }
  }

好啦,以上是大米饭的总结,当然里面也有部分参考别人的内容,不过不重要,最终你自己学会了而且变成了你自己的知识就可以。
老规矩 让我们一起进步加油!我是到处乱跑的大米饭,一只笨笨的但是一直在慢慢前进的羊~ 人生目标是成为懒羊羊

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值