Nginx

Nginx

一、Nginx 介绍

点击可链接到Nginx官网

Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于2020年12月15日。

1.1 Nginx 作用

  1. 静态Web服务器:可以为发出请求的浏览器提供静态文档的程序。

  2. 正向代理

    正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从目标服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转发请求,将获得的内容返回给客户端。正向代理的情况下,客户端必须要进行一些特殊的设置才能使用。

    理解:客户端通过代理服务器去请求远程的服务器进行数据交流,代理客户端,用户有感知。

  3. 反向代理:

    反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。

    对于客户端来说,反向代理就相当于目标服务器,只需要将反向代理当作目标服务器一样发送请求就可以了,并且客户端不需要进行任何设置。

    理解:用户无感知代理,通过域名进行无感知的进行服务器请求。反向代理主要代理服务器端。

  4. 负载均衡:

    负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量的负载平均分发到多个服务器上,以提高系统整体的响应速度和可用性。

    负载均衡的策略有:

    1. 轮询(默认):每一个请求按时间顺序注意分配到不同的后端服务器,如果后福安服务器down掉,并且可以自动剔除。

    2. 权重(weight):权重默认为1,权重越高被分配的客户端的概率越大。指定轮询几率,权重大小和访问比率成正比。用于后端服务器性能不均衡的情况。

      upstream server_pool{
          server 127.0.0.1 weight=10;
          server 127.0.0.2 weight=3;
      }
      
    3. ip_hash:每个请求按照访问ip的hash结果进行分配服务器,即每个用户会固定访问一个后端服务器。

      好处:可以很好的解决同一个用户访问同一个应用时Session不共享问题。实现Session共享。

      upstream server_pool{
      	ip_hash;
          server 127.0.0.1:80;
          server 127.0.0.2:80;
      }
      
    4. fair:按照后端服务器响应时间来进行分配请求,响应时间短的优先进行分配。

      upstream server_pool{
          server 127.0.0.1:80;
          server 127.0.0.2:80;
          fair
      }
      
    5. url_hash:按照访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

      upstream myserver{
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;
        hash $request_uri;
        hash_method crc32;
      }
      
  5. 动静分离:

    见名知意,就是将动态页面和静态页面的请求进行分离,将静态页面(如html、css、图片等)可以放在Nginx服务器中进行处理,需要动态页面(如 jsp页面、servlet程序等)时请求Tomcat进行处理。Tomcat本身是用来处理动态资源的,虽然可以处理静态资源但效率并不高,会带来额外的资源消耗。利用Nginx可以让Tomcat专注于动态资源处理,静态资源由静态资源服务器处理,以此来提升整个系统的性能。

1.2 Nginx 特点

  1. 可移植性:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本。
  2. 高效:Nginx 专为性能优化而开发, 性能是其最重要的考量,实现上非常注重效率 ,能经受高负载的考验,有报告表明能支持高 达 50,000 个并发连接数。
  3. 可靠: 中国大型公司百度、京东、新浪、网易、腾讯、淘宝等都在使用Nginx 。
  4. 事件驱动:通信机制采用epoll模型,支持更大的并发连接。
  5. master/worker结构:一个master进程,生成一个或多个worker进程。
  6. 内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
  7. 成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
  8. 接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送后后端web服务器,极大的减轻后端web服务器的压力。
  9. 发送响应报文时,是边接收来自后端web服务器的数据,边发送给客户端的。
  10. 网络依赖型低。NGINX对网络的依赖程度非常低,理论上讲,只要能够ping通就可以实施负载均衡,而且可以有效区分内网和外网流量。
  11. 支持服务器检测。NGINX能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上。
  12. 稳定性高:用于反向代理,宕机的概率微乎其微。
  13. 节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
  14. 内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。

二、Nginx 的安装

2.1 Linux服务器安装Nginx:

  1. 官网下载nginx安装包(.tar)文件到本地。

  2. 上传nginx安装包至Linux服务器。

  3. 安装nginx所需要的依赖,pcre包和zlib用以支持重写,正则以及网页压缩等等,OpenSSL是一个开放源代码软件包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。

    yum install pcre -y
    yum install pcre-devel -y
    yum install zlib -y
    yum install zlib-devel -y
    yum install openssl -y
    yum install openssl-devel -y
    

    yum源⾃动安装Nginx依赖,pcre、openssl、gcc、zlib:

    yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
    
  4. 解压安装Nginx

    #解压
    cd /usr/local
    tar -zxvf nginx-1.16.0.tar.gz
    #进行configure配置,查看是否报错
    cd nginx-1.16.0/
    ./configure
    #编译
    make
    #安装
    make install
    #在 /usr/local/nginx目录下,可以看到如下4个目录:
    #conf配置文件,html网页文件,logs日志文件,sbin主要二进制程序
    

    PS:如果出现这个错误:./configure: error: C compiler cc is not found,则执行这个命令:

    yum -y install gcc gcc-c++ autoconf automake make
    
  5. 启动Nginx

    #检查 nginx.conf 配置文件是否有错
    /usr/local/nginx/sbin/nginx -t
    #nginx启动命令:
    /usr/local/nginx/sbin/nginx
    #指定配置文件启动
    /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    #关闭命令:
    /usr/local/nginx/sbin/nginx -s stop
    #重启命令:
    /usr/local/nginx/sbin/nginx -s reload
    

2.2 Window 环境安装Nginx

  1. 官网下载安装包(.zip)并解压。
    在这里插入图片描述

  2. 启动nginx:直接双击nginx.exe文件,或目录文件下打开cmd输入start nginx 或 nginx.exe。

  3. 检查是否启动成功: 浏览器网址输入:http://localhost/,看到如下界面则表示启动成功:

在这里插入图片描述

三、Nginx 配置文件介绍

3.1 位置

以 Windows 为例 :配置文件在文件安装目录中conf文件夹下 \nginx-1.18.0s\conf\nginx.conf。
在这里插入图片描述

3.2 组成结构

当用文本编辑器打开后,删除掉注释部分内容后如下所示:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

即整体结构对比如下:

在这里插入图片描述

3.3 结构介绍

全局块:

包括主要会设置一些影响nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,进程 PID 存放路径、日志存放路径和类型以 及配置文件的引入等。

例如:

#配置worker进程运行用户(和用户组),nobody也是一个linux用户,一般用于启动程序,没有密码
user nobody;
#user www www;

#配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
worker_processes 1;

#配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#配置进程pid文件
pid logs/nginx.pid;

#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
worker_rlimit_nofile 65535;

events块:

events 块涉及的指令,主要影响 Nginx 服务器与用户的网络连接,常用的设置包括是否开启对多 work process 下的网络连接进行序列化,是否 允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 word process 可以同时支持的最大连接数等。

例如:

#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; 
#epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型。
use epoll;

#单个进程最大连接数(最大连接数=连接数*进程数)
worker_connections 65535;

http块:

是 Nginx 服务器配置中最频繁的部分,

http全局块:配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。

例如:

#常见的一些基础配置
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #默认文件类型
charset utf-8; #默认编码
server_names_hash_bucket_size 128; #服务器名字的hash表大小
client_header_buffer_size 32k; #上传文件大小限制
large_client_header_buffers 4 64k; #设定请求缓冲
client_max_body_size 8m; #设定请求缓冲
sendfile on; #开启高效文件传输模式,对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
tcp_nopush on; #防止网络阻塞
tcp_nodelay on; #防止网络阻塞
keepalive_timeout 120; #长连接超时时间,单位是秒

#FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

#gzip模块设置
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #最小压缩文件大小
gzip_buffers 4 16k; #压缩缓冲区
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩等级
gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型
gzip_vary on; #增加响应头'Vary: Accept-Encoding'
limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

全局 server 块:最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。

#虚拟主机的常见配置
server {
    listen       80; #配置监听端口
    server_name  localhost; #配置服务名
    charset utf-8; #配置字符集
    access_log  logs/host.access.log  main; #配置本虚拟主机的访问日志
    
    location / {
        root html; #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
        index index.html index.htm; #配置首页文件的名称
    }
    
    error_page 404             /404.html; #配置404错误页面
    error_page 500 502 503 504 /50x.html; #配置50x错误页面
}

#配置https服务,安全的网络传输协议,加密传输,端口443
server {
    listen       443 ssl;
    server_name  localhost;

    ssl_certificate      cert.pem;
    ssl_certificate_key  cert.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

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

location 块:主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。 地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

例如:

root html; #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
index index.html index.htm; #配置首页文件的名称

proxy_pass http://127.0.0.1:88; #反向代理的地址
proxy_redirect off; #是否开启重定向
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
#以下是一些反向代理的配置,可选。
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k;  #设定缓存文件夹大小

四、Nginx 的基本操作

  1. 查看版本:nginx -v

  2. 启动:start nginx 或 nginx.exe

    (建议使用start nginx ,nginx.exe会使cmd窗口一直处于执行中,不能进行其他命令操作。)

  3. 停止:nginx.exe -s stop 或 nginx.exe -s quit

    (stop是快速停止nginx,可能并不保存相关信息;quie是完整有序的停止nginx,并保存相关信息。)

  4. 检查配置文件:nginx -t

  5. 重载:nginx.exe -s reload

    (当修改配置信息后,需要重新载入这些配置时使用此命令。)

  6. 重新打开日志文件:nginx.exe -s reopen

  7. 查看nginx进程:ps -ef | grep nginx

五、Nginx面试题

  1. 请解释一下什么是Nginx ?
    Nginx是一个web服务器和反向代理服务器,用于HTTP 、HTTPS 、SMTP 、POP3 和IMAP 协议。

  2. 什么是正向代理和反向代理?
    正向代理就是一个人发送一个请求直接就到达了目标的服务器
    反方代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规则分发给了
    后端的业务处理服务器进行处理了

  3. 使用“反向代理服务器的优点是什么?
    反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于
    安全方面来说是很好的,特别是当您使用web托管服务时。

  4. 请列举Nginx 的一些特性。
    Nginx 服务器的特性包括:
    反向代理/L7负载均衡器
    嵌入式Perl解释器
    动态二进制升级
    可用于重新编写URL,具有非常好的PCRE支持

  5. Nginx的优缺点?
    优点:
    占内存小,可实现高并发连接,处理响应快
    可实现http服务器、虚拟主机、方向代理、负载均衡
    Nginx配置简单
    可以不暴露正式的服务器IP地址
    缺点:
    动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用
    nginx作为反向代理抗住压力,

  6. 为什么Nginx性能这么高?
    因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决

  7. Nginx应用场景?
    http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
    虚拟主机。可以实现在一台服务器虚拟出多个网站,例如个人网站使用的虚拟机。
    反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要
    用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会应为某台
    服务器负载高宕机而某台服务器闲置的情况。
    nginz 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。

  8. 请解释Nginx服务器上的Master和Worker进程分别是什么?
    Master进程:读取及评估配置和维持
    Worker进程:处理请求

  9. 请解释你如何通过不同于80的端口开启Nginx?
    为了通过一个不同的端口开启Nginx,你必须进入/etc/Nginx/sites-enabled/,如果这是默认文件,那么
    你必须打开名为“default”的文件。编辑文件,并放置在你想要的端口:
    Like server { listen 81; }

  10. Nginx负载均衡的算法怎么实现的?策略有哪些?
    为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当
    用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。Nginx负载均衡实现的策略有以下五种:
    1、 轮询(默认)2、权重 weight3、 ip_hash( IP绑定)4、 fair(第三方插件)5、url_hash(第三方插件)

  11. Nginx配置高可用性怎么配置?
    当上游服务器(真实访问服务器),一旦出现故障或者是没有及时相应的话,应该直接轮训到下一台服务
    器,保证服务器的高可用
    Nginx配置代码:

    server {
        listen 80;
        server_name www.lijie.com;
        location / {
            ### 指定上游服务器负载均衡服务器
            proxy_pass http://backServer;
            ###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手
            等候响应超时时间
            proxy_connect_timeout 1s;
            ###nginx发送给上游服务器(真实访问的服务器)超时时间
            proxy_send_timeout 1s;
            ### nginx接受上游服务器(真实访问的服务器)超时时间
            proxy_read_timeout 1s;
            index index.html index.htm;
        }
    }
    
  12. Nginx怎么判断IP不可访问?

    # 如果访问的ip地址为192.168.9.115,则返回403
    if ($remote_addr = 192.168.9.115) {
    return 403;
    }
    
  13. 怎么限制浏览器访问?

    ## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500
    if ($http_user_agent ~ Chrome) {
    return 500;
    }
    
  14. Nginx目录结构有哪些?

    [root@localhost ~]# tree /usr/local/nginx
    /usr/local/nginx
    ├── client_body_temp
    ├── conf # Nginx所有配置文件的目录
    │ ├── fastcgi.conf # fastcgi相关参数的配置文件
    │ ├── fastcgi.conf.default # fastcgi.conf的原始备份文件
    │ ├── fastcgi_params # fastcgi的参数文件
    │ ├── fastcgi_params.default
    │ ├── koi-utf
    │ ├── koi-win
    │ ├── mime.types # 媒体类型
    │ ├── mime.types.default
    │ ├── nginx.conf # Nginx主配置文件
    │ ├── nginx.conf.default
    │ ├── scgi_params # scgi相关参数文件
    │ ├── scgi_params.default
    │ ├── uwsgi_params # uwsgi相关参数文件
    │ ├── uwsgi_params.default
    │ └── win-utf
    ├── fastcgi_temp # fastcgi临时数据目录
    ├── html # Nginx默认站点目录
    │ ├── 50x.html # 错误页面优雅替代显示文件,例如当出现502错误时会调
    用此页面
    │ └── index.html # 默认的首页文件
    ├── logs # Nginx日志目录
    │ ├── access.log # 访问日志文件
    │ ├── error.log # 错误日志文件
    │ └── nginx.pid # pid文件,Nginx进程启动后,会把所有进程的ID号写到
    此文件
    ├── proxy_temp # 临时目录
    ├── sbin # Nginx命令目录
    │ └── nginx # Nginx的启动命令
    ├── scgi_temp # 临时目录
    └── uwsgi_temp # 临时目录
    
  15. Nginx配置文件nginx.conf有哪些属性模块?

    worker_processes 1; # worker进程的数量
    events { # 事件区块开始
    worker_connections 1024; # 每个worker进程支持的最大连接数
    } # 事件区块结束
    http { # HTTP区块开始
    include mime.types; # Nginx支持的媒体类型库文件
    default_type application/octet-stream; # 默认的媒体类型
    sendfile on; # 开启高效传输模式
    keepalive_timeout 65; # 连接超时
    server { # 第一个Server区块开始,表示一个独立的
    虚拟主机站点
    listen 80; # 提供服务的端口,默认80
    server_name localhost; # 提供服务的域名主机名
    location / { # 第一个location区块开始
    root html; # 站点的根目录,相当于Nginx的安装目录
    index index.html index.htm; # 默认的首页文件,多个用空格分开
    } # 第一个location区块结果
    error_page 500502503504 /50x.html; # 出现对应的http状态码时,使
    用50x.html回应客户
    location = /50x.html { # location区块开始,访问
    50x.html
    root html; # 指定对应的站点目录为html
    }
    }
    ......
    
  16. 为什么Nginx性能这么高?
    因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决

  17. Nginx静态资源?
    静态资源访问,就是存放在nginx的html页面,我们可以自己编写

  18. 如何用Nginx解决前端跨域问题?
    使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。

  19. Nginx怎么处理请求的?
    nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的
    location,location就是实际地址

    server { # 第一个Server区块开始,表示一个独立的虚拟主机
    站点
    listen 80; # 提供服务的端口,默认80
    server_name localhost; # 提供服务的域名主机名
    location / { # 第一个location区块开始
    root html; # 站点的根目录,相当于Nginx的安装目录
    index index.html index.htm; # 默认的首页文件,多个用空格分开
    } # 第一个location区块结果
    }
    
  20. Nginx虚拟主机怎么配置?
    1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
    2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
    3、基于ip的虚拟主机。
    基于虚拟主机配置域名
    需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名
    网站目录下新增index.html文件;

    #当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件
    server {
    listen 80;
    server_name www.lijie.com;
    location / {
    root data/www;
    index index.html index.htm;
    }
    }
    #当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/bbs目录下文件
    server {
    listen 80;
    server_name bbs.lijie.com;
    location / {
    root data/bbs;
    index index.html index.htm;
    }
    }
    

    基于端口的虚拟主机
    使用端口来区分,浏览器使用域名或ip地址:端口号 访问

    #当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件
    server {
    listen 8080;
    server_name 8080.lijie.com;
    location / {
    root data/www;
    index index.html index.htm;
    }
    }
    #当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址 127.0.0.1:8080
    server {
    listen 80;
    server_name www.lijie.com;
    location / {
    proxy_pass http://127.0.0.1:8080;
    index index.html index.htm;
    }
    }
    
  21. location的作用是什么?

    location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹
    配,匹配成功即进行相关的操作
    location的语法能说出来吗?
    注意:~ 代表自己输入的英文字母

在这里插入图片描述

  1. Location正则案例
    示例:

    #优先级1,精确匹配,根路径
    location =/ {
    return 400;
    }
    #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
    location ^~ /av {
    root /data/av/;
    }
    #优先级3,区分大小写的正则匹配,匹配/media*****路径
    location ~ /media {
    alias /data/static/;
    }
    #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
    location ~* .*\.(jpg|gif|png|js|css)$ {
    root /data/av/;
    }
    #优先7,通用匹配
    location / {
    return 403;
    }
    
  2. Nginx常用变量

    • $host: 请求的主机头

      if ($host = 'bbs.gitlib.com') {
      rewrite ^/$ http://bbs.bliwan.com permanent;
      }
      
    • $remote_addr: 客户端IP地址

    • $remote_port: 客户端端口号

    • $remote_user: 已经经过Auth Basic Module验证的用户名

    • $http_referer: 请求引用地址

    • $http_user_agent: 客户端代理信息(UA)

    • $http_x_forwarded_for: 相当于网络访问路径

    • $body_bytes_sent: 页面传送的字节数

    • $time_local: 服务器时间

    • $request: 客户端请求

    • $request_uri: 请求的URI,带参数, 不包含主机名

    • $request_filename: 请求的文件路径

    • $request_method: 请求的方法,如GET、POST

    • $args: 客户端请求中的参数

    • q u e r y s t r i n g : 等同于 query_string: 等同于 querystring:等同于args, 客户端请求的参数

    • $nginx_version: 当前nginx版本

    • $status: 服务器响应状态码

    • $server_addr: 服务器地址

    • $server_port: 请求到达的服务器端口号

    • $server_protocol: 请求的协议版本

    • $content_type: HTTP请求信息里的Content-Type字段

    • $content_length: HTTP请求信息里的Content-Length字段

    • u r i : 请求中的当前 U R I ( 不带请求参数,参数位于 uri: 请求中的当前URI(不带请求参数,参数位于 uri:请求中的当前URI(不带请求参数,参数位于args)

    • $document_root: 当前请求在root指令中指定的值

    • d o c u m e n t u r i : 与 document_uri: 与 documenturi:uri相同

  3. 为什么要做动静分离?

    • Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动
      静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开
      来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。

    • 让静态的资源只走静态资源服务器,动态的走动态的服务器

    • Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。

    • 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器

      在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器
      tomcat。

    • 若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是
      反向代理服务器的一

以上面试题收集于网络

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨同学_丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值